主要内容

Marker-Controlled分水岭分割

这个例子展示了如何使用分水岭分割来分离图像中的触摸对象。分水岭变换通过将图像处理为亮像素高而暗像素低的表面,从而在图像中找到“流域流域”和“流域脊线”。

如果你能识别或“标记”前景物体和背景位置,那么使用分水岭变换进行分割效果会更好。标记控制分水岭分割遵循以下基本步骤:

  1. 计算一个分割函数。这是一个图像,它的黑暗区域是你试图分割的对象。

  2. 计算前景标记。这些是每个对象内连接的像素点。

  3. 计算背景标记。这些像素不是任何对象的一部分。

  4. 修改分割函数,使它只在前景和背景标记位置有最小值。

  5. 计算改进后的分割函数的分水岭变换。

步骤1:读取彩色图像并将其转换为灰度

rgb = imread (“pears.png”);I = rgb2gray (rgb);imshow (I)文本(732501“图片由Corel提供(R)”...“字形大小”7“HorizontalAlignment”“对”

图中包含一个轴对象。axis对象包含两个类型为image, text的对象。

第二步:使用梯度大小作为分割函数

计算梯度大小。渐变在对象的边缘是高的,在对象内部是低的(大部分)。

gmag = imgradient(我);imshow (gmag[])标题(“梯度大小”

图中包含一个轴对象。标题为Gradient Magnitude的axis对象包含一个类型为image的对象。

你能直接在梯度大小上使用分水岭变换分割图像吗?

L =分水岭(gmag);Lrgb = label2rgb (L);imshow (Lrgb)标题(“梯度量级的分水岭变换”

图中包含一个轴对象。标题为梯度大小分水岭变换的轴对象包含一个类型为图像的对象。

不。如果没有额外的预处理,如下面的标记计算,直接使用分水岭变换通常会导致“过度分割”。

步骤3:标记前景对象

在这里可以应用各种程序来寻找前景标记,这些标记必须连接每个前景对象内部的像素块。在这个例子中,您将使用形态学技术,称为“通过重建打开”和“通过重建关闭”来“清理”图像。这些操作将在每个可以定位的对象内部创建平坦的maximaimregionalmax

开放是侵蚀后的扩张,而开放重建是侵蚀后的形态重建。让我们来比较一下这两者。首先,计算开口使用imopen

se = strel (“磁盘”, 20);Io = imopen(我,se);imshow (Io)标题(“打开”

图中包含一个轴对象。标题为“打开”的axes对象包含一个类型为image的对象。

接下来使用imerodeimreconstruct

Ie = imerode(我,se);Iobr = imreconstruct(即我);imshow (Iobr)标题(“Opening-by-Reconstruction”

图中包含一个轴对象。标题为“通过重建打开”的axis对象包含一个类型为image的对象。

在开启后关闭可以消除黑点和阀杆痕迹。比较规则形态闭合与重建闭合。第一次尝试imclose

国际奥委会= imclose (Io, se);imshow (Ioc)标题(“开合”

图中包含一个轴对象。标题为“打开-关闭”的axis对象包含一个类型为image的对象。

现在使用imdilate紧随其后的是imreconstruct.注意您必须补充的图像输入和输出imreconstruct

Iobrd = imdilate (Iobr, se);Iobrcbr = imreconstruct (imcomplement (Iobrd) imcomplement (Iobr));Iobrcbr = imcomplement (Iobrcbr);imshow (Iobrcbr)标题(“开合的重建”

图中包含一个轴对象。标题为“通过重建打开-关闭”的轴对象包含一个类型为image的对象。

你可以通过比较看到Iobrcbr国际奥委会,基于重构的开合比标准的开合更有效,在不影响物体整体形状的情况下去除小瑕疵。计算的区域最大值Iobrcbr以获得良好的前景标记。

女性生殖器切割= imregionalmax (Iobrcbr);imshow(女性生殖器切割)标题(“通过重建实现开放与关闭的区域最大化”

图中包含一个轴对象。标题为“重建开闭区域最大值”的轴对象包含一个类型为image的对象。

为了帮助解释结果,将前景标记图像叠加到原始图像上。

I2 = labeloverlay(我、女性生殖器切割);imshow (I2)标题(“原始图像上的区域最大值叠加”

图中包含一个轴对象。标题为“区域最大叠加在原始图像上”的轴对象包含一个类型为“图像”的对象。

注意,一些大部分被遮挡和阴影的物体没有被标记,这意味着这些物体在最终结果中不会被正确分割。同样,一些物体的前景标记会一直延伸到物体的边缘。这意味着你应该清理标记斑点的边缘,然后把它们缩小一点。你可以先结束,然后进行侵蚀。

se2 = strel(的(5,5));fgm2 = imclose(女性生殖器切割,se2);fgm3 = imerode (fgm2 se2);

这个过程往往会留下一些必须删除的零散的孤立像素。你可以用bwareaopen,它删除所有像素小于一定数量的斑点。

fgm4 = bwareaopen (fgm3 20);I3 = labeloverlay(我fgm4);imshow (I3)标题(“在原始图像上叠加修改的区域最大值”

图中包含一个轴对象。标题为Modified Regional Maxima superadded on Original Image的轴对象包含一个类型为Image的对象。

步骤4:计算背景标记

现在你需要标记背景。在清理后的图像中,Iobrcbr,暗像素属于背景,所以可以从阈值操作开始。

bw = imbinarize (Iobrcbr);imshow (bw)标题(“通过重建开启-关闭门槛”

图中包含一个轴对象。标题为“通过重建打开-关闭”的轴对象包含一个类型为image的对象。

背景像素是黑色的,但理想情况下,我们不希望背景标记太接近我们试图分割的对象的边缘。我们将通过计算前景的“影响区域骨架”或SKIZ来“瘦化”背景bw.这可以通过计算距离变换的分水岭变换来实现bw,然后寻找分水岭山脊线(戴斯。莱纳姆:= = 0)的结果。

D = bwdist (bw);DL =分水岭(D);bgm = DL == 0;imshow (bgm)标题(“分水岭脊线”

图中包含一个轴对象。标题为分水岭山脊线的轴对象包含一个类型为图像的对象。

步骤5:计算分割函数的分水岭变换。

这个函数imimposemin可以用来修改图像,使其仅在某些所需位置具有区域最小值。这里你可以使用imimposemin修改梯度幅值图像,使其区域最小值仅出现在前景和背景标记像素处。

Gmag2 = imimposemin(gmag, BGM | fgm4);

最后,计算基于分水岭的分割。

L =分水岭(gmag2);

第六步:形象化结果

一种可视化技术是将前景标记物、背景标记物和分割后的物体边界叠加在原始图像上。您可以根据需要使用扩展来使某些方面(如对象边界)更加可见。对象边界位于L = = 0.二进制前景和背景标记被缩放到不同的整数,以便它们被分配不同的标签。

标签= imdilate(L==0,ones(3,3)) + 2*bgm + 3*fgm4;当= labeloverlay(我、标签);imshow(预告)标题(“标记和物体边界叠加在原始图像上”

图中包含一个轴对象。具有标题标记和对象边界叠加在原始图像上的轴对象包含一个类型为图像的对象。

这个可视化演示了前景和背景标记的位置如何影响结果。在一些地方,部分被遮挡的较暗物体被与其较亮的邻居物体合并,因为被遮挡的物体没有前景标记。

另一种有用的可视化技术是将标签矩阵显示为彩色图像。标记矩阵,如由分水岭bwlabel,可转换为真彩色图像的可视化目的使用label2rgb

Lrgb = label2rgb (L,“喷气机”' w '“洗牌”);imshow (Lrgb)标题(“彩色分水岭标签矩阵”

图中包含一个轴对象。标题为“彩色分水岭标签矩阵”的轴对象包含一个类型为image的对象。

您可以使用透明度将这个伪颜色标签矩阵叠加到原始强度图像的顶部。

图imshow(我)himage = imshow (Lrgb);himage。AlphaData = 0.3;标题(“彩色标签透明地叠加在原始图像上”

图中包含一个轴对象。带有标题彩色标签透明叠加在原始图像上的轴对象包含2个类型为图像的对象。

另请参阅

||||||||||||