标记控制的分水岭分割

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

分割使用的分水岭变换的作品更好,如果你可以确认或“标记”,前景物体和背景的位置。标记控制的分水岭分割采用以下基本步骤:

1.计算分割功能。这是一个图像,其暗的区域是您要细分的对象。

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

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

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

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

这个例子中的亮点许多不同的图像处理工具箱™功能,包括imgradient分水岭标签2RGBlabeloverlayIMOPEN快到了imreconstructimcomplementimregionalmaxbwareaopengraythreshimimposemin

第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)标题('渐变幅度的分水岭变换'

号没有额外的预处理,比如标记的计算下面,使用分水岭变换直接经常导致“oversegmentation”。

步骤3:标记的前景对象

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

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

SE = strel(“盘”,20);IO = IMOPEN(I,SE);imshow(Io)的标题(“开放”

接着,使用计算开口逐重建imerodeimreconstruct

即= imerode(I,SE);Iobr = imreconstruct(即,I);imshow(Iobr)标题(“打开逐重建”

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

IOC = 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获得良好的前景标记。

FGM = imregionalmax(Iobrcbr);imshow(FGM)标题(“开 - 关中地区千里马的重建”

以帮助解释结果,叠加在原始图像上前景标记图像。

I2 = labeloverlay(I,FGM);imshow(I2)标题('叠加在原始图像上的区域最大值'

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

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

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

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

步骤4:计算背景标记

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

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

背景像素是黑色的,但最好我们不希望的背景标志过于接近,我们正试图段的对象的边缘。我们将“瘦身”,通过计算“的影响区域骨架”的背景下,或SKIZ,的前景BW。这可以通过计算来完成分水岭变换的距离的变换BW,然后寻找分水岭脊线(DL == 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,一(3,3))+ 2 * BGM + 3 * fgm4;I4 = labeloverlay(I,标签);imshow(I4)标题(“标记和对象边界叠加在原始图像”

这种可视化说明了前景和背景标记的位置会如何影响结果。在几个地点,部分遮挡的物体变暗,用他们的邻居亮对象合并,因为遮挡对象没有前景的标记。

另一种有用的可视化技术是显示标签矩阵作为彩色图像。标签基质,如那些由产生分水岭bwlabel,可以通过使用被转换成真彩色图像进行可视化的目的标签2RGB

Lrgb = label2rgb(L,'喷射''W'“洗牌”);imshow(Lrgb)标题(“有色流域标签矩阵”

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

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

也可以看看

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