matlab 统计直方图

matlab 统计直方图,第1张

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怎么写程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10142156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存