MATLAB:隔离二进制图像中感兴趣区域的周长:bwmorph问题

时间:2016-06-14 15:53:17

标签: matlab binary region connected-components

我有一个二进制图像(附加),其中连接的组件与bwconncomps隔离。我试图找出每个组件的轮廓,但我仍然可以参考填充的对象 - (我使用轮廓作为灰度图像上的遮罩来拉取一些值,然后依赖于在填充的原始感兴趣区域上执行操作的值)

当我在附图上运行bwconncomps时,我会识别出814个物体。我可以运行bwmorph(D,'remove');我得到了对象的轮廓/周长,但是当我在这上面运行bwconncomps时,我得到了827个对象 - (不确定这些额外对象来自哪里,这搞砸了我根据值I返回填充对象的能力拉出它的轮廓。

基本上我需要一个版本的bwmorph(D,'remove'),它将留下与原始二进制图像的bwconncomps中所见相同数量的连接组件。因此我可以将原始二进制文件中的组件#30与bwconncomps中相同#30的轮廓。

希望这很清楚,有什么建议吗?

由于

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用bwboundaries找到白色连接组件的像素边界,这样每个连接的组件都有一组相应的边界。

%calculate boundries and generate boundry mask
B = bwboundaries(im,'noholes');
boundriesImage = zeros(size(im));
boundriesPixels = cell2mat(B);
boundriesImage(sub2ind(size(im),boundriesPixels(:,1),boundriesPixels(:,2)))=1;

%finds the connected component in the original image and in the boundry
%mask
CC = bwconncomp(im);
CC2 = bwconncomp(boundriesImage);

结果:CC和CC2包含相同数量的连接组件

CC = 

    Connectivity: 8
       ImageSize: [535 1571]
      NumObjects: 814
    PixelIdxList: {1x814 cell}

CC2 = 

    Connectivity: 8
       ImageSize: [535 1571]
      NumObjects: 814
    PixelIdxList: {1x814 cell}

此外,每个连接的组件CC2 {ii}与其CC {ii}匹配,如以下测试结果所示:

%tests that for each ii, CC{ii} is contained in CC{i}
CC2MatchesToCC1 = true;
for ii=1:length(CC.PixelIdxList)
    if length(intersect(CC2.PixelIdxList{ii},CC.PixelIdxList{ii}))~=length(CC2.PixelIdxList{ii})
        CC2MatchesToCC1 = false;
    end
end

结果:

CC2MatchesToCC1 =

 1