我知道基本命令,以识别图片中的对象,如:
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函数来解决这个问题,我将非常感激。
答案 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