【計算機視覺】圖像處理——圖像增強技術(一)

好久沒有發過計算機視覺的文章啦~

差點就忘記自己的本職工作了......

—————————————下面是正文—————————————

       對於人的眼睛來說,要識別一幅不太清晰的照片上面的人物可能不是一件難事,然而如果把這種事情交給計算機來做的話,可能就有難度了,所以,爲了讓人工智能設備的視覺系統可以更加準確地找到我們想讓它找到的目標,視覺三個基本步驟的第一個步驟——圖像處理,就顯得尤爲重要(三個基本步驟不知道是哪三個的同學可以找我之前的視覺文章【計算機視覺】數字圖像以及圖像處理的基本步驟,增加下點擊量,hiahiahia~),

       作爲視覺處理的第一步,圖像處理主要負責把圖像進行初步的去噪、增強等,使得原本模糊的照片變得比原來更爲清晰,突出目標,但是值得注意的是,視覺處理大部分情況下都是爲了突出目標而達到儘量接近清晰的結果,並不能百分百地把一張照片還原成原圖,比如想百分百去掉馬賽克什麼的......還是想想就好~(其實去馬賽克最有效的方法是眯着眼然後遠遠地看 ~-~)

       在圖像處理中,有很多的方法可以讓圖像變得清晰,其中一個就是叫 “圖像增強” 的方法 ,圖像增強主要應用在圖像特別暗時,或者因爲曝光太亮而無法讓目標突出,這個時候就需要把目標的亮度提高一點,然後把不必要的障礙(俗稱:噪聲)調暗,以把目標清晰度最大化。今天就來講幾個比較簡單的,專門對於像素進行處理的方法。

 

一.對比度增強法

       對比度增強的方法有很多,其中最簡單的就是讓每個像素都乘以一個數,使得圖像整體的像素擴大,提高對比度。在這裏說一下什麼是對比度:圖像的亮區與暗區的灰度的比值,圖像的對比度越大,明暗的區分就會更加明顯,目標更爲突出。什麼是叫灰度值:圖像上各個像素的亮度值。圖像從模擬量轉化到數字量,經由量化和採樣之後,將一幅圖像分成了N個格子,而這個格子就稱之爲 “像素” , 每個格子裏面都保存有一個離散型數字,代表這個地方的灰度值。

       假設用 (x,y) 來表示每個像素的位置,辣麼 每個像素中的灰度值就可以用  F(x,y) 來表示,G(X , Y) 表示經過對比度增強的處理之後的像素值,辣麼用一個標準的公式就可以這樣來表達:

                                                            

       其中   N    代表倍數,下面我們來用  MATLAB  來實現一下對比度增強,圖像就用一下這張在百度上搜刮下來的:

                                  

                                                                   原     圖

                                             

                                                                  原圖直方圖

       處理的代碼略微簡單,就只有那麼幾行,主要就是讀入圖像,然後把圖像的每個像素都乘以N倍,然後輸出就可以了。

I = imread("yuantu.jpg"); %讀入原圖
I1 = 2 * I; %把原圖的每個像素都乘以2倍
figure,imshow(I1); %輸出處理後的圖像

        執行代碼可以得到如下效果圖

                                      

                                                                    結 果 圖

                                                

                                                                   結果圖直方圖

       由圖可以看出,當源圖像的所有像素全部擴大兩倍之後,原先一些暗區會變得超級清晰,但同時原本已經夠清楚的地方也會因爲像素擴大而變得高亮

 

二.灰度變換

         灰度值變換主要是分爲 線性變換非線性變換 兩種,因線性較多,先介紹線性變換

      (1).線性變換

        線性變換可以被應用於因成像設備動態範圍太狹窄等因素造成的對比度不足、細節分辨不清等問題,採用線性變換可以把圖像的某一個像素相對集中的範圍拉寬到某一個範圍之內,使得因灰度值過度集中而導致圖像細節不清晰的問題。用座標系來表示如下

                               

        舉個栗子,以下圖爲例

                                          

                                                  原  圖

        第一步:先調出原圖的直方圖

                                          

        由直方圖可以得知,原圖的像素值主要集中在0.4~0.7這個範圍,所以,如果我們把[0.4 0.7]的像素值擴展到 [0 1]範圍中,將會使得原圖中大片相同的像素降低,而原圖中的細節將會被提亮

         第二步:灰度範圍拉伸

         這一步實現起來也非常的簡單,因爲MATLAB裏面有個函數叫 imadjust(I,[low_in; high_in],[low_out; high_out])  ,具體的用法可以再 MATLAB 的命令行裏面輸入 : help imadjust 獲取詳細用法 。

I3 = imadjust(I,[0.45 0.7],[]); %在這裏,I 表示輸入的原圖,經過函數的處理之後在用一個I3裏存放

          第三步:顯示結果

                                           

                                                  結 果 圖

                                           

                                                 結果直方圖

           在後面還有直方圖均衡化、全局、局部等基於像素的操作方法,待我慢慢道來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章