灰度直⽅图,⽤MATLAB实现imhist
灰度直⽅图:
灰度直⽅图描述了⼀幅图像的绘图统计信息,主要应⽤于图像分割和图像灰度变换等处理过程中。从数学上说它是⼀个关于灰度的函数,如令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实现;
matlab直方图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');
实验结果如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论