poly2mask
转换感兴趣区域(ROI)多边形到区域掩码
语法
BW = poly2mask(xi,yi,m,n)
描述
例子
输入参数
输出参数
提示
若要指定包含给定矩形像素集的多边形,请使多边形的边缘位于边界像素的外部边缘,而不是像素的中心。
例如,要在第4到10列和第4到10行中包含像素,您可以这样指定多边形顶点:
X = [4 10 10 4 4];Y = [4 4 10 10 4];Mask = poly2mask(x,y,12,12)
掩码= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
在本例中,多边形穿过边界像素的中心,结果是只有一些所需的边界像素被确定在多边形内部(第4行和第4列的像素,而不是在多边形中)。要在多边形中包含这些元素,请使用分数值指定第4行(3.5)和第10行(10.5)的外边缘,以及第4列(3.5)的外边缘和第10列(10.5)的外边缘作为顶点,如下例所示:
X = [3.5 10.5 10.5 3.5 3.5];Y = [3.5 3.5 10.5 10.5 3.5];Mask = poly2mask(x,y,12,12)
掩码= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
算法
在创建感兴趣区域(ROI)掩码时,poly2mask
必须确定哪些像素包含在该区域中。当区域边缘的像素仅部分被边界线覆盖时,这种确定可能会很困难。下图展示了一个感兴趣的三角形区域,在特写中检查了ROI的一个顶点。该图显示了像素是如何被感兴趣区域的边界部分覆盖的。
ROI边缘上的像素仅部分被边界覆盖
要确定哪些像素在该区域中,poly2mask
使用以下算法:
将每个像素划分为5 × 5的亚像素网格。
该图显示了包含ROI顶点的像素,前面显示了这个5 × 5亚像素网格。
调整顶点的位置。
poly2mask
将多边形的每个顶点移动到亚像素网格的最近交叉点。请注意poly2mask
轮x和y坐标到最近的亚像素网格角。这将创建第二个修改后的多边形。该图以红色“X”表示修改后的顶点。在调整后的顶点之间画一条路径。
poly2mask
沿着亚像素网格的边缘,形成从每个调整顶点到下一个顶点的路径。该图通过粗黑线显示了修改后多边形的一部分。确定哪些边界像素位于多边形内部。
poly2mask
使用以下规则确定哪些边界像素在多边形内:如果像素的中心子像素在由调整顶点之间的路径定义的边界内,则像素在区域内。在下面的图中,ROI边界上像素的中心子像素被阴影为深灰色。多边形内的像素为浅灰色阴影。请注意,包含顶点的像素不是ROI的一部分,因为它的中心像素不在修改后的多边形内。