2017年5月29日 星期一

直方圖均化 Histogram Equalization (附C語言實作)

剛剛在看論文的時候 挑中一篇在講 Dynamic Histogram Equalization ,就想說先來做看看基本的Histogram Equalization 吧

什麼叫直方圖均化呢?直方圖均化通常都是用在對比度增強,我們用lena來舉例


Lena
上圖是還沒有做任何變動前,下圖是做了直方圖均化後的成果
直方圖均化後
有沒有發現兩張圖片的不同,那我的程式碼是照著wiki做的,其實只要懂PDF和CDF很快就可以做出來了,PDF就是指機率密度函數(某像素質出現的機率),CDF是累積函數(PDF的相加)


找個論文的公式來看看,這裡的rk指的就是指像素值(0~255)
PDF:P(r)表示,此像素值出現的機率,假如我一張10*10pixels圖片裡面 像素值50出現3次,那P(50) = 3/(10*10) = 0.03
CDF:C(r)簡單來說就是把小於等於r的P(r)相加,譬如C(3) = P(0)+P(1)+P(2)+P(3)


 最後照著上面H(v)的公式,就可以求出我們轉換後的值,其實在打程式的時候可以建個表,直接查表速度可以更快,M、N表示圖片的長和寬;L表示有幾種色階變化,如果是8 bits灰階圖,那色階變化就有2^8種 = 256,下面是程式碼跑完後的直方圖變化圖

如果不懂的話,可以看一下wiki(覺得寫得很詳細



程式碼:
input:Lena.raw
重要部分是從中間do some operation吧,主要分三部份
  1. 算PDF
  2. 算CDF
  3. 建轉換對照表





沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。