MATLAB-數字圖像處理 圖像直方圖歸一化

圖像直方圖歸一化

圖像直方圖概念:

圖像直方圖是反映一個圖像像素分佈的統計表,其實橫座標代表了圖像像素的種類,可以是灰度的,也可以是彩色的。縱座標代表了每一種顏色值在圖像中的像素總數或者佔所有像素個數的百分比。圖像是由像素構成,因爲反映像素分佈的直方圖往往可以作爲圖像一個很重要的特徵。

圖像灰度直方圖:一副數字圖像有[0~255]灰度級,直方圖定義如下:

其中,是第k個灰度級(如:255),是該灰度級的個數。
歸一化直方圖定義如下:

即:第k個灰度級出現的數量,比上所有灰度級數量總和,也就是概率

獲得圖像直方圖

t=imread('a1.jpg')
subplot(1,2,1),imshow(t),title('原圖')
subplot(1,2,2),imhist(t),title('圖像直方圖')

效果圖:
在這裏插入圖片描述

Imhist
該函數用於獲取圖像數據直方圖。在圖像增強技術中,圖像灰度級直方圖有着重要的意義,是直方圖修改技術、直方圖均衡化等一些圖像處理技術的基礎。在matlab 的命令窗口中鍵入doc imhist或help imhist即可獲得該函數的幫助信息。

調用格式:

imhist(I,n)
imhist(X,map)
[counts,x] = imhist(I)
說明:imhist(I,n)其中,I爲灰度的輸入圖像,n爲指定的灰度級數目,缺省值爲256;imhist(X,map)計算和顯示索引色圖像X的直方圖,map爲調色板。用stem(x,counts)同樣可以顯示直方圖。counts和x分別爲返回直方圖數據向量和相應的彩色向量。

這裏着重說一下imhist(I,n)的用法:
驗證代碼:

 t=imread('a1.jpg')
subplot(2,3,1),imshow(t),title('原圖')
subplot(2,3,2),imhist(t),title('灰度級數默認:256')
subplot(2,3,3),imhist(t,128),title('灰度級數:128')
subplot(2,3,4),imhist(t,64),title('灰度級數:64')
subplot(2,3,5),imhist(t,32),title('灰度級數:32')
subplot(2,3,6),imhist(t,16),title('灰度級數:16')

結果圖
在這裏插入圖片描述
總結imhist(I,n):

n的定義是灰度級數,這裏我們可以理解爲將0~255分成幾份,比如默認爲256,就是分成256份,一份是1,所以灰度值每隔1就統計一次;又n爲128,則把0-255分成128份,一份爲2,灰度值每隔2統計一次,所以從對比圖像看,n爲128的看起來比n爲256的更稀疏。

[counts,x] = imhist(I)這句話的意思是,獲取直方圖的橫座標和縱座標,即各個像素級,以及每個像素級上的像素出現的次數,這個有個易錯點,就是,counts其實是直方圖的縱座標值,而x纔是直方圖的橫座標。

那麼獲得這兩個值有什麼用呢? 這裏是可以利用這兩個值,用stem函數繪出統計圖像

上代碼:

F=imread('a1.jpg');
I=rgb2gray(F);
subplot(1,3,1),imshow(I),title('原圖')
subplot(1,3,2),imhist(I),title('原圖的圖像直方圖')
[count,x]=imhist(I)
% 獲取直方圖的橫座標和縱座標,即各個像素級,以及每個像素級上的像素出現的次數 counts:縱座標 x:橫座標
subplot(1,3,3),stem(x,count),title('根據圖像直方圖繪製的統計圖')
% 通過剛纔得到的值,繪製條形圖。

效果圖:
在這裏插入圖片描述
這裏看出stem繪出的圖像和imhist繪出的圖像其實是一樣的,只是stem繪出的圖像統計了次數。

如果這裏我們需要將圖像直方圖歸一化,其實就是將縱座標變成當前次數佔總次數的概率,這個也很簡單,就需要將stem的counts先除以總像素數量就行。
代碼:

F=imread('a1.jpg');
I=rgb2gray(F);
[m,n]=size(I)
subplot(1,4,1),imshow(I),title('原圖')
subplot(1,4,2),imhist(I),title('原圖的圖像直方圖')
[count,x]=imhist(I)
subplot(1,4,3),stem(x,count),title('根據圖像直方圖繪製的統計圖')
count=count/m/n
% 獲取直方圖的橫座標和縱座標,即各個像素級,以及每個像素級上的像素出現的次數 counts:縱座標 x:橫座標
subplot(1,4,4),stem(x,count),title('圖像直方圖歸一化')

效果圖:
在這裏插入圖片描述

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