主要内容

Marker-Controlled分水岭分割

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

如果您可以识别或“标记”的前景对象和背景位置,使用流域变换的分割工作更好。标记控制的流域分割遵循此基本程序:

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

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

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

  4. 修改分段函数,使其在前台和背景标记位置仅具有最小值。

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

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

rgb = imread ('pears.png');i = RGB2GRAY(RGB);imshow(i)文字(732,501,'图片由Corel(R)'提供......“字形大小”7,'水平对齐''对'

图中包含一个坐标轴。轴包含2个类型图像的对象,文本。

第2步:使用梯度幅度作为分段函数

计算梯度幅度。梯度高于物体边界,并且在物体内部低(主要)。

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

图中包含一个坐标轴。标题为“梯度大小”的轴包含一个类型为image的对象。

您可以通过直接在梯度幅度上使用流域变换来分割图像吗?

l =流域(Gmag);lrgb = label2RGB(L);imshow(lrgb)标题('流域的梯度幅度转换'

图中包含一个坐标轴。具有标题流域的梯度幅度的轴包含类型图像的对象。

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

第3步:标记前景对象

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

开放是一种侵蚀,然后是扩张,而开放的重建是一种侵蚀,然后是形态重建。让我们比较这两者。首先,计算使用伊莫登

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

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

接下来使用imerodeimreconstruct

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

图中包含一个坐标轴。具有标题开放重建的轴包含类型图像的对象。

在带有闭合的开口之后可以去除暗点和茎标记。比较常规重建的常规形态关闭。第一次尝试imclose

国际奥委会= imclose (Io, se);imshow (Ioc)标题('开放'

图中包含一个坐标轴。带有标题打开的轴包含类型图像的对象。

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

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

图中包含一个坐标轴。通过重建具有标题开闭的轴包含类型图像的对象。

你可以通过比较来看Iobrcbr.IOC,基于重建的开放和关闭比标准开口和关闭更有效,在不影响物体的整体形状的情况下拆除小瑕疵。计算区域最大值Iobrcbr.获得良好的前景标记。

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

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

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

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)标题(“在原始图像上叠加修改的区域最大值”

图中包含一个坐标轴。具有标题修改的区域Maxima叠加在原始图像上的轴包含类型图像的对象。

步骤4:计算背景标记

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

bw = imbinarize(iobrcbr);imshow(bw)标题('通过重建阈值开放式关闭'

图中包含一个坐标轴。具有标题的轴通过重建的标题阈值开闭闭合包含类型图像的对象。

背景像素处于黑色,但理想情况下,我们不希望背景标记太靠近我们尝试段的对象的边缘。我们将通过计算“通过影响区域”,或滑雪精灵的“骨架”来“薄”背景BW..这可以通过计算距离变换的流域变换来完成的BW.,然后寻找分水岭山脊线(戴斯。莱纳姆:= = 0)结果。

d = bwdist(bw);dl =流域(d);BGM = DL == 0;imshow(bgm)标题('流域脊线'

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

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

功能imimposemin可用于修改图像,使其仅在某些所需位置具有区域最小值。在这里,您可以使用imimposemin修改梯度幅度图像,使其仅在前台和背景标记像素处发生其唯一的区域最小值。

gmag2 = imimposemin(gmag,bgm | fgm4);

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

l =流域(Gmag2);

第6步:可视化结果

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

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

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

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

另一种有用的可视化技术是以彩色图像显示标签矩阵。标签矩阵,例如由此产生的矩阵分水岭bwlabel,可以通过使用来转换为TrueColor图像以进行可视化目的label2RGB.

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

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

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

图imshow(i)持有hemage = imshow(lrgb);hemage.alphadata = 0.3;标题(“彩色标签透明地叠加在原始图像上”

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

也可以看看

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