特征提取與圖像處(三) 直方圖 點算子

數字圖像

因為一幀圖像可以由像素矩陣組成,像素亮點是x,y軸相交的亮度點。這些概念在該系列一中已經描述的很清楚。

直方圖

亮度直方圖 : 表示每個亮度級在圖像中的占有率
圖像對比度: 是通過亮度級范圍來度量的
回想一下,在系列一中我們看到了8位(bit)的圖片,亮度級別是0~255, 數值越小顏色越暗。

圖片.png

上圖記住x軸y軸分別代表的含義 因此我們可以判斷這張圖白色太多,也就是太亮了。比較好的做法是使得整個分布較為平均,下面有很多圖片例子
直方圖應用較多的一個場景是攝影師看曝光度,對比度。
我們來看記下來一些列圖片,感受一下

數碼相機內的展示(該圖對比度很均勻所以圖片看起來亮暗合適,但亮色很多,因為白色桌子)

1.jpg

此圖說明x軸代表亮度0(黑)~255

2.jpg

看一下彩色圖片,不同顏色(紅、綠、藍、黃、白)這些顏色分別直方圖

3.jpg

這幅圖曝光太高并且淺色太多

4.jpg

這幅圖與上方圖片剛好相反(看起來像是經過ps處理過對比度的圖)

6.jpg

應用

說了這么多,直方圖到底有什么用呢? 可以讓圖像變清晰。不信就看下面2張圖

原圖

7.jpg

經過處理后的圖片

8.jpg

該圖片未處理時,會使得灰度過多,像素集中在照片中間。這個時候如果能把整個像素拉伸,使得白色和黑色部分靠譜多一些,照片就會變得清晰起來。

直方圖計算

直方圖的原理我們知道了“x軸是0~255亮度級,y軸代表該亮度的像素個數” 編程中,通過histogram算子即可得到。非常的簡單,返回的是個二維數組。

點算子

圖像處理中最基本的運算就是點運算。顧名思義就是針對每個像素點進行計算。比如我想讓圖片變亮及拉伸對比度,則讓每個像素與一個標量,例如標量為2相乘,使得亮度級擴大一倍。相反的,我們就可以相除。例如我們把第一張眼睛圖片變量

圖片.png

點算子 可以進行加法和乘法操作來增強亮度 如下圖

圖片.png

鋸齒算子

鋸齒(sawtooth)算子 是另一種形式的線性算子。鋸齒算子是用來增強圖片的局部亮度和對比度(因為我們有時候是對照片的局部某個部分亮度對比度不滿意)
看眼睛圖,用鋸齒算子處理后的結果

圖片.png

算子有很多種 下面可以看圖

圖片.png

直方圖正規化 (專業領域最常用)

就像本文最開始說的,直方圖具有的意義是適當處理可以讓圖像變得更加清晰。我們還記得當時的直方圖樣子嗎,我再發一次


圖片.png

我們使用正規化進行拓展和位移,使得直方圖的亮度級可以覆蓋256個亮級。另外直方圖正規化是線性變化,因此處理后的圖片可以恢復到原圖。

圖片.png

眼睛清晰了!

但是要記住1,直方圖均衡化非線性處理,圖片無法還原
但是要記住2,直方圖均衡化非線性處理,圖片無法還原
但是要記住3,直方圖均衡化非線性處理,圖片無法還原
25

閾值處理

閾值(thresholding)處理 簡單說,亮度范圍是0~255,在這里面我取任意一個數,比如127 當圖像中的像素值>=127時設置成255,相反當像素值<=127時設置為0 。 在當前矩陣中只存在 0255的值。也就是圖片只存在黑白。就像熊貓看到的世界一樣。這樣做的好處是,適當的取值,可以把我們感興趣點分離出來。如下面圖

圖片.png

通常很多時候我們使用Otsu 最受歡迎最優閾值處理方法。它可以選取最恰當閾值。 opencv上有提供現成算法thresholding

圖片.png
圖片.png

到目前為止,我們關注的都是全局方法。即對整幀圖片繼續處理。還有一些局部自適應方法,常常在字符識別前的文件圖像二值化。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容