2011年1月7日 星期五

HW2_直方圖與均化

首先均化的基本原理是,先把每個像數統計出來,再把每一個分別累加起來存在陣列,最後把累加的陣列除以總共像數,變成機率後再乘以255,再丟回去改掉原圖就完成整個均化過程了。
(以下是我讀的圖,和均化結果。)

一開始讀圖時,要先把每個像數統計出來

// 計算 Histogram

for (i=0;i

{

bPtrOriginalImage = (Byte *)imOriginal->Picture->Bitmap->ScanLine[i];

for (j=0;j

for (k=0;k

iHistogram[k][bPtrOriginalImage[j*iChannelNumber+k]]++;

}

計算完後 再去算累加起來的直方並畫出

// 計算 Cumulative Histogram

for (i=0;i<256;i++)>

{

for (k=0;k<3;k++)>

{

if (i==0)

iCumulativeHistogram[k][i] = iHistogram[k][i];

else

iCumulativeHistogram[k][i] = iCumulativeHistogram[k][i-1] + iHistogram[k][i];

// 建立 Histogram Equalization Table

bHistogramEqualizationTable[k][i] = (byte)((iCumulativeHistogram[k][i] * 255 / iPixelNumber) + 0.5);

}

// 計算每個所需畫線的長度 t

t = int(( float(iHistogram[rgHistogramChannel->ItemIndex][i]) * fHistogramScalar ) + 0.5);

imHistogram->Canvas->MoveTo(i*2+1,300);

imHistogram->Canvas->LineTo(i*2+1,300-t);

}

比較有趣的是,第一次用到BCB的MoveTo和LineTo來移動分行和畫線,LineTo的第二個參數,還可以自訂長度,或是用*的來讓比例縮小。

沒有留言:

張貼留言