Marker-Controlled分水岭分割

该示例示出了如何使用分水岭分割来触摸物体的图像中分离。分水岭变换常适用于这个问题。分水岭通过将其视为一个表面,其中光的像素高,暗像素是低变换查找“集水盆地”和“分水岭棱线”的图像。

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

1.计算一个分割函数。这个图像的暗区就是你要分割的对象。

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

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

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

5.计算分水岭变换修改的分段函数的。

此示例突出显示了许多不同的图像处理工具箱™功能,包括imgradient分水岭label2rgblabeloverlayIMOPENimcloseimreconstructimcomplementimregionalmaxbwareaopengraythresh,imimposemin

第1步:阅读彩色图像,并将其转换为灰度

RGB = imread('pears.png');I = rgb2gray(RGB);imshow(I)文本(732501,'的Corel(R)的图像礼貌'...“字形大小”,7,'水平对齐'“对”

第2步:使用梯度大小的分段功能

计算梯度大小。梯度在物体的边界处是高的,而在物体内部(大部分)是低的。

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

你能段通过使用图像分水岭直接在梯度幅度变换?

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

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

步骤3:标记的前景对象

各种程序可以应用在这里找到前台标记,必须连接内各前景对象的像素的斑点。在这个例子中,你将使用名为“开放的重建”和“关闭,由重建”为“干净”了图像形态学技术。这些操作将创建可以使用位于每个对象内部平坦最大值imregionalmax

开口是侵蚀后跟一个扩张,而开口由重建是侵蚀后跟一个形态重构。让我们比较一下两个。首先,使用计算开放IMOPEN

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

接下来计算由重构得到的开孔imerodeimreconstruct

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

在与一个封闭开口可以去除黑斑和茎痕。比较封闭,通过重建常规形态关闭。第一次尝试imclose

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

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

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

通过比较可以看出Iobrcbr国际奥委会,基于重建的打开和关闭是比在不影响对象的总体形状小除去污点标准开闭更有效。计算出的最大区域Iobrcbr获得良好的前景标记。

女性生殖器切割= imregionalmax (Iobrcbr);imshow(女性生殖器切割)标题(“改造开闭的区域最大化”

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

I2 = labeloverlay(我、女性生殖器切割);imshow (I2)标题(“区域千里马叠加在原始图像”

请注意,一些大多遮挡和阴影对象的未标记的,这意味着这些对象将不会被正确地在最终结果进行分割。此外,在某些对象的前景标志走,一直到对象的边缘。这意味着你应该清理的标志斑点的边缘,然后他们收缩了一下。您可以通过关闭之后侵蚀做到这一点。

SE2 = strel(个(5,5));fgm2 = imclose(FGM,SE2);fgm3 = imerode(fgm2,SE2);

这个过程往往要离开必须删除一些流浪孤立像素。你可以用做bwareaopen,它删除了所有小于一定像素数的斑点。

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

步骤4:计算背景标记

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

BW = imbinarize(Iobrcbr);imshow(BW)标题(“阈值化的开闭由重建”

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

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

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

这个函数imimposemin可用于修改图像以使其具有只在特定的期望位置的区域极小。在这里,您可以使用imimposemin修改梯度幅值图像,使得其仅极小区域出现在前景和背景标记像素。

gmag2 = imimposemin(gmag, bgm | fgm4);

最后,我们准备计算基于分水岭的分割。

L =分水岭(gmag2);

步骤6:使结果可视化

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

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

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

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

Lrgb = label2rgb(L,“喷气机”' w '“洗牌”);imshow(Lrgb)标题(“彩色流域标记矩阵”

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

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

也可以看看

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