我們可透過拉伸直方圖,使直方圖覆蓋所有強度範圍,這種方法的確能提高影像對比度,但是在多數情況,影像模糊不是因為過窄的強度範圍,而是某區間的像素強度比例過高,這時可以製作一個映射表,使得調整之後的影像,能平均使用所有的強度,進而增加影像的整體對比度。
這就是直方圖等化的概念,以一個8位元強度範圍0~255的影像來說,意味著調整之後的影像,50%的像素強度低於128,25%的像素強度低於64,其他強度比例依此類推。
OpenCV直方圖等化
void equalizeHist(InputArray src, OutputArray dst)
- src:輸入圖,8位元單通道圖。
- dst:輸出圖,和輸入圖尺寸、型態相同。
equalizeHist()函式可得到直方圖等化後的影像,以下為流程,OpenCV已將流程封裝好,使用時只要直接呼叫equalizeHist()函式即可:
- 計算輸入圖的直方圖。
- 將直方圖歸一到所有bin的總合為255。
- 計算直方圖累計表。
- 用直方圖累計表完成各強度的映射,所以假設強度30所累積的比例為20%,映射的強度即為255*0.2,由於我們直方圖歸一化到255,所以假設強度30所累積的值為20,映射的強度即為20。
以下程式碼使用直方圖等化,讓影像對比度增加: