OpenCV .直方图均衡 CLAHE算法学习
前言
圖像識(shí)別工程開發(fā)中需要增強(qiáng)圖像對比度,便于后續(xù)處理,接觸到了CLAHE(Contrast Limited Adaptive Histogram Equalization),記錄一下其中的學(xué)習(xí)過程。
1.直方圖均衡
1.1灰度直方圖
灰度圖中像素值的分布為0-255,以灰度值為橫坐標(biāo),縱坐標(biāo)為該灰度值對應(yīng)的像素點(diǎn)數(shù)目/比例,則得到了灰度圖像的直方圖,體現(xiàn)的是圖像中灰度的整體分布情況。
OpenCV中提供了相應(yīng)的計(jì)算函數(shù)calcHist(),可以得到相應(yīng)分布范圍的像素點(diǎn)數(shù);將其繪制出來觀察,更為直觀。下圖為某輸入圖像和其灰度直方圖分布。
一般性規(guī)律:對于灰度圖像,以個(gè)人觀察意愿將其分為前景和背景區(qū)域,前景是我們所感興趣的區(qū)域,背景則反之。若前景和背景的灰度差異大,則易于人們觀察,否則不易觀察。一般來說若圖像的灰度直方圖集中在某個(gè)區(qū)域,其整體對比度較差,不易于我們區(qū)分前景和背景;反之若灰度直方圖分布較為均勻,則整體對比度較好,易于我們區(qū)分前景和背景。
1.2直方圖均衡化(Histogram Equalization, HE)
1)效果
直方圖均衡化就是一種使圖像的灰度直方圖分布更佳均勻的變換方法。OpenCV中的equalizeHist()實(shí)現(xiàn)了該功能
左側(cè)為原始灰度圖,中間上方為其灰度分布;右側(cè)為HE處理后得到的圖像,中間下方為其灰度分布;對比灰度分布可知右方圖像的灰度分布更為均勻,圖像效果上來看結(jié)果圖像對比度更強(qiáng)。
2)數(shù)學(xué)原理
先說概率分布與概率密度函數(shù),看一下下圖中的題目回想一下以前的數(shù)學(xué)知識(shí)。
接下來對概率密度函數(shù)的變換做一些數(shù)學(xué)推導(dǎo),輸入公式比較麻煩,截圖為圖像粘貼進(jìn)來。
這里可以看到轉(zhuǎn)換函數(shù)T()為單調(diào)遞增函數(shù),不過結(jié)果圖的直方圖分布并不是理想的一條水平線;原因在于我們是在連續(xù)分布上推導(dǎo)得到轉(zhuǎn)換函數(shù),作用于離散分布,且不允許產(chǎn)生非整數(shù)形式的新結(jié)果。不過整體看來該轉(zhuǎn)換函數(shù)使新的分布具有展開直方圖分布的效果,增強(qiáng)了整體的對比度。
2.CLAHE
上述的HE算法得到的結(jié)果存在一些問題,主要包括:1)部分區(qū)域由于對比度增強(qiáng)過大,成為噪點(diǎn);2)一些區(qū)域調(diào)整后變得更暗/更亮,丟失細(xì)節(jié)信息。
2.1CLHE
針對問題1),有人提出了CLHE,即加入對比度限制的HE算法。轉(zhuǎn)換函數(shù)T受像素灰度概率分布的影響:其變化率與概率密度成比例;概率密度過大,會(huì)導(dǎo)致原始像素經(jīng)過變換后灰度值過高,對比度增強(qiáng)過大。
因此需要限制對比度,即限制灰度的分布;同時(shí)還需要確保概率密度的積分仍然為1。
如下圖所示,一般操作為設(shè)置直方圖分布的閾值,將超過該閾值的分布“均勻”分散至概率密度分布上,由此來限制轉(zhuǎn)換函數(shù)(累計(jì)直方圖)的增幅。
下圖是使用CLHE和HE的對比,左側(cè)圖像為HE結(jié)果,中間上方圖像為其灰度直方圖;右側(cè)圖像為CLHE結(jié)果,中間下方圖像為其灰度直方圖;觀察灰度直方圖可看到上述的限制效果;同時(shí)CLHE結(jié)果中噪點(diǎn)的分布相對于HE結(jié)果要小一些。
2.2 AHE
針對問題2),有人提出自適應(yīng)直方圖均衡算法(AHE),基本思想為:對原圖中每個(gè)像素,計(jì)算其周圍一個(gè)鄰域內(nèi)的直方圖,并使用HE映射得到新的像素值。為了能夠處理圖像邊緣的像素,一般先對原始圖像做鏡像擴(kuò)邊處理。
不過這樣做計(jì)算量偏大,為了減少計(jì)算量,一般先把原始圖像分為MXN個(gè)子區(qū)域,分別對每個(gè)子區(qū)域進(jìn)行HE變換。但是這樣又產(chǎn)生了新的問題,子區(qū)域相接處像素值分布不連續(xù),產(chǎn)生很強(qiáng)的分割線,如下圖所示。
為了解決該問題,有人提出加入雙線性插值的AHE,也就形成了完整的CLAHE。算法流程如下:
1)將圖像分為多個(gè)矩形塊大小,對于每個(gè)矩形塊子圖,分別計(jì)算其灰度直方圖和對應(yīng)的變換函數(shù)(累積直方圖)
2)將原始圖像中的像素按照分布分為三種情況處理;對比下圖,紅色區(qū)域中的像素按照其所在子圖的變換函數(shù)進(jìn)行灰度映射,綠色區(qū)域中的像素按照所在的兩個(gè)相鄰子圖變換函數(shù)變換后進(jìn)行線性插值得到;紫色區(qū)域中的像素按照其所在的四個(gè)相鄰子圖變換函數(shù)變換后雙線性插值得到
3.OpenCV中的CLAHE
OpenCV中提供了CLAHE的實(shí)現(xiàn)和接口,調(diào)用也十分簡單,其提供的兩個(gè)設(shè)置接口分別用于設(shè)置自適應(yīng)處理中的閾值,和子圖的大小。下面是調(diào)用OpenCV的HE和CLAHE處理的示例代碼和結(jié)果圖像。
1 void opencvEqualizeHist()
2 {
3 Mat img, img_gray, result;
4 Mat clahe_result;
5 img = imread("test.jpg");
6 cvtColor(img, img_gray, CV_BGR2GRAY);
7 equalizeHist(img_gray, result);
8
9 cv::Ptr<CLAHE> clahe = cv::createCLAHE();
10 clahe->setClipLimit(4);
11 clahe->setTilesGridSize(cv::Size(10, 10));
12 clahe->apply(img_gray, clahe_result);
13
14 imshow("src", img_gray);
15 imshow("result", result);
16 imshow("clahe_result", clahe_result);
17
18 waitKey();
19 }
對比可發(fā)現(xiàn)CLAHE的結(jié)果相對于HE的結(jié)果,未出現(xiàn)結(jié)果像素相比于原圖因調(diào)整得更亮/更暗而丟失了細(xì)節(jié)的情況,且局部對比度更強(qiáng)。
總結(jié)
以上是生活随笔為你收集整理的OpenCV .直方图均衡 CLAHE算法学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 义务兵军考体能77分算优秀吗
- 下一篇: 如何全方位的保障系统的稳定性