1、首先随机产生一组数据作为例子,在这里,我们随机产生一组数据,并将其圆整为整数,方法是:a=round(10rand(5,1))
2、接下来,可以用MATLAB的内置函数bar进行绘图,方法是bar(a),在这里,可以自己定义直方图的宽度,系统默认的宽度为08,因此,可以依据默认的宽度设置自己想要的宽度,例如,在本例中将宽度设置为05,bar(a,05)
3、当然除了设置宽度以外,还可以设置直方图的颜色,方法是直接在bar函数的括号里设置就可以了,'r'为红色,'y'为**,'b'为黑色等等。bar(a,05,'r'),如图。
4、有时候,还需要在直方图的上方显示它的数值,这时可以用text函数进行标记,方法是:
bar(a,05)
for i=1:length(a)
text(i,a(i),num2str(a(i)),'VerticalAlignment','bottom',
'HorizontalAlignment','center','FontSize',9,'color','r','FontWeight','bold')
end
其中,text后面引号中的内容主要代表标记文字的对齐方式、字的颜色、大小、粗细等,其中,对齐方式必须要设置,否则标记的值不会刚好出现在直方图的正上方,
5、除此之外,还可以做以y轴为底的直方图,方法是用barh函数实现,barh(a,05),值的标记,颜色修改等等和上面的方法一样。
clear %清除工作区的所有变量
Filename='flowerbmp'%所要处理的的名称
P=imread(Filename);%导入到matlab内存中
subplot(1,3,1)%创建一个一行三列的显示区,并选中第一个显示区
imshow(P)%在第一个显示区中显示所导入的
P=double(P);%将变量P从uint8数据类型转换到double
[M,N,K]=size(P);%获取的高度、宽度和颜色通道数
Hist(512)=0;%创建一个直方图数据变量,用来统计各像素值经过计算后落入某个区间的个数
%下面是直方图的统计过程
for i=1:M
for j=1:N
%这个计算原理,可能书上有讲,我不了解
Z=floor(P(i,j,1)/32)64+floor(P(i,j,2)/32)8+floor(P(i,j,3)/32);
Hist(Z+1)=Hist(Z+1)+1;%统计落入某区间的个数
end
end
%显示颜色直方图到第二个显示区
subplot(1,3,2)
plot(Hist)
%设定所需要主色调的个数为5
n=5
maincolor(n,3)=0;%初始化主色调像素变量,用来存放主色调像素的值
%下面是取出直方图数据中前五个统计数据最大的区间,并经过换算得到五个主色调像素值
for k=1:n
Mmm=max(Hist);
for z=1:512
if Hist(z)==Mmm
maincolor(k,1)=32floor(z/64);
maincolor(k,2)=32floor(mod(z,64)/8);
maincolor(k,3)=32mod(mod(z,64),8);
Hist(z)=0;
end
end
end
PP(M,N,3)=0;%用主色调表示的变量
Dis(n)=0;%用来判断原图中的每个像素值与各个主色调之间的不相似度
%下面通过某种距离算法,计算出主色调中与原图像素相似度最大的一个色调,并用
%该主色调表示原图中相应的像素,生成用n个主色调表示的图像PP
for i=1:M
for j=1:N
for k=1:n
Dis(k)=abs(P(i,j,1)-maincolor(k,1))+abs(P(i,j,2)-maincolor(k,2))+abs(P(i,j,3)-maincolor(k,3));
end
Mnn=min(Dis);
for k=1:n
if Dis(k)==Mnn
PP(i,j,1)=maincolor(k,1);
PP(i,j,2)=maincolor(k,2);
PP(i,j,3)=maincolor(k,3);
end
end
end
end
%在第三个显示区中显示主色调表示的原图
subplot(1,3,3)
imshow(PP/256)%利用图像的颜色直方图计算图像的颜色数
clear
Filename='2018jpg'
P=imread(Filename);
imshow(P)
pause(2)
P=double(P);
[M,N,K]=size(P);
Hist(512)=0;
for i=1:M
for j=1:N
Z=floor(P(i,j,1)/32)64+floor(P(i,j,2)/32)8+floor(P(i,j,3)/32);
Hist(Z+1)=Hist(Z+1)+1;
end
end
plot(Hist)
hold on
%上面的代码是计算并显示出颜色直方图,与主色调提取时的计算过程一样
colornum=0;
HHH=0;
delta=0005;%直方图中一个区间的像素统计个数占总像素数的比例
KKK=deltaMN;%这个KKK就相当于下图中的红色值,大于红线的颜色被认为是主色调,所以delta越小,主色调数越大
lines=Hist;
lines(:)=KKK;
plot(lines,'r');
hold off
for z=1:512
if Hist(z)>KKK
colornum=colornum+1;
end
end
colornum
I=imread('colorjpg');
%读入彩色图像,colorjpg需改为你需要的图像。并放在指定目录下matlab70\work,,work文件夹下。
J1(:,:,1)=I(:,:,1);
J1(:,:,2)=0;
J1(:,:,3)=0;
%提取I中的红色
J2(:,:,2)=I(:,:,2);
J2(:,:,1)=0;
J2(:,:,3)=0;
%提取I中的绿色
J3(:,:,3)=I(:,:,3);
J3(:,:,1:2)=0;
%提取I中的蓝色
subplot(221);
imshow(I);
title('原图像');%显示原图
subplot(222);
imshow(J1);
title('红色');%显示提取的红色部分
subplot(223);
imshow(J2);
title('绿色');%显示提取的绿色部分
subplot(224);
imshow(J3);
title('蓝色');%显示提取的蓝色部分
img=imread('myImgjpg');
my_hist=imhist(img);
% 直方图的结果是一个向量,每一位对应一个统计数值,相应灰度值的像素个数直接访问就好了
nb_pixels=my_hist(x+1); % 比如 灰度值为x的像素个数 (注意要加1,因为像素值从0开始)。
以上就是关于matlab 统计直方图全部的内容,包括:matlab 统计直方图、急求,请帮我解释一下这两段matlab程序每句话代表的意思,提取图像的主色调和颜色数的、提取彩色图像R、G、B三基色分量,在同一图像窗口内显示三基色图像及其直方图 用MATLAB怎么写程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)