084029693.jpg

 

1、bin的含義

直方圖中bin的含義:計算顏色直方圖需要將顏色空間划分為若干小的顏色區間,即直方圖的bin,通過計算顏色在每個小區間內德像素得到顏色直方圖,bin越多,直方圖對顏色的分辨率越強,但增加了計算機的負擔。即(上圖所分10個豎條區域,每個豎條區域稱為一個bin)

(2)簡單來說直方圖就是對數據進行統計,將統計值組織到一系列事先定義好的bin中。bin中的數值就是從數據中計算出的特征的統計量,這些數據可以是諸如梯度、方向、色彩或任何其他特征。無論如何,直方圖獲得的是數據分布的統計圖。直方圖實際上是一個方便表示圖像特征的手段。

2、cvCreateHist()創建一個直方圖函數理解

dim:表示幾維空間,即一般彩色圖像是3通道的,dim=3,故灰度圖像為1通道,則dim=1。dim=2,說明只計算彩色通道中的其中兩個通道。

sizes:表示的是bin的個數,上圖有10個bin,則sizes=10。

type:CV_HIST_ARRAY,CV_HIST_SPACRSE虛疏矩陣:如果在矩陣中,多數的元素為0,則稱矩陣為虛疏矩陣。

ranges:上圖最右邊的數字100,就是說ranges范圍為0~100。如果是灰度圖像一般設為0~255,sizes=256,則每個 bin就表示一個灰度級的統計。在函數中ranges是bin范圍的數組,即bin范圍為一個數組,ranges為一個數組的數組。

uniform:決定ranges,uniform=0是均勻直方圖,非0時不均勻直方圖。

3、直方圖歸一化

歸一化處理並沒有改變圖像的對比度 

歸一化處理很簡單,假設原圖像是8位灰度圖像,那么讀入的像素矩陣最大值為256,最小值為1 
定義矩陣為I 
J=I/256,就是歸一化的圖像矩陣,就是說歸一化之后所有的像素值都在[0,1]區間內 

以灰度圖像來說,就是一個每個bin中的像素數分別除以整幅圖像總的像素數,得出一個在[0,1]區間數,即概率數。

 

4、直方圖處理流程:首先

1、首先創建一個直方圖

  1. CvHistogram* cvCreateHist(   

  2. int dims, //直方圖維數 

  3. int* sizes,//直翻圖維數尺寸

  4. int type, //直方圖的表示格式

  5. float** ranges=NULL, //圖中方塊范圍的數組

  6. int uniform=1 //歸一化標識

  7.     );  

 

2、計算圖像直方圖cvCalcHist();

3、歸一化直方圖cvNormalizeHist();

4、通過訪問直方圖元素bin的值(歸一化后已變為在【0~1】區間數)在一張圖片上顯示出直方圖來。注意最終呈現的直方圖是我們通過矩形自我繪制的,不是自動有函數可生成的。

   一般默認bin的最大值為圖像的最高高度。