Matlab识别边界处的对象

时间:2015-02-01 23:01:06

标签: matlab image-processing

enter image description here

我知道基本命令,以识别图片中的对象,如:

level = graythresh(bw); 

bw = im2bw(bw,level);

cc = bwconncomp(bw, 4);

cc.NumObjects;

graindata = regionprops(cc, 'basic');

perimeter = regionprops(cc, 'perimeter');

上面的代码是我正在使用的代码。   在附图中,我可以得到数字为4.所以代码确定总共有4个对象。

然而,这张照片实际上包含两个物体。如果我们复制这张图片并将复制品移动到上,下,左和右,我们可以看到只有两个对象。但他们被分开了#34;边界。

改变制作图像的方式是不可行的,所以我能想到的唯一方法就是在matlab中使用一些函数或代码。

如果有人能提供一些matlab函数来解决这个问题,我将非常感激。

1 个答案:

答案 0 :(得分:1)

您需要做的就是遍历边框行和列,并合并在相对两侧排列的任何区域。以下代码将生成一个图像,其中的区域按照您希望的方式标记为数字。

cc=bwconncomp(bw);
[rows,cols] = size(reg);

% matrix of region labels
regions = uint8(zeros(rows,cols));

% label each pixel with an integer for its region number
for i = 1:length(cc.PixelIdxList)
    region(cc.PixelIdxList{i}) = i;
end

% loop over rows, merge the regions if pixels line up
for i = 1:rows
    left = region(i,1);
    right = region(i,end);
    if (left>0) && (right>0) && (left~=right)
        region(region==right) = left;
    end
end


% loop over columns, merge the regions if pixels line up
for j = 1:cols
    top = region(1,j);
    bottom = region(end,j);
    if (top>0) && (bottom>0) && (top~=bottom)
        region(region==bottom) = top;
    end
end