2016年12月4日 星期日

05362640 周芸 HW02


直方圖與直方圖均化

直方圖統計原理:

        Bmp 圖片的存儲 ,每一個圖元按照B、G、R三個通道順序存儲其顏色值,顏色範圍從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]在畫布上畫出就可以了。

沒有留言:

張貼留言