【问题标题】:expand a polygon region in a matrix在矩阵中扩展多边形区域
【发布时间】:2016-10-11 01:43:29
【问题描述】:

我有以下矩阵:

1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1
1 1 2 2 2 1 1 3
1 1 2 2 2 2 1 3
1 1 1 1 2 1 1 3
1 1 1 1 1 1 1 1

我想将值2的区域扩大1,也就是说扩大后的输出是:

1 1 2 2 2 1 1 1 
1 2 2 2 2 2 1 1
2 2 2 2 2 2 2 3
2 2 2 2 2 2 2 2
1 2 2 2 2 2 2 3
1 1 2 2 2 1 1 1

我认为 imerode 可以扩展和缩小二进制图像,而在这种情况下不适用。 matlab中有什么方法可以解决这个问题吗?

【问题讨论】:

    标签: matlab convex-polygon


    【解决方案1】:

    单线解决方案

    用途:

    mat(imdilate(mat==2,strel('disk',2)))=2;
    

    结果

    mat =
    
     1     1     2     2     2     1     1     1
     1     2     2     2     2     2     1     1
     2     2     2     2     2     2     2     3
     2     2     2     2     2     2     2     2
     1     2     2     2     2     2     2     3
     1     1     2     2     2     2     1     1
    

    分步说明

    这个问题的解决方案是基于dilation对矩阵等于2的区域进行运算。 这可以按如下方式完成:

    %initializes the input matrix
    mat = [1,1,1,1,1,1,1,1 ; 1,1,1,1,1,1,1,1; 1,1,2,2,2,1,1,3 ; 1,1,2,2,2,2,1,3; 1,1,1,1,2,1,1,3 ; 1,1,1,1,1,1,1,1];
    
    %initilizes a mask which represents the reion which we want to exapand
    roiMask = mat==2;
    
    %perform expansion to this mask by imdilate function
    dilatedRoi = imdilate(mat==2,strel('disk',2));
    
    %assigns the new value into the original matrix
    mat(dilatedRoi) = 2;
    

    请注意,膨胀操作的特点是结构化元素对象,它基本上是一个二进制矩阵,它定义了执行扩展的方式。 在我的示例中,我使用了 MATLAB 的 strel 函数,它生成以下内容:

    strel('disk',2)
    
    ans = 
     0     0     1     0     0
     0     1     1     1     0
     1     1     1     1     1
     0     1     1     1     0
     0     0     1     0     0
    

    您可能需要更改 strel 以完全控制所需的扩展行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2012-03-02
      • 1970-01-01
      相关资源
      最近更新 更多