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