《数字图像处理》——直方图统计

       直方图在数字图像处理中应用的很广泛,是图像空域处理中很重要的增强手段;除了应用在图像增强领域,直方图技术还经常应用在二值化中,用于阈值的选择。

   下面简单介绍并实现图像的直方图:

图像直方图就是一个对不同像素点出现的次数统计求和过程,很简单。在matlab中有很多方法可以实现,我这里列举我比较喜欢的两种方法。

第一种:

for i = 0 : 255  % 对于灰度图像,只有256个灰度级
    sumPix(i + 1) =  sum( img(:) == i );
end
第二种:

for i = 0 : 255
    sumPix(i + 1) = length( find( img == i) );
end


得到像素点的分布之后,下面就是直方图显示问题,这里可以有很多方式来显示,有:plot,bar,stem三种方式


下面贴出我自己所有的源代码(因为自己也是学习过程,想尽量多弄懂一些函数用法,所以源码有点乱)

%function [ sumPix pix ] = My_hist( img )
% test:   img = imread('4.bmp');
%   
img = imread('4.bmp');
classin = class(img);
if strcmp( classin, 'uint8' )
    pix = [0:255];
elseif strcmp( classin, 'double' )
    pix = [0: 65535];
elseif strcmp( classin, 'logical')
    pix = [ 0: 1];
end

%第一步:进行像素灰度统计;   
% 方法一:
for i = 0 : pix(end)
    sumPix(i + 1) =  sum( img(:) == i );
end
% 方法二:
% for i = 0 : pix(end)
%     sumPix(i + 1) = length( find( img == i) );
% end

%绘制直方图方法一: bar
bar( pix, sumPix, 0);axis([0 pix(end) 0 max(sumPix)]);title('MyHist');

figure;
bar( pix, sumPix, 0);axis([0 pix(end) 0 max(sumPix)]);

set(gca, 'xtick', 0: 75: pix(end) );       % gca:"获得当前坐标轴",xtick和ytick按所示的间隔设置水平轴和垂直轴的刻度
set(gca, 'ytick', 0: 1000: max(sumPix) );

text(100, 15000, 'This is my 统计直方图函数显示结果');
title('bar');

%绘制直方图方法二: stem
figure;
stem(  pix, sumPix, 'fill');
ylim('auto');
xlim('auto');
text(100, 15000, 'This is my 统计直方图函数显示结果');
title('stem');

%绘制直方图方法三: plot(将这一组点用线连接起来)
figure;plot(pix, sumPix);
title('plot');

%end

4.bmp



运行结果图:

有点多,就不贴出来了,想搞的自己回去运行就出来了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值