的imfill
执行一个函数flood-fill对二值和灰度图像的操作。这个操作可以用于从图像中删除不相关的工件。
对于二进制图像,imfill
更改连接的背景像素(0
S)到前景像素(1
S),当到达对象边界时停止。
对于灰度图像,imfill
将被浅色区域包围的深色区域的强度值提升到与周围像素相同的强度级别。实际上,imfill
删除没有连接到图像边界的区域最小值。有关更多信息,请参见寻找高强度或低强度的区域为更多的信息。
对于二值和灰度图像,填充操作的边界是由像素连接你指定。
请注意
imfill
与其他基于对象的操作的不同之处在于它对背景像素。指定连接时imfill
,您是在指定背景的连通性,而不是前景。
连接的含义可以用这个矩阵来说明。
BW = logical([0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 1 1 1 1 0 0;0 1 0 0 0 1 0 0;0 1 0 0 0 1 0 0;0 1 0 0 0 1 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]);
如果背景是4连接的,这个二值图像包含两个独立的背景元素(循环内部的部分和外部的部分)。如果背景是8连接的,像素连接对角线,只有一个背景元素。
对于二值图像,可以通过传入位置下标或使用来指定填充操作的起点imfill
在交互模式下,用鼠标选择起始像素。
例如,如果你打电话imfill
,指定像素BW (4, 3)
作为起点,imfill
只填充循环的内部,因为默认情况下,背景是4连接的。
imfill (BW, [3] 4) ans = 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
如果指定相同的起点,但使用8连接的后台连接,imfill
填充整个图像。
imfill (BW, 3 [4], 8) ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
洪水填充操作的一个常用方法是填充图像中的空洞。例如,假设您有一个图像,二值或灰度,其中前景对象表示球体。在图像中,这些物体应该以圆盘的形式出现,但由于原始照片中的反射,它们却是环形的。在对图像进行任何进一步处理之前,您可能想先使用填充“甜甜圈洞”imfill
.
因为用洪水填充物来填洞是很常见的,imfill
包括特殊的语法,以支持二进制和灰度图像。万博1manbetx在这个语法中,您只需指定参数“黑洞”
;您不必指定每个孔的起始位置。
为了说明这一点,本例填充了脊柱灰度图像中的空洞。
[X,地图]= imread(“spine.tif”);我= ind2gray (X,地图);Ifill = imfill(我,“漏洞”);imshow (I);图,imshow (Ifill)