扩展矩阵中的多边形区域
expand a polygon region in a matrix
我有以下矩阵:
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中有什么方法可以解决这个问题吗?
单行解决方案
使用:
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
分步说明
这个问题的解决方案是基于对矩阵等于 2 的区域进行 dilation 操作。
这可以按如下方式完成:
%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 以完全控制所需的扩展行为。
我有以下矩阵:
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中有什么方法可以解决这个问题吗?
单行解决方案
使用:
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
分步说明
这个问题的解决方案是基于对矩阵等于 2 的区域进行 dilation 操作。 这可以按如下方式完成:
%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 以完全控制所需的扩展行为。