matlab中的中位数计算(图像处理)

时间:2015-07-01 14:35:45

标签: matlab image-processing

我正在尝试使用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

这是我的输入图片 -

enter image description here

1 个答案:

答案 0 :(得分:1)

这是因为你可能第二次使用与第一次不同的图像运行它。变量ss已经存储在内存中,并且它还保存了上次运行的元素。在您的上一个测试图片中,您在ss中获得了50个元素,这次您只获得了25。仍然ss保存在内存中并拥有所有50个元素。所以对于中值计算,使用所有这些值。您可以使用它来声明数组 -

ss = zeros(mx,1);

这应该适合你。