我正在尝试使用MajorAxisLength
为每个连接的组件找到regionprops
。然后我正在为median
计算相同的内容。但是我得到了错误的中位数值。这是我的代码 -
clc;
image=imread('test3.png');
image = im2bw(image);
image=imcomplement(image);
[imx imy]=size(image);
n1=zeros(imx,imy);
count=1;
connected = bwlabel(image,8) ;
mx=max(max(connected));
for i=1:mx
[r,c] = find(connected==i);
test=zeros(imx,imy);
rc = [r c];
[sx sy]=size(rc);
for j=1:sx
x1=rc(j,1);
y1=rc(j,2);
test(x1,y1)=1;
end
s(i)=regionprops(test,'MajorAxisLength');
if(s(i).MajorAxisLength >=5)
ss(count)=s(i).MajorAxisLength;
count=count+1;
end
end
for k=1:count
disp(ss(k));
end
M=median(ss)
这些是我为ss
数组获得的值 -
100.7208
141.7638
108.0241
102.5751
84.8693
107.9178
97.9122
183.8361
95.8895
102.5912
90.2462
这是我得到的中位数值(这绝对是错误的) -
M =
25.3651
这是我的输入图片 -
答案 0 :(得分:1)
这是因为你可能第二次使用与第一次不同的图像运行它。变量ss
已经存储在内存中,并且它还保存了上次运行的元素。在您的上一个测试图片中,您在ss中获得了50
个元素,这次您只获得了25
。仍然ss
保存在内存中并拥有所有50
个元素。所以对于中值计算,使用所有这些值。您可以使用它来声明数组 -
ss = zeros(mx,1);
这应该适合你。