(1)基本概念
如果將圖像中像素的灰度級(jí)別看作是一個(gè)隨記變量(概率論中學(xué)到的隨記變量,對(duì)后續(xù)直方圖均勻化的推到至關(guān)重要),則其分布的情況就可以用概率密度函數(shù)(PDF)來(lái)刻畫和描述,即表現(xiàn)為灰度直方圖(histogram),它表示圖像中具有某種灰度級(jí)像素的個(gè)數(shù),反映了每種灰度出現(xiàn)的頻率?;叶戎狈綀D的橫坐標(biāo)是灰度級(jí),縱坐標(biāo)是該灰度級(jí)像素的個(gè)數(shù)(出現(xiàn)的頻度),是圖像基本的統(tǒng)計(jì)特性。
從基本概念中可知,直方圖是一幅圖像中各像素灰度值出現(xiàn)次數(shù)的統(tǒng)計(jì)結(jié)果,它只反映該圖像中不同灰度值出現(xiàn)的次數(shù)(或頻數(shù)),而未反映這一灰度值像素所在的位置,也就是說(shuō),直方圖只包含了該圖像中某一灰度值像素出現(xiàn)的概率,而丟失了其所在的位置信息。
(2)編碼實(shí)現(xiàn)
MATLAB的圖像工具箱提供了imhist函數(shù)來(lái)顯示圖像的灰度直方圖,其語(yǔ)法形式如下:
imhist(I);
imhist(I,n);
[counts,x]=imhist(…);
其中,I是待計(jì)算灰度直方圖的圖像。參數(shù)n是指定的灰度級(jí)數(shù)目,對(duì)于灰度圖像而言,默認(rèn)情況下n為256,即0~255。對(duì)于二值圖像而言,n為2,即0~1兩個(gè)灰度級(jí)。若指定參數(shù)n,則會(huì)將所有灰度級(jí)均勻分布在n個(gè)小區(qū)間內(nèi),而非全部展開(kāi)。返回值counts和x為直方圖的數(shù)據(jù)向量和對(duì)應(yīng)的灰度區(qū)間向量,我就理解為直方圖的縱坐標(biāo)向量和橫坐標(biāo)向量。
現(xiàn)成的函數(shù)可以調(diào)用固然方便,但會(huì)屏蔽內(nèi)部實(shí)現(xiàn)機(jī)理和算法,也不便于以后移植,因此我決定以后的學(xué)習(xí)都盡量自己編寫函數(shù)。雖然不太會(huì)matlab編程,但我相信也不難掌握。下面就開(kāi)始自己編程建立灰度直方圖。
I=rgb2gray(imread('2.jpg')); %獲取并轉(zhuǎn)換成灰度圖像 [m,n]=size(I); %獲得圖像大小,m為行數(shù),n為列數(shù) k=m*n; %總像素個(gè)數(shù) y=zeros(1,256); %用來(lái)存放灰度級(jí)統(tǒng)計(jì)結(jié)果數(shù)據(jù)的向量 for i=1:m for j=1:n y(I(i,j)+1) = y(I(i,j)+1) + 1; %灰度級(jí)從0~255,而向量y的下標(biāo)從1~256 end end subplot(1,2,1),imhist(I),title('Original Histogram'); subplot(1,2,2),bar(y),title('My Histogram'); clear
可以看到,從像素灰度級(jí)的分布來(lái)講,兩幅圖幾乎是一樣的,但還有些小缺陷:
1.兩個(gè)直方圖的縱坐標(biāo)刻度不一樣,差了一個(gè)級(jí)別,因此乍看起來(lái)不太一樣.
2.bar(y)函數(shù)的這一用法,默認(rèn)橫坐標(biāo)的刻度范圍為1~length(y),本程序中即1~256,這與灰度級(jí)的范圍0~255有一個(gè)偏差,雖然對(duì)觀察亮度分布及對(duì)比度之類的影響不大,但還是不夠精確。
針對(duì)以上兩個(gè)缺陷,改進(jìn)的代碼如下:
I=rgb2gray(imread('2.jpg')); %獲取并轉(zhuǎn)換成灰度圖像 [m,n]=size(I); %獲得圖像大小,m為行數(shù),n為列數(shù) k=m*n; %總像素個(gè)數(shù) y=zeros(1,256); %用來(lái)存放灰度級(jí)統(tǒng)計(jì)結(jié)果數(shù)據(jù)的向量 for i=1:m for j=1:n y(I(i,j)+1) = y(I(i,j)+1) + 1; %灰度級(jí)從0~255,而向量y的下標(biāo)從1~256 end end subplot(1,2,1),imhist(I),title('Original Histogram'); x=0:255; subplot(1,2,2),bar(x,y),axis([0,255,0,140000]),title('My Histogram'); clear
聯(lián)系客服