2016年12月22日 星期四

03360404 許淳翔, HW02

HW02:直方圖(與)均化

質方圖均化,我個人比較喜歡把它分開~~
變成直方圖統計+直方圖均化!!~~怎麼便長了!!?

一.直方圖統計:
1.建2個表格-->可以是2個255*3或是6個255*1的表格...並且都設為0
2.把每個像素點的3個顏色質-->對應的表格位子++-->計算有多少個
3.把累計放入表格
4.把直方圖畫出來!!

摁~~總體看來很簡單,最難部分的就屬畫出來了!!
但其實來說也沒有很難,寫過一遍後就都會了

5.部分程式碼:

for (i = 0 ; i < 3; i++)
{
iSum = 0 ;
for ( j = 0 ; j < 256 ; j++ )
{
iSum += iHistogram[i][j] ;
iHistogram[i][j]  = int( double ( iHistogram[i][j]*200/iMax[i]) );
iTotal [i][j] = int( double ( iSum*200/iMaxT[i] ));//累計
}
}
會需要200跟兩種最大值是方便調整長度的比列。
*200/最大質 =>因為我的畫布長度是200這樣子最長的線條就剛好會塞滿畫布長度!!不短不長
累積同上


b.畫圖:
畫布是在外面先自己拉好的。
我是希望紅,藍,綠,直方,跟累計直方都分開
所以我新增了6張圖片(6~11)
並且都設成長200寬256的黑色圖片

//把6個畫布塗滿黑色(背景顏色)
Image6->Canvas->Brush->Color = clBlack ;
Image6->Canvas->FillRect(Rect(0,0,256,200));
Image7->Canvas->Brush->Color = clBlack ;
Image7->Canvas->FillRect(Rect(0,0,256,200));
Image8->Canvas->Brush->Color = clBlack ;
Image8->Canvas->FillRect(Rect(0,0,256,200));
Image9->Canvas->Brush->Color = clBlack ;
Image9->Canvas->FillRect(Rect(0,0,256,200));
Image10->Canvas->Brush->Color = clBlack ;
Image10->Canvas->FillRect(Rect(0,0,256,200));
Image11->Canvas->Brush->Color = clBlack ;
Image11->Canvas->FillRect(Rect(0,0,256,200));

畫線要注意圖片左上才是座標(0,0)
所以由下而上要從高  200  畫到  (200-直方圖長度)

//畫線
for (i = 0 ; i < 256; i++)
{
Image6->Canvas->Pen->Color = clBlue ;
Image6->Canvas->MoveTo(i  , 200) ;
Image6->Canvas->LineTo(i  , 200-iHistogram[0][i]) ;
Image7->Canvas->Pen->Color = clGreen ;
Image7->Canvas->MoveTo(i  , 200) ;
Image7->Canvas->LineTo(i  , 200-iHistogram[1][i]) ;
Image8->Canvas->Pen->Color = clRed ;
Image8->Canvas->MoveTo(i  , 200) ;
Image8->Canvas->LineTo(i  , 200-iHistogram[2][i]) ;
Image9->Canvas->Pen->Color = clBlue ;
Image9->Canvas->MoveTo(i  , 200) ;
Image9->Canvas->LineTo(i  , 200-iTotal[0][i]) ;
Image10->Canvas->Pen->Color = clGreen ;
Image10->Canvas->MoveTo(i  , 200) ;
Image10->Canvas->LineTo(i  , 200-iTotal[1][i]) ;
Image11->Canvas->Pen->Color = clRed ;
Image11->Canvas->MoveTo(i  , 200) ;
Image11->Canvas->LineTo(i  , 200-iTotal[2][i]) ;
}

二.質方圖均化:
1.建一個存新質的表
2.套公式 g(x,y) = 255 * cdf( f(x,y) )  --->  色彩值 = 255 * ( 目前累積值 / 累積最大值 )-->存表內
3.查表法

基本上照著公式寫程式就可以正常跑出來了~~
但我因為上面有乘上一個200在公式的時候要把200除回來
當然我因為直方圖跟直方圖均畫的功能是分開的,所以並不會搞混。
我會先進行直方圖均畫之後,對變化之後的圖片進行直方圖統計!!

三.圖:

1.介面
介面保持圖片靠左,直方圖分頁靠右,分頁分成直方圖跟累計直方圖!!

2.原圖



                                                                                 

a.直方圖                                                                                   b.累計直方圖                                




 a.直方圖                                                                        b.累計直方圖




四.感想:
大致上還算簡單,就拉介面(還在熟悉XE2)跟畫圖(花比較久時間)

我覺得直方圖跟直方圖均化因該分開
做成兩個按鈕這樣別的運算(比如說灰階之類的)也可以使用。
而且我原圖跟運算後的圖的直方圖案鈕也是分開的。

而6張直方圖其實也不會很佔空間,把它做成分頁把普通跟累計的分開。
善用panel(打地基)這樣介面會好拉很多,很多東西都不會亂跑。
並且可以令圖片靠左,直方圖靠右。既好辨識又可以隨視窗大小變換。
中間還會有一片地區可以加一些別的東西(按鈕之類的)

沒有留言:

張貼留言