直方圖繪製與直方圖均化處理
直方圖(Histogram)是將影像進行像素數量統計,並將統計結果以直條圖的方式呈現。
下圖為用C++ Builder 將一張影像的直方圖顯示出來,並與Photoshop上影像色彩的直方圖做比較驗證。
下圖為影像在Photoshop上的直方圖
接下來是實作累積直方圖(Cumulative Histogram) 將直方圖中,統計色階為小於或等於該色階的像素總和。
最後做直方圖均化處理,直方圖均化(Histogram Equalization) 是一種自動調整影像對比的演算法。公式為:g(x, y) = cdf ( f(x, y) ) * 255,cdf是累積密度函數值,可以運用先前計算的累積直方圖去乘最大色階值255。
下圖為均化過後的影像與直方圖,可以看到直方圖上各色成像相當平均,影像更清晰,整個畫面也更美觀。
另外,直方圖均化處理的目的主要是將低對比的影像轉化成高對比的影像,所以將實作下面這個例子,此張照片直方圖顯示的色彩都集中在色階最暗的地方,經過均化後的影像,很明顯看出對比被強化。
均化前:
均化後:
最後在這次的作業花了很多時間在繪製直方圖上,剛開始繪製時會出現畫線超出Image的問題,首先統計色彩最大值並以等比例去縮放畫線的長度去解決。
等比例去縮放畫線長度的部分程式碼:
Image4->Canvas->MoveTo (fWidthOfBoard+(r*3)*fWidthOfPen,fBottomOfChart);
Image4->Canvas->LineTo (fWidthOfBoard(r*3)*fWidthOfPen,fBottomOfChart-fHeightOfChart*iBlue[r]/fMaxBlue);
沒有留言:
張貼留言