# 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 — 填充的灰度图像数值数组
填充的灰度图像,以数值数组形式返回。




