文档

理解形态学重建

形态重建在概念上可以被认为是图像的重复扩张,称为标志形象,直到标记图像的轮廓适合第二个图像,称为掩码图像.在形态重建中,标记图像中的峰“散开”或扩张。

该图以1-D的形式说明了这一过程。每一次连续的扩张都被限制在面具下。当进一步的膨胀不再改变图像时,处理就会停止。最后的膨胀是重建图像。(注意:这个操作在工具箱中的实际实现要高效得多。看到imreconstruct详情请参阅网页。)该图显示了标记物的连续膨胀。

蒙版约束下标记图像的重复膨胀

形态重建是基于形态扩张,但注意以下独特的性质:

  • 处理是基于两个图像,一个标记和一个掩码,而不是一个图像和一个结构元素。

  • 处理基于连通性的概念,而不是结构化元素。

  • 重复加工直至稳定;也就是说,图像不再改变。

理解标记和蒙版

形态重建处理一个图像,称为标记,基于另一种图像的特征,称为面具.标记图像中的高点或峰值指定处理开始的位置。处理继续进行,直到图像值停止变化为止。

为了说明形态重建,考虑这张简单的图像。它包含两个主要区域,即包含值的像素块14而且18.背景基本都设置好了10,并将一些像素设置为11

要从形态学上重建此图像,请执行以下步骤:

  1. 创建一个标记图像。与膨胀和侵蚀中的结构元素一样,标记图像的特征决定了形态重建中进行的处理。标记图像中的峰值应识别掩码图像中要强调的对象的位置。

    创建标记图像的一种方法是从掩码图像中减去一个常数,使用imsubtract

    标志= imsubtract(2)标记= 8 8 8 8 8 8 8 8 8 8 8 12 12 12 8 8 9 9 8 8 8 12 12 12 8 8 8 8 8 8 9 12 12 12 8 8 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 9 8 8 8 16 16 16 8 8 8 8 8 9 8 16 16 16 8 8 8 8 9 8 8 16 16 16 8 8 8 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9
  2. 调用imreconstruct功能形态学重建图像。在输出图像中,注意除强度峰值外的所有强度波动是如何被去除的。

    Recon = imrebuild(标记,蒙版)

像素连接

形态学处理从标记图像的峰值开始,并根据像素的连通性扩展到图像的其余部分。连接性定义哪些像素连接到其他像素。二值图像中形成一个连通组的像素集称为像素对象或者一个连接组件

决定哪些像素创建连接组件取决于如何定义像素连接性。例如,这个二进制图像包含一个或两个前景对象,这取决于连通性。如果前景是4连通的,那么图像就是一个对象——前景对象和背景之间没有区别。然而,如果前景是8连接的,设置为1的像素连接形成一个闭环,图像有两个独立的对象:循环中的像素和循环外的像素。

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

在映像中定义连接性

下表列出了工具箱支持的所有标准二维和三维连接。万博1manbetx更多信息请参见以下章节:

万博1manbetx支持连接性

二维的连接性

四连接

如果像素的边缘接触,则像素是相连的。这意味着一对相邻的像素是同一对象的一部分,只有当它们都在并且沿着水平或垂直方向连接时。

8-connected

如果像素的边或角接触,则像素是相连的。这意味着如果两个相邻的像素是打开的,那么它们就是同一对象的一部分,无论它们是沿着水平方向、垂直方向还是对角线方向连接。

三维的连接性

6-connected

如果它们的脸接触,像素就连接在一起。

18-connected

如果像素的面或边接触,则像素是连接的。

26-connected

如果像素的面、边或角接触,则像素是连接的。

选择连接方式

您选择的邻域类型会影响图像中发现的对象数量以及这些对象的边界。由于这个原因,许多形态学操作的结果通常根据指定的连接类型而不同。

例如,如果你指定一个4连通的邻域,这个二值图像包含两个对象;如果指定一个8连通的邻域,则图像只有一个对象。

0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0

指定自定义连接

您还可以通过指定一个3 × 3 × -…由0和1组成的-by-3数组。的1-value元素定义了邻域相对于中心元素的连通性。

例如,这个数组定义了一个“南北”连接,可以用来将图像分解为独立的列。

Conn = [0 10 0;0 10 0;0 1 0] conn = 0 1 0 0 1 0 0 1 0

请注意

连通性数组必须与它们的中心元素对称。此外,你还可以使用带有3d图像的2-D连接数组;连通性会影响3d图像中的每个“页面”。

寻找高峰和低谷

灰度图像可以被认为是三维的x- - -y-轴表示像素位置,而z-axis表示每个像素的强度。在这种解释中,强度值表示海拔高度,就像地形图一样。图像中的高强度和低强度区域,即地形术语中的峰和谷,可以是重要的形态特征,因为它们通常标志着相关的图像对象。

例如,在几个球形物体的图像中,高强度的点可以代表物体的顶部。使用形态学处理,这些极大值可以用来识别图像中的物体。

本节涵盖以下主题:

术语

本节使用以下术语。

术语

定义

全球最大

图像中最高的区域最大值。有关更多信息,请参阅本表中区域最大值的条目。

全局最小值

图像中的最低区域最小值。有关更多信息,请参阅本表中的区域最小值条目。

区域最大值

连接的一组强度恒定的像素点,不先下降就不可能到达一个强度更高的点;也就是说,由具有相同强度值的像素组成的连接组件,t,周围的像素值都小于t

区域最小值

连接的一组强度恒定的像素点,不先上升就不可能到达一个强度较低的点;也就是说,由具有相同强度值的像素组成的连接组件,t,周围的像素值都大于t

