# imfill


填充图像区域和孔

函数库: TyImageProcessing

# 语法

BW2 = imfill(BW,locations)
BW2 = imfill(BW,locations,conn)
BW2 = imfill(BW,"holes")
BW2 = imfill(BW,conn,"holes")

I2 = imfill(I)
I2 = imfill(I,conn)

BW2 = imfill(BW)
BW2 = imfill(BW,0,conn)
BW2, locations_out = imfill(BW;nargout=2)

# 说明

# 二值图像

BW2 = imfill(BW,locations) 从 locations 中指定的点开始,对输入二值图像 BW 的背景像素执行泛洪填充运算。示例


BW2 = imfill(BW,locations,conn) 填充由 locations 定义的区域,其中 conn 指定连通性。


BW2 = imfill(BW,"holes") 填充输入二值图像 BW 中的孔。在此语法中,孔是无法通过从图像边缘填充背景来到达的一组背景像素。示例


BW2 = imfill(BW,conn,"holes") 填充二值图像 BW 中的孔,其中 conn 指定连通性。示例

# 灰度图像


I2 = imfill(I) 填充灰度图像 I 中的孔。在此语法中,孔定义为由较亮像素包围的一个暗像素区域。示例


I2 = imfill(I,conn) 填充灰度图像 I 中的孔,其中 conn 指定连通性。示例

# 交互式行为(暂不支持)


BW2 = imfill(BW) 在屏幕上显示二值图像 BW,要使用此语法,BW 必须为二维图像。


BW2, locations_out = imfill(BW;nargout=2) 返回在 locations_out 中的位置。要使用此语法,BW 必须为二维图像。

# 示例

从指定的起点填充图像
using TyImageProcessing

BW1 =
    Bool.(
        [
            1 0 0 0 0 0 0 0
            1 1 1 1 1 0 0 0
            1 0 0 0 1 0 1 0
            1 0 0 0 1 1 1 0
            1 1 1 1 0 1 1 1
            1 0 0 1 1 0 1 0
            1 0 0 0 1 0 1 0
            1 0 0 0 1 1 1 0
        ]
    );

BW2 = imfill(BW1, [3 3], 8)
BW2 = 
8×8 BitMatrix:
 1  0  0  0  0  0  0  0
 1  1  1  1  1  0  0  0
 1  1  1  1  1  0  1  0
 1  1  1  1  1  1  1  0
 1  1  1  1  1  1  1  1
 1  0  0  1  1  1  1  0
 1  0  0  0  1  1  1  0
 1  0  0  0  1  1  1  0
填充二值图像中的孔

将图像读入工作区。

using TyImageProcessing
using TyPlot

I = imread("coins.png");
figure()
imshow(I)
title("Original Image")

将图像转换为二值图像。

BW = imbinarize(I);
figure()
imshow(BW)
title("Original Image Converted to Binary Image")

填充二值图像中的孔并显示结果。

BW2 = imfill(BW, "holes");
figure()
imshow(BW2)
title("Filled Image")
填充灰度图像中的孔
using TyImageProcessing
using TyPlot

I = imread("tire.tif");
I2 = imfill(I);
figure(), imshow(I), figure(), imshow(I2)

# 输入参数

BW — 二值图像
逻辑数组

二值图像,指定为任意维度的逻辑数组。

数据类型: Bool

locations — 标识像素位置的线性索引
正整数组成的数值向量 | 正整数组成的二维数值矩阵

标识像素位置的线性索引,指定为正整数组成的数值向量或二维数值矩阵。如果 locations 是 p×1 向量,则它包含起始位置的线性索引。如果 locations 是 p×ndims(BW) 矩阵,则每行包含一个起始位置的数组索引。

数据类型: Float64

I — 灰度图像
数值数组

灰度图像,指定为任意维度的数值数组。

数据类型: Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | UInt8 | UInt16 | UInt32 | UInt64 | Bool

conn — 像素连通性
4 | 8 | 6 | 18 | 26 | 由 0 和 1 组成的 3×3×...×3 矩阵

像素连通性,指定为下表中的值之一。对于二维图像,默认连通性是 4,对于三维图像,默认连通性是 6。

二维连通

意义
4 如果像素的边缘相互接触,则这些像素具有连通性。如果两个相邻像素都为 on 并在水平或垂直方向上连通,则它们是同一对象的一部分。
当前像素以灰色显示。
8 如果像素的边缘或角相互接触,则这些像素具有连通性。如果两个相邻像素都为 on 并在水平、垂直或对角线方向上连通,则它们是同一对象的一部分。
当前像素以灰色显示。

三维连通

意义
6 如果像素的面接触,则这些像素具有连通性。如果两个相邻像素都为 on 并以如下方式连通,则它们是同一对象的一部分:
在所列方向之一上连通:内、外、左、右、上、下

当前像素是立方体的中心。
18 如果像素的面或边缘接触,则这些像素具有连通性。如果两个相邻像素都为 on 并以如下方式连通,则它们是同一对象的一部分:
  • 在所列方向之一上连通:内、外、左、右、上、下

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

  • 当前像素是立方体的中心。
    26 如果像素的面、边缘或角接触,则这些像素具有连通性。如果两个相邻像素都为 on 并以如下方式连通,则它们是同一对象的一部分:
  • 在所列方向之一上连通:内、外、左、右、上、下

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

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

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

    对于更高的维度,imfill 使用默认值 conndef(ndims(BW),"minimal")。

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

    数据类型: Float64 | Bool

    nargout — 控制输出参数
    Int64

    nargout 控制输出参数的个数。

    数据类型: Int64

    # 输出参数

    BW2 — 填充的二值图像
    逻辑数组

    填充的二值图像,以逻辑数组形式返回。

    locations_out — 像素位置的线性索引
    数值向量 | 数值矩阵

    像素位置的线性索引,以数值向量或矩阵形式返回。

    I2 — 填充的灰度图像
    数值数组

    填充的灰度图像,以数值数组形式返回。