數字圖像
因為一幀圖像可以由像素矩陣組成,像素亮點是x,y軸
相交的亮度點。這些概念在該系列一
中已經描述的很清楚。
直方圖
亮度直方圖 : 表示每個亮度級在圖像中的占有率
圖像對比度: 是通過亮度級范圍來度量的
回想一下,在系列一
中我們看到了8位(bit)
的圖片,亮度級別是0~255
, 數值越小顏色越暗。
上圖記住x軸
和y軸
分別代表的含義 因此我們可以判斷這張圖白色太多,也就是太亮了。比較好的做法是使得整個分布較為平均,下面有很多圖片例子
直方圖應用較多的一個場景是攝影師看曝光度,對比度。
我們來看記下來一些列圖片,感受一下
數碼相機內的展示(該圖對比度很均勻所以圖片看起來亮暗合適,但亮色很多,因為白色桌子)
此圖說明x軸
代表亮度0(黑)~255
看一下彩色圖片,不同顏色(紅、綠、藍、黃、白)
這些顏色分別直方圖
這幅圖曝光太高并且淺色太多
這幅圖與上方圖片剛好相反(看起來像是經過ps處理過對比度的圖)
應用
說了這么多,直方圖到底有什么用呢? 可以讓圖像變清晰。不信就看下面2張圖
原圖
經過處理后的圖片
該圖片未處理時,會使得灰度過多,像素集中在照片中間。這個時候如果能把整個像素拉伸,使得白色和黑色部分靠譜多一些,照片就會變得清晰起來。
直方圖計算
直方圖的原理我們知道了“x軸是0~255亮度級,y軸代表該亮度的像素個數
” 編程中,通過histogram算子即可得到。非常的簡單,返回的是個二維數組。
點算子
圖像處理中最基本的運算就是點運算。顧名思義就是針對每個像素點進行計算。比如我想讓圖片變亮及拉伸對比度,則讓每個像素與一個標量,例如標量為2
相乘,使得亮度級擴大一倍。相反的,我們就可以相除。例如我們把第一張眼睛圖片變量
點算子 可以進行加法和乘法操作來增強亮度 如下圖
鋸齒算子
鋸齒(sawtooth)算子
是另一種形式的線性算子。鋸齒算子是用來增強圖片的局部亮度和對比度(因為我們有時候是對照片的局部某個部分亮度對比度不滿意)
看眼睛圖,用鋸齒算子處理后的結果
算子有很多種 下面可以看圖
直方圖正規化 (專業領域最常用)
就像本文最開始說的,直方圖具有的意義是適當處理可以讓圖像變得更加清晰。我們還記得當時的直方圖樣子嗎,我再發一次
我們使用正規化進行拓展和位移,使得直方圖的亮度級可以覆蓋256個亮級。另外直方圖正規化是線性變化,因此處理后的圖片可以恢復到原圖。
眼睛清晰了!
但是要記住1,直方圖均衡化非線性處理,圖片無法還原
但是要記住2,直方圖均衡化非線性處理,圖片無法還原
但是要記住3,直方圖均衡化非線性處理,圖片無法還原
25
閾值處理
閾值(thresholding)處理
簡單說,亮度范圍是0~255,在這里面我取任意一個數,比如127
當圖像中的像素值>=127
時設置成255
,相反當像素值<=127
時設置為0
。 在當前矩陣中只存在 0
和255
的值。也就是圖片只存在黑白。就像熊貓看到的世界一樣。這樣做的好處是,適當的取值,可以把我們感興趣點分離出來。如下面圖
通常很多時候我們使用Otsu 最受歡迎最優閾值處理方法。它可以選取最恰當閾值。
opencv
上有提供現成算法thresholding
到目前為止,我們關注的都是全局方法。即對整幀圖片繼續處理。還有一些局部自適應方法,常常在字符識別前的文件圖像二值化。