灰度直方圖(MATLAB)

1.概念

灰度直方圖是灰度級的函數,它表示圖像中具有某種灰度級的像素的個數,反映了圖像中每種灰度出現的頻率,如圖所示。灰度直方圖的橫座標是灰度級,縱座標是該灰度級出現的頻度,它是圖像最基本的統計特徵。
在這裏插入圖片描述
即三步:
1.首先需要統計它的灰度級
2.統計各個灰度級想像素個數
3.以圖的形式來表示,橫座標灰度級,縱座標概率或像素個數

橫座標的r代表圖像中像素灰度級,作歸一化處理後,範圍在[0, 1]之間。在灰度級中,r=0代表黑,r=1代表白。對於一幅給定的圖像來說,每一個像素取得[0, 1]區間內的灰度級是隨機的,也就是說r是一個隨機變量。假定對每一瞬間,它們是連續的隨機變量,那麼就可以用概率密度函數pr ( r )來表示原始圖像的灰度分佈。如果用直角座標系的橫軸代表灰度級r,用縱軸代表灰度級的概率密度函數pr( r ),這樣就可以針對一幅圖像在這個座標系中作出一條曲線來。這條曲線在概率論中就是概率密度曲線,如圖所示。

d1.png

2.性質

  1. 灰度直方圖表徵了圖像的一維信息。
  2. 灰度直方圖與圖像之間的關係是一對多的映射關係
  3. 子圖直方圖之和爲整圖的直方圖
    即:一個直方圖可以對應多幅圖像,而一個圖像只能對應一副直方圖。
    需要注意的是直方圖並沒有反映像素在圖中的位置信息

3.直方圖的計算

灰度直方圖的計算非常簡單,依據定義,在離散形式下,用rk代表離散灰度級,用pr(rk)代表pr( r ),並且有下式成立:

d3.png

式中:nk爲圖像中出現rk級灰度的像素數,n是圖像像素總數,而nk/n即爲頻數。在直角座標系中做出rk與pr(rk)的關係圖形,即稱爲該圖像的直方圖。

4.重要知識點

(1)直方圖與圖像不是一一對應的:一幅圖像對應一個直方圖,但直方圖並不一定只對應一幅圖像。

(2)直方圖僅能統計灰度像素出現的概率,反映不出該像素在圖像中的位置,即在直方圖中,沒有體現圖像所具有的空間信息。

(3)灰度直方圖能夠反映灰度圖像的對比度。

(4)利用matlab計算圖像直方圖函數爲imhist();具體用法:

  • imhist( i );直接顯示圖像i的灰度直方圖;

  • imhist(i,n)n爲指定灰度級顯示直方圖;

  • [count, x] = imhist( i ) 獲取直方圖信息,count爲每一級灰度像素個數,x爲灰度級,x也可以在imhist(i,x)中指定,可以通過stem(x,count)畫相應直方圖;

(5)所以說直方圖不同,大致的能夠反映出圖像的視覺效果的好壞。

  • 低灰度級集中,則表示比較暗。
  • 高灰度級集中,則表示比較亮。
  • 中灰度級集中,動態範圍不足,對比度比較差。
  • 均衡分佈的圖像,從低到高,像素佔據比較均衡。

5.MAITLAB程序

1.灰度圖

%灰度直方圖
f=imread('lena.jpg');
subplot(121);imshow(f);title('原圖');
subplot(122);imhist(f);title('灰度直方圖');

2.柱狀直方圖
bar(horz,v,width);
v:vertical垂直,向量,包含了將要被繪製的點
horz:horizion水平灰度級間隔,等分成幾段來降低分辨率
width:寬度 範圍0<=width<=1,默認值0.8

h = imhist(f);
h1 = h(1:10:256);
horz = 1:10:256;%1-25610刻度畫一條柱狀
bar(horz,h1);
axis([0 255 0 3000]);#x,y軸的最大最小值範圍
set(gca,'xtick',0:50:255);%0-255 座標間隔50,get CurrentAxes獲取當前軸
set(gca,'ytick',0:500:3000);%座標間隔500

3.桿狀圖/火柴梗圖
stem(horz,v,1,‘color_linestyle_marker’,‘fill’);
v:行向量
horz:水平標度值增量
color_linestyle_marker:線條顏色,線型,標記符號,見下圖。
在這裏插入圖片描述

h = imhist(f);
h1 = h(1:10:256);
horz = 1:10:256;%1-25610刻度畫一條柱狀
stem(horz,h1,'r--s','fill');%紅色虛線方形
axis([0 255 0 3000]);#x,y軸的最大最小值範圍
set(gca,'xtick',0:50:255);%0-255 座標間隔50,get CurrentAxes獲取當前軸
set(gca,'ytick',0:500:3000);%座標間隔500

4.擬合曲線圖
plot(horz,v,1,‘color_linestyle_marker’);

h = imhist(f);
plot(h);
axis([0 255 0 15000]);
set(gca,'xtick',0:50:255);
set(gca,'ytick',0:2000:15000);

5.實現灰度直方圖的顯示

I = imread('beauty.jpg');
J=rgb2gray(I);
imhist(J);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章