利用OpenCV的函数equalizeHist()对图像作直方图均衡化处理
如果一幅圖像的灰度值集中在某個比較窄的區域,則圖像的對比度會顯得比較小,不便于對圖像的分析和處理。
圖像的直方圖均衡化可以實現將原圖像的灰度值范圍擴大,這樣圖像的對比度就得到了提高,從而方便對圖像進行后續的分析和處理。
文字說明比較抽象,對于圖像的直方圖均衡化,大家看下面的兩幅截圖會有更直觀的認識。
從上面兩幅的截圖中我們發現,將直方圖均衡化算法應用于左側亮圖、對比度不同的各個圖像后,得到了右側直方圖大致相同的圖像,這體現了直方圖均衡化在圖像增強方面的自適應性。
當原始圖像的直方圖不同而圖像結構性內容相同時,直方圖均衡化所得到的結果在視覺上幾乎是完全于致的。這樣的處理效果對于在進行圖像分析和比較之前將圖像轉化為統一的形式是十分有益。
算法原理如下:
⑴根據原圖像的灰度累計分布構建重映射表;
⑵通過重映射表,對原圖像進行重映射,得到經直方圖均衡化后的圖像。
具體的算法實現步驟如下:
⑴統計圖像中各灰度級的出現次數,存儲在大小為256的數組hist_sz中,比如 hist_sz[200]=2 代表灰度值為200的像素點出現次數為2。
⑵初始化圖像直方圖均衡化映射表數組lut中,比如 lut[200]=204 代表把原圖像灰度值為200的像素的灰度值重新映射為204。
⑶建立映射表,具體方法如下:
這里以求灰度值3映射為多少灰度值為例說明這個問題。
①統計小于等于某一級的像素的點有多少個,并存儲于變量sum中。比如灰度值小于等于2的像素點的個數有8個,灰度值為3的像素點個數有3個,則灰度值小于等于3的像素點個數為8+3=11(個),此時sum變量的值為11。
②利用下面兩個語句計算得到映射目標值,并將映射目標值存儲在數組lut中:
scale=255/(heightwidth);
val=sumscale;
③利用存儲在lut數組中的映射表把源圖像的像素值作一個新的映射,例如語句“dst(y,x)=lut(1,src_y_x);”。
從上面具體的實現過程,我們可以看出,均衡化實際上就是按圖像灰度值的出現頻率去重新調整整幅圖的灰度值,這樣就使得對比度不同但內容相同的圖像看起來一致了。
OpnCV提供了函數equalizeHist()對圖像進行直方圖均衡化。
函數equalizeHist()的原型如下:
函數equalizeHist()的使用示例代碼如下:
代碼中用到的圖片的下載鏈接請訪問本博文的原文獲取,
本博文的原文鏈接如下:
https://www.hhai.cc/thread-218-1-1.html
運行結果如下:
總結
以上是生活随笔為你收集整理的利用OpenCV的函数equalizeHist()对图像作直方图均衡化处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 14章
- 下一篇: 深入浅出神经网络pdf,神经网络 pdf