查看完整版本 : [求助]如何用matlab画出图像的二维直方图
我也是这个问题啊!!!哪位高手帮忙啊!!!!!:lovely: :lovely: :lovely: :lovely:
请高手帮帮忙啊,先谢谢了.
用imhist函数做直方图啊~
I=imread('006.jpg');
f=rgb2gray(I);
imshow(f);
[m,n,d]=size(f)
A=f;
for i=1:1:256
for j=1:1:256
twodim2(i,j)=0;
end
end
for j=1:1:m-1 % 求各个像素点灰度值
for i=1:1:n-1
m1=A(j,i);
m2=A(j+1,i);
m3=A(j+1,i+1);
m4=A(j,i+1);
tem1=max(m1,m2); %求邻域最大灰度值
tem2=max(m3,m4);
m5=max(tem1,tem2);
twodim2(m1,m5)=twodim2(m1,m5)+1;
end
end
i=1:1:256;
j=1:1:256;
mesh(i,j,twodim2(i,j));
rotate3d
title('二维直方图')
box on
上面的程序不知道怎么错了,不同的图象在该直方图上的分割出现的阈值都是同一个真的很诡异啊!!希望哪位高手指教下啊!!!!!!!!!!
:cry: :cry: :cry: :cry:
f=imread('005.jpg');
imshow(f);
[m,n,d]=size(f)
A=f;
for i=1:1:256
for j=1:1:256
twodim2(i,j)=0;
p(i,j)=0; %
end
end
I1=0;
I2=0;
I3=0;
I4=0;
I5=0;
tem1=0;
tem2=0;
for j=1:1:m-1 % 求各个像素点灰度值
for i=1:1:n-1
I1=A(j,i);
I2=A(j+1,i);
I3=A(j+1,i+1);
I4=A(j,i+1);
tem1=max(I1,I2); %求邻域最大灰度值
tem2=max(I3,I4);
I5=max(tem1,tem2);
% I5=(I1+I2+I3+I4)/4;
twodim2(I1,I5)=twodim2(I1,I5)+1;
end
end
imshow(twodim2) %
上面程序imshow(twodim2) 后的直方图是在对角线上的,但是感觉少了一部分。 只有对角线上的一半,对角线下面的没有了,这个好象和理论上的不一致,应该是错了,可是真的不知道错误在哪里啊????
兄弟姐妹们帮帮忙啊!!!
silas_xue
2009-04-01, 10:15
回复:4楼和6楼
twodim2(m1,m5)=twodim2(m1,m5)+1;
如果m1,m5为0,代码能通么: - )
4楼看一下是不是出错了 6楼看一下 你代码的鲁棒性不强哦 : - )
6楼
另外 试想一下 邻域gray大于中心点的时候 如何保证直方图是在对角线上?
第三 4楼和6楼2D直方图是基于什么定义的 应当是后来人定义的吧 与最早的Weszka的散射定义不大一样 能否把引文作为附件贴上来 大家一起分享一下 或者名字和第一作者说明一下 谢谢了
Thx for reading.
PS:若还算满意,直接点击“Thanks”,再次登陆时亦便于查看回答是否真的帮到你了。
vBulletin® v3.8.3,版权所有 ©2000-2025,Jelsoft Enterprises Ltd.