理解极大极小函数

一个图像可以有多个区域极大值或极小值,但只有一个全局极大值或极小值。确定图像峰值或山谷可用于创建用于形态重建的标记图像。

该图说明了1-D的概念。

寻找高强度或低强度的区域

该工具箱包括一些函数,您可以使用这些函数来查找图像中的高强度或低强度区域:

  • imregionalmax而且imregionalmin功能确认所有区域极小值或极大值。

  • imextendedmax而且imextendedmin函数识别大于或小于指定阈值的区域最小值或最大值。

这些函数接受灰度图像作为输入,并返回二值图像作为输出。在输出二值图像中,区域最小值或最大值设置为1;所有其他像素都设置为0

例如,这张简单的图像包含两个主要的区域最大值,即包含该值的像素块13而且18,和几个较小的最大值,设置为11

返回的二值图像imregionalmax确定了所有这些区域的最大值。

B = imregionalmax(A)

你可能只想识别图像中强度变化最大的区域;也就是说,像素和相邻像素之间的差异大于(或小于)某个阈值。例如,为了只找到样本图像中的区域最大值,一个这些地区的气温至少比邻近地区高两个单位imextendedmax

B = imextendedmax(A,2)

抑制最小值和最大值

在图像中,强度的每一个小波动都代表区域的最小值或最大值。你可能只对显著极小值或极大值感兴趣,而对这些由背景纹理引起的极小值和极大值不感兴趣。

若要删除不显著的最小值和最大值,但保留显著的最小值和最大值,请使用imhmaximhmin函数。使用这些函数,您可以指定对比标准或阈值水平,h,它抑制所有高度小于的最大值h或者其最小值大于h

请注意

imregionalminimregionalmaximextendedmin,imextendedmax函数返回一个二值图像,用于标记图像中区域极小值和极大值的位置。的imhmax而且imhmin函数产生一个改变的图像。

例如,这张简单的图像包含两个主要的区域最大值,即包含该值的像素块14而且18,和几个较小的最大值,设置为11

若要消除除两个显著极大值以外的所有区域极大值,请使用imhmax,指定阈值为2.请注意,imhmax只影响极大值;其他像素值都没有改变。两个显著的极大值仍然存在,尽管它们的高度降低了。

B = imhmax(A,2)

该图从示例图像中选取第二行,以1-D方式说明如何操作imhmax更改图像的配置文件。

设定最小值

属性可以强调图像中的特定最小值(暗物体)imimposemin函数。的imimposemin函数使用形态学重建从图像中消除除您指定的最小值以外的所有最小值。

为了说明施加最小值的过程,这段代码创建了一个简单的图像,其中包含两个主要的区域最小值和几个其他的区域最小值。

掩码= uint8(10*ones(10,10));面具(6:8,6:8)= 2;面具(2:4,2:4)= 7;掩码(3,3)= 5;掩码(2,9)= 9;掩码(3,8)= 9;掩码(9,2)= 9;掩码(8,3)= 9

创建标记图像

要获得强调两个最深的极小值并删除所有其他极小值的图像,请创建一个标记图像,以确定感兴趣的两个极小值。您可以通过显式地将某些像素设置为特定值或使用其他形态学函数来提取您想要在掩码图像中强调的特征来创建标记图像。

这个例子使用了imextendedmin来得到显示两个最深最小值位置的二值图像。

标记= imextendedmin(掩码,1)

将标记图像应用到蒙版

现在使用imimposemin在掩码图像中标记图像指定的点上创建新的最小值。请注意imimposemin将标记图像指定的像素值设置为数据类型(万博1manbetx0uint8值)。imimposemin还更改图像中所有其他像素的值以消除其他最小值。

我= imimposemin(面具,标记)= 11 11 11 11 11 11 11 11 11 11 11 8 8 8 11 11 11 11 11 11 11 8 0 8 11 11 11 11 11 11 11 8 8 8 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 0 0 0 11 11 11 11 11 11 11 0 0 0 11 11 11 11 11 11 11 0 0 0 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11

这张图在一维中说明了如何做到这一点imimposemin更改图像的第2行配置文件。

设定最小值

Flood-Fill操作

imfill函数执行flood-fill二值图像和灰度图像的运算。对于二值图像,imfill改变将背景像素(0)连接到前景像素(1),当它到达对象边界时停止。对于灰度图像,imfill将被较亮区域包围的暗区域的强度值提高到与周围像素相同的强度级别。(实际上,imfill删除未连接到图像边界的区域最小值。看到寻找高强度或低强度的区域以获取更多信息。)此操作在从图像中删除无关工件时非常有用。请参阅这些附加主题:

指定连接

对于二进制图像和灰度图像,填充操作的边界由指定的连通性决定。

请注意

imfill与其他基于对象的操作不同的是,它操作的对象是背景像素。当指定与的连接时imfill,您指定的是后台的连通性,而不是前台。

连通性的含义可以用这个矩阵来说明。

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

如果背景是4连通的,这张二值图像包含两个独立的背景元素(循环内部的部分和循环外部的部分)。如果背景是8连接的,像素对角线连接,只有一个背景元素。

指定起点

对于二进制图像,可以通过传入位置下标或使用imfill在交互模式下,用鼠标选择起始像素。参见参考页imfill有关使用的更多信息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,[4 3],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 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,map] = imread('spine.tif');I = ind2gray(X,map);Ifill = imfill(I,'holes');imshow (I);图,imshow (Ifill)

这个话题有用吗?