2016年12月4日 星期日

05362640 周芸 HW02


直方圖與直方圖均化

直方圖統計原理

        Bmp 圖片的存儲 每一個圖元按照BGR三個通道順序存儲其顏色值顏色範圍從0-255表示每個通道顏色的深淺對圖片的每一個圖元顏色進行直方統計就可以知道圖片的顏色是較為明豔還是暗淡有利於對圖像的優化處理而一個圖元有3個顏色每個顏色有256種可能256^3種顏色組合是非常巨大的而且也不夠直觀為了避免麻煩因此對3個通道分別進行長條圖統計

直方圖統計方法

    宣告3個大小為256的陣列對圖像的每一個圖元進行顏色統計


通過畫布畫出直方圖


累積直方圖方法



     
同理通過畫布畫出


直方圖均化原理

    將每個圖元顏色通道的累積比例*255 g(x, y) = cdf( f(x, y) ) * 255成為新的圖像的值即可讓每一個顏色均分拉開成為一個長條圖

長條圖均化方法
由於圖片均勻的取色於區間(0-255),所以每一個長條圖都有傾向於均勻的分散的趨勢。

此時可以看到直方圖有拉開均化成為直方形狀的趨勢


而基本上顏色數值都是在(0-255)之間均勻取值,在累積時,每一次都會累積差不多的個數,所以累積圖的增長是呈現線性增長的。
均化後的累計直方圖也成了有規律的三角形狀


    顏色較為豔麗的圖片不適合做直方圖均化處理而較為昏暗無光的圖片反而會有意想不到的效果


存儲並打開處理後的圖像





因為讓圖片長條圖均化,均勻取色之後,顏色不會都集中在黑色部分,部分擴散到了接近白色,所以圖片在原本很灰暗的時候可以變的更清晰明亮一些。

介面設計:

為了方便觀看效果弄成兩個視窗且不必切換



去除左邊的勾時可以隱藏該軌道的直方圖



TButton控制項使用

按兩下控制項TmainMenu一樣直接編寫即可



TCombobox控制項使用


按一下打開視窗


編輯下拉選項




編寫程式判斷

void __fastcall TForm1::HistogramChange(TObject *Sender)

{
  if (ComboText == "Original_Histogram" && Image4->Picture!=NULL)

                    tempImage->Picture = Image4->Picture;

          else if(ComboText == "Now_Histogram" && Image2->Picture!=NULL)

                    tempImage->Picture = Image2->Picture;

}

TCheckbox控制項使用

if(CheckBox1->State==cbChecked)

{

         //如果打勾執行程式

}

else

{

  //否則執行

}

    因為這裡分為了長條圖和累積長條圖兩種checkbox只是判斷通道所以先用Tcombobox選擇是長條圖還是累積長條圖然後將計算的數值存在固定的陣列X[256]然後check打勾時只用將X[256]在畫布上畫出就可以了

沒有留言:

張貼留言