灰度直方圖:
灰度直方圖描述了一幅圖像的繪圖統計信息,主要應用於圖像分割和圖像灰度變換等處理過程中。從數學上說它是一個關於灰度的函數,如令x表示灰度值(一般0≤x≤255),則f(x)表示當x為特定灰度時,一幅圖像上灰度值為x的像素的數量,要注意的是這里的函數f(x)是一個離散的函數。從圖形上來說,灰度直方圖就是一個二維圖,橫坐標表示灰度值(灰度級別),縱坐標表示具有各個灰度值或者灰度級別的像素在圖像中出現的次數或者概率;
imhist
目的:獲取圖像的灰度直方圖。
用法:imhist( img );直接顯示圖像img的灰度直方圖;imhist(img,n);顯示一個統計n個灰度級信息的直方圖,默認n為256;[counts, x] = imhist( img ) ;獲取直方圖信息,x為灰度級向量(一維),記錄着圖像中灰度的所有值,而counts也是一個向量(一維),里面記錄着x中對應灰度值出現的個數。
注:imhist只能統計灰度圖像的直方圖,而對於RGB圖像則需要分別統計每個通道的直方圖。故使用imhist時,要將rgb圖轉換為灰度圖。
clc;
clear all;
i=imread('lena.jpg');
if(numel(size(i))==3) %判斷圖像是否非灰度圖像;
i=rgb2gray(i);
end
imhist(i); %用自帶函數imhist實現;
title('imhist');
[m,n]=size(i);
h=zeros(1,256); %生成一個1*256的0矩陣;
for a=1:m
for b=1:n
h(i(a,b)+1)=h(i(a,b)+1)+1; %統計每個像素的數值,由於i(a,b)代表像素數值有0數值,而MATLAB中矩陣下標從1開始,所以用i(a,b)+1代替下標;
end
end
figure;
bar(h); %用bar畫圖函數實現;
axis([0 255 0 3000]); %控制bar的坐標范圍,axis([Xmin Xmax Ymin Ymax]);
title('histogram');
xlabel('intensity');
ylabel('frequency');
實驗結果如下:

