【问题标题】:How to draw the contour of the objects in label matrix如何在标签矩阵中绘制对象的轮廓
【发布时间】:2011-12-04 10:24:57
【问题描述】:

我有一个分割图像的标签矩阵。 例如,


1 1 1 2 2 2 3 3 3 4 4 4
1 1 1 2 2 2 3 3 3 4 4 4
1 1 1 2 2 2 3 3 3 4 4 4
1 1 1 2 2 2 3 3 3 4 4 4
1 1 1 2 2 2 3 3 3 4 4 4
1 1 1 2 2 2 3 3 3 4 4 4
1 1 1 2 2 2 3 3 3 4 4 4
1 1 1 2 2 2 3 3 3 4 4 4

现在我想绘制每个对象的轮廓,使每个对象边缘的像素值为1,其他像素值为0。

类似的东西


1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 1 0 1 1 0 1 1 0 1
1 0 1 1 0 1 1 0 1 1 0 1
1 0 1 1 0 1 1 0 1 1 0 1
1 0 1 1 0 1 1 0 1 1 0 1
1 0 1 1 0 1 1 0 1 1 0 1
1 0 1 1 0 1 1 0 1 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1

我希望有一个函数可以在 Matlab 中执行此操作,但我不知道。

【问题讨论】:

    标签: image-processing matlab contour image-segmentation


    【解决方案1】:

    @Laurent' 的回答允许您进行 4 连接标记,只要图像中的对象在任何地方至少有 3 个像素宽就可以工作。

    如果您的周长需要 8 连接,或者您的对象可能很窄,您应该考虑重复应用 BWPERIM(再次假设 A 是您的图像):

    conn = 8; %# select connectedness
    nLbl = max(A(:)); %# note this works even if some labels are missing
    
    out = false(size(A)); %# preassign the output
    
    for lbl = 1:nLbl
        %# get the perimeter for each object
        out = out | bwperim(A==lbl,connn);
    end
    

    【讨论】:

      【解决方案2】:

      A 成为您的矩阵,我认为这就是您要寻找的:

      (conv2(A,[1 -2 1],'same') ~=0)|(conv2(A,[1; -2; 1],'same') ~=0)
      

      这是您的示例的结果:

       1     1     1     1     1     1     1     1     1     1     1     1
       1     0     1     1     0     1     1     0     1     1     0     1
       1     0     1     1     0     1     1     0     1     1     0     1
       1     0     1     1     0     1     1     0     1     1     0     1
       1     0     1     1     0     1     1     0     1     1     0     1
       1     0     1     1     0     1     1     0     1     1     0     1
       1     0     1     1     0     1     1     0     1     1     0     1
       1     1     1     1     1     1     1     1     1     1     1     1
      

      【讨论】:

        【解决方案3】:

        我不记得 matlab 的语法,但我建议一种算法,它可以确定从 x-1,y-1 到 x+1,y+1 的最大值,然后减去相同范围的最小值。如果那是 0,那么你想要一个 0 输出,否则 1。

        您可能需要针对图像的边缘稍微调整它,可能使用任何代码获取每个像素的值,对于超出范围的坐标返回 -1 或类似的东西。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-12-03
          • 2012-02-03
          • 1970-01-01
          • 2021-09-07
          • 2019-08-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多