對直方圖的一些理解

 

這周學習直方圖,看了許多資料,才搞明白其中的一些道道,現在結合下圖給大家分享下。

084029693.jpg

 

1bin的含義

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

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

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

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的最大值爲圖像的最高高度。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章