這周學習直方圖,看了許多資料,才搞明白其中的一些道道,如今結合下圖給你們分享下。數組
1、bin的含義ide
直方圖中bin的含義:計算顏色直方圖須要將顏色空間劃分爲若干小的顏色區間,即直方圖的bin,經過計算顏色在每一個小區間內德像素獲得顏色直方圖,bin越多,直方圖對顏色的分辨率越強,但增長了計算機的負擔。即(上圖所分10個豎條區域,每一個豎條區域稱爲一個bin)函數
(2)簡單來講直方圖就是對數據進行統計,將統計值組織到一系列事先定義好的bin中。bin中的數值就是從數據中計算出的特徵的統計量,這些數據能夠是諸如梯度、方向、色彩或任何其餘特徵。不管如何,直方圖得到的是數據分佈的統計圖。直方圖其實是一個方便表示圖像特徵的手段。學習
2、cvCreateHist()建立一個直方圖函數理解spa
dim:表示幾維空間,即通常彩×××像是3通道的,dim=3,故灰度圖像爲1通道,則dim=1。dim=2,說明只計算彩色通道中的其中兩個通道。code
sizes:表示的是bin的個數,上圖有10個bin,則sizes=10。orm
type:CV_HIST_ARRAY,CV_HIST_SPACRSE虛疏矩陣:若是在矩陣中,多數的元素爲0,則稱矩陣爲虛疏矩陣。blog
ranges:上圖最右邊的數字100,就是說ranges範圍爲0~100。若是是灰度圖像通常設爲0~255,sizes=256,則每一個 bin就表示一個灰度級的統計。在函數中ranges是bin範圍的數組,即bin範圍爲一個數組,ranges爲一個數組的數組。圖片
uniform:決定ranges,uniform=0是均勻直方圖,非0時不均勻直方圖。it
3、直方圖歸一化
歸一化處理並無改變圖像的對比度
歸一化處理很簡單,假設原圖像是8位灰度圖像,那麼讀入的像素矩陣最大值爲256,最小值爲1以灰度圖像來講,就是一個每一個bin中的像素數分別除以整幅圖像總的像素數,得出一個在[0,1]區間數,即機率數。
四、直方圖處理流程:首先
一、首先建立一個直方圖
CvHistogram* cvCreateHist(
int dims, //直方圖維數
int* sizes,//直翻圖維數尺寸
int type, //直方圖的表示格式
float** ranges=NULL, //圖中方塊範圍的數組
int uniform=1 //歸一化標識
);
二、計算圖像直方圖cvCalcHist();
三、歸一化直方圖cvNormalizeHist();
四、經過訪問直方圖元素bin的值(歸一化後已變爲在【0~1】區間數)在一張圖片上顯示出直方圖來。注意最終呈現的直方圖是咱們經過矩形自我繪製的,不是自動有函數可生成的。
通常默認bin的最大值爲圖像的最高高度。