Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

poly2mask

将关注区域 (ROI) 多边形转换为区域掩膜

说明

示例

BW = poly2mask(xi,yi,m,n) 根据顶点位于坐标 xiyi 处的 ROI 多边形,计算大小为 m×n 的二值感兴趣区域 (ROI) 掩膜 BW。如果该多边形尚未闭合,poly2mask 会自动将其闭合。

poly2mask 函数将位于多边形内的像素设置为 1,将位于多边形外的像素设置为 0。有关如何对未完全落入 ROI 的像素进行分类的详细信息,请参阅算法

示例

全部折叠

指定多边形的 x 坐标和 y 坐标。

x = [63 186 54 190 63];
y = [60 60 209 204 60];

创建指定图像大小的掩膜。

bw = poly2mask(x,y,256,256);

显示掩膜并沿多边形绘制一条线。

imshow(bw)
hold on
plot(x,y,'b','LineWidth',2)
hold off

Figure contains an axes. The axes contains 2 objects of type image, line.

定义两组随机点,分别用作 x 坐标和 y 坐标。

x = 256*rand(1,4);
y = 256*rand(1,4);
x(end+1) = x(1);
y(end+1) = y(1);

创建掩膜。

bw = poly2mask(x,y,256,256);

显示掩膜并沿多边形绘制一条线。

imshow(bw)
hold on
plot(x,y,'b','LineWidth',2)
hold off

Figure contains an axes. The axes contains 2 objects of type image, line.

输入参数

全部折叠

多边形顶点的 x 坐标,指定为数值向量。xiyi 的长度必须匹配。

数据类型: double

多边形顶点的 y 坐标,指定为数值向量。xiyi 的长度必须匹配。

数据类型: double

掩膜的行数,指定为正整数。

数据类型: double

掩膜的列数,指定为正整数。

数据类型: double

输出参数

全部折叠

二值图像,以 m×n 逻辑矩阵形式返回。

数据类型: logical

提示

  • 要指定包含给定矩形像素集的多边形,请将多边形的边缘对齐到边界像素的外边缘(而不是像素的中心)。

    例如,要包含第 4 列到第 10 列、第 4 行到第 10 行区域内的像素,可将多边形顶点指定如下:

    x = [4 10 10 4 4];
    y = [4 4 10 10 4];
    mask = poly2mask(x,y,12,12)
    mask =
    
         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)
    mask =
    
         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 使用以下算法:

  1. 将每个像素分成 5×5 子像素网格。

    下图使用该 5×5 子像素网格显示包含上图 ROI 顶点的像素。

  2. 调整顶点的位置。

    poly2mask 将多边形的每个顶点移至最近的子像素网格交叉点。请观察 poly2mask 如何将 xy 坐标舍入到最接近的子像素网格角点。这将创建另一个经过修正的多边形。下图使用红色的“X”显示修正后的顶点。

  3. 在调整后的顶点之间绘制一条路径。

    poly2mask 沿子像素网格的边,形成从调整后的每个顶点到下一个顶点的路径。下图用粗黑线条显示这一经过修正的多边形的一部分。

  4. 确定哪些边框像素落入多边形内。

    poly2mask 使用以下规则来确定哪些边框像素落入多边形内:如果某像素的中心子像素位于调整后顶点间的路径定义的边界内,则该像素位于区域内。

    在下图中,ROI 边框上的像素的中心子像素以深灰色表示。落入多边形内的像素以浅灰色表示。请注意,顶点所在的像素不属于 ROI,因为其中心像素不在修正后的多边形内。

另请参阅

|

在 R2006a 之前推出