Main Content

imclearborder

隐藏连接到图像边界的光亮结构

说明

示例

J = imclearborder(I) 隐藏图像 I 中比其周围更亮并且连接到图像边界的结构。使用此函数清理图像边界或选择图像边界。对于灰度图像,imclearborder 除了隐藏边界结构外,还往往会降低整体强度级别。输出图像 J 是灰度或二值图像,具体取决于输入。

J = imclearborder(I,conn) 指定像素连通性 conn

示例

J = imclearborder(___,Name=Value) 使用一个或多个名称-值参量指定如何选择边界结构的选项。例如,imclearborder(I,Borders=["left" "right"]) 仅删除触及图像左边界或右边界的结构。

示例

全部折叠

将二值图像(显微镜下石英柱状颗粒的后处理图像 [2])读入工作区并显示该图像。

originalBW = imread("quartz_columns.png");
imshow(originalBW)

清除图像中连接到图像边界的所有光亮对象,并显示调整后的图像。

BWclearB = imclearborder(originalBW);
imshow(BWclearB)

将包含具有深色边界的对象的灰度图像读入工作区,并显示它。

I = imread("logo.png");
imshow(I)

将图像取反色并删除边界。显示图像。

J = imcomplement(I);
JNoBorder = imclearborder(J);
imshow(JNoBorder)

再次对图像取反色,使其还原到原始输入图像对比度。

INoBorder = imcomplement(JNoBorder);
imshow(INoBorder)

将二值图像(显微镜下石英柱状颗粒的后处理图像 [2])读入工作区并显示该图像。

originalBW = imread("quartz_columns.png");
imshow(originalBW)

仅删除连接到图像上边界或下边界的对象。

BWclear2B = imclearborder(originalBW, Borders=["top" "bottom"]);
imshow(BWclear2B)

创建一个简单的二值图像。

BW = [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     0     0     1     1     1     0     0     0
      0     1     0     1     1     1     0     0     0
      0     0     0     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     0     0     0     0];

使用 4 连通清理图像边界上的像素。请注意 imclearborder 不会清理 (5,2) 处的像素,因为在使用 4 连通时,该像素被认定为未连接到 (4,1) 处的边界像素。

BWc1 = imclearborder(BW,Connectivity=4)
BWc1 = 9×9

     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     0     0     0
     0     1     0     1     1     1     0     0     0
     0     0     0     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     0     0     0     0

现在使用 8 连通清理图像边界上的像素。imclearborder 会清理掉 (5,2) 处的像素,因为在使用 8 连通时,该像素被认定为连接到边界像素 (4,1)。

BWc2 = imclearborder(BW,Connectivity=8)
BWc2 = 9×9

     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     0     0     0
     0     0     0     1     1     1     0     0     0
     0     0     0     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     0     0     0     0

输入参数

全部折叠

灰度或二值图像,指定为数值或逻辑数组。

示例: I = imread('pout.tif');

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

像素连通性,指定为下表中的值之一或一个由 01 组成的 3×3×...×3 矩阵。对于二维图像,默认连通性是 8,对于三维图像,默认连通性是 26

意义

二维连通

4

如果像素的边缘相互接触,则这些像素具有连通性。像素的邻域是水平或垂直方向上的相邻像素。

3-by-3 pixel neighborhood with four pixels connected to the center pixel

当前像素以灰色显示。

8

如果像素的边缘或角相互接触,则这些像素具有连通性。像素的邻域是水平、垂直或对角线方向上的相邻像素。

3-by-3 pixel neighborhood with 8 pixels connected to the center pixel

当前像素以灰色显示。

三维连通

6

如果像素的面接触,则这些像素具有连通性。像素的邻域是符合以下条件的相邻像素:

  • 在所列方向之一上连通:内、外、左、右、上、下

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces of the center pixel

当前像素以灰色显示。

18

如果像素的面或边缘接触,则这些像素具有连通性。像素的邻域是符合以下条件的相邻像素:

  • 在所列方向之一上连通:内、外、左、右、上、下

  • 在两个方向的组合上连通,如右下或内上

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces and 12 pixels connected to the edges of the center pixel

当前像素是立方体的中心。

26

如果像素的面、边缘或角接触,则这些像素具有连通性。像素的邻域是符合以下条件的相邻像素:

  • 在所列方向之一上连通:内、外、左、右、上、下

  • 在两个方向的组合上连通,如右下或内上

  • 在三个方向的组合上连通,如内右上或内左下

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces, 12 pixels connected to the edges, and 8 pixels connected to the corners of the center pixel

当前像素是立方体的中心。

对于更高的维度,imclearborder 使用默认值 conndef(ndims(I),'maximal')

也可以通过指定由 01 组成的 3×3×...×3 矩阵,以更通用的方式来定义任意维度的连通性。值为 1 的元素定义相对于 conn 的中心元素的邻域位置。请注意,conn 必须关于其中心元素对称。有关详细信息,请参阅指定自定义连通性

注意

如果指定非默认连通性,输入图像边缘上的像素可能不会被视为边框像素。例如,如果 conn = [0 0 0; 1 1 1; 0 0 0],则第一行和最后一行的元素不被视为边框像素,因为根据连通性定义,它们未连接到图像外部的区域。

注意

如果同时指定 conn 参量和 Connectivity 名称-值参量,则 imclearborder 会根据 Connectivity 设置连通性并忽略 conn 的值。

数据类型: double | logical

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量后,但对各个参量对组的顺序没有要求。

示例: imclearborder(I,Borders=["left" "right"]) 可删除触及图像左边界或右边界的光亮结构。

自 R2023b 起

要删除结构的图像边界,指定为字符串向量或由 01 组成的 N×2 矩阵:

  • 字符串向量 - 以 "left""right""top""bottom" 的任意组合指定要针对二维图像的哪些边界删除结构。当您将 I 指定为二维图像时,Borders 的默认值为 ["left" "right" "top" "bottom"]

  • 01 组成的 N×2 矩阵 - 指定要针对 N 维图像的哪些边界删除结构,其中每行的第一个元素表示对应维度中的第一个边界,第二个元素表示该维度中的第二个边界。例如,如果 Borders(k,1)1,则选择触及第 k 维中第一个边界的结构。如果 Borders(k,2)1,则选择触及第 k 个维度中的第二个边界的结构。例如,指定 Borders = [0 0; 1 1; 0 0] 等效于指定 Borders = ["left" "right"]。N 维图像的 Borders 的默认值为 ones(ndims(I),2),它指定删除触及图像所有边界的结构。

自 R2023b 起

像素连通性,指定为 4861826 或由 01 组成的 3×3 ... ×3 矩阵。有关详细信息,请参阅 conn

数据类型: double | logical

输出参量

全部折叠

已处理的灰度或二值图像,根据您指定的输入图像,以数值或逻辑数组形式返回。

算法

imclearborder 使用形态学重新构造,其中:

  • 掩膜图像是输入图像。

  • 标记图像边界上的元素等于掩膜图像,其他位置的元素都为 0。

参考

[1] Soille, Pierre. Morphological Image Analysis: Principles and Applications Berlin ; New York: Springer, 1999, 164–165.

[2] Molnar, Ian. Uniform quartz - Silver nanoparticle injection experiment, Digital Rocks Portal (April 2016). Accessed March 10, 2023. https://www.digitalrocksportal.org/projects/44, made available for documentation use under the ODC-BY 1.0 Attribution License.

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

|