直方图
性质
1.从直方图看图像的统计信息
2.图像信息量可根据直方图计算
用途
1.作为图像数字化的参数
2.作为分割图像的阈值选择
3.直方图均衡化
4.计算图像信息量
5.直方图规定化
使用图片:lena.ppm
灰度统计直方图
描述:统计每一个灰度所出现的次数
性质
1.灰度直方图表述了图像的一维统计信息:不同灰度级的出现次数
2.灰度直方图与图像的对应关系:一对多
3.子图直方图之和 = 全图直方图
使用matlab实现代码
方法一:使用原生实现
clear all;
close all;
img=imread('../images/lena.ppm');
[sx sy] = size(img);
h(1:256)=0; %初始化
for x=1:sx
for y=1:sy
k = img(x,y) + 1; %0~255 记录是 1~256
h(k) = h(k) + 1;
end
end
figure; plot(h); title('Lena:hist1');
效果
方法二:使用公式
imhist函数:计算图像直方图函数
具体使用
imhist( i ):直接显示图像i的灰度直方图(默认为255个灰度级);
imhist(i,n):n为指定灰度级显示直方图;
clear all;
close all;
img=imread('../images/lena.ppm');
[sx sy] = size(img);
h(1:256)=0; %初始化
h2 = imhist(img);
figure; plot(h2); title('Lena:hist2');
效果
归一化直方图
描述:一个灰度所出现的比例(出现的概率)
计算公式:灰度直方图/图片大小
代码实现
clear all;
close all;
img=imread('../images/lena.ppm');
[sx sy] = size(img);
h = imhist(img);
h1 = h / (sx * sy);
figure; plot(h1); title('Lena:归一化直方图');
效果
累积直方图
描述:离散的信号,灰度从0开始累加
计算公式:直方图从0开始加到当前灰度值
代码实现
clear all;
close all;
img=imread('../images/lena.ppm');
[sx sy] = size(img);
h = imhist(img);
vmax = 256 ; H(1:vmax)=0; H(1)=h(1);
for i=2:vmax
H(i) = H(i-1) + h(i);
end;
figure; plot(H); title('Lena:累积直方图');
效果
归一累积直方图
计算公式:累积直方图/图片大小(像素个数)
代码实现
clear all;
close all;
img=imread('../images/lena.ppm');
[sx sy] = size(img);
h = imhist(img);
vmax = 256 ; H(1:vmax)=0; H(1)=h(1);
for i=2:vmax
H(i) = H(i-1) + h(i);
end;
H1 = H/(sx*sy);
figure; plot(H1); title('Lena:归一累积直方图');