主要内容

使用边缘检测和形态检测单元格

此示例显示了如何使用边缘检测和基本形态检测单元格。如果对象与背景上具有足够的对比度,则可以在图像中轻松检测到对象。

第1步:读取图像

阅读Cell.tif.图像是前列腺癌细胞的图像。在该图像中存在两个细胞,但是整体上只能看到一个单元。目标是检测或分段,该细胞完全可见。

我= imread(“cell.tif”);imshow (I)标题('原始图像​​');文字(大小(i,2),大小(i,1)+15,......'图片由Alan Partin'提供......'字体大小'7,7,'水平对齐'“对”);文本(大小(我,2),大小(我,1)+ 25,......约翰霍普金斯大学的......'字体大小'7,7,'水平对齐'“对”);

图中包含一个轴对象。具有标题原始图像的轴对象包含3个类型图像的对象,文本。

第2步:检测整个单元格

与背景图像相比,待分割的对象不同。可以由计算图像梯度的运算符来检测对比度的变化。要创建包含分段单元的二进制掩码,请计算梯度图像并应用阈值。

使用边缘和Sobel操作员计算阈值。调整阈值和使用边缘再次获取包含分段单元的二进制掩码。

[~,阈值]=边缘(我“索贝尔”);Fuddfactor = 0.5;bws =边缘(我,“索贝尔”阈值* fudgeFactor);

显示产生的二元梯度掩模。

imshow(bws)标题(“二元梯度面具”的)

图中包含一个轴对象。具有标题二进制渐变掩码的轴对象包含类型图像的对象。

第3步:扩张图像

二进制梯度掩模显示图像中的高对比度线。这些行并不完全描绘感兴趣对象的轮廓。与原始图像相比,梯度掩模中的物体围绕物体存在间隙。如果使用线性结构元件扩展Sobel图像,则这些线性间隙将消失。通过使用创建两个垂直线性结构元素str函数。

se90 = strel('线', 90);se0 = strel ('线',3,0);

使用垂直结构化元件随后将二进制梯度掩模扩张,然后是水平结构化元件。这im功能是放大图像。

Bwsdil = Imdilate(BWS,[SE90 SE0]);imshow(bwsdil)标题('扩张渐变面膜'的)

图中包含一个轴对象。具有标题扩张渐变掩模的轴对象包含类型图像的对象。

第四步:填充内部间隙

放大的梯度遮罩很好地显示了细胞的轮廓,但在细胞内部仍然有洞。要填补这些洞,用imfill函数。

BWdfill = imfill (BWsdil,“黑洞”);imshow (BWdfill)标题('与填充孔的二进制图像'的)

图中包含一个轴对象。标题为Binary Image with Filled Holes的axis对象包含一个Image类型的对象。

第5步:在边框上删除连接的对象

感兴趣的单元已成功分段,但这不是已发现的唯一对象。可以使用连接到图像边框的任何对象inclearborder.函数。若要拆除对角线连接,请在inclearborder.功能4.

bwnobord = incleclecorder(bwdfill,4);imshow(bwnobord)标题(“清除边界图像”的)

图中包含一个轴对象。标题为“清除边界图像”的轴对象包含一个类型为“图像”的对象。

步骤6:平滑对象

最后,为了使分割后的物体看起来更自然,使用菱形结构元素对图像进行两次侵蚀,使物体平滑。控件创建菱形结构元素str函数。

seD = strel ('钻石'1);BWfinal = imerode (BWnobord, seD);BWfinal = imerode (BWfinal, seD);imshow (BWfinal)标题(“分割图像”);

图中包含一个轴对象。具有标题分段图像的轴对象包含类型图像的对象。

第7步:可视化分割

你可以使用Labeloverlay.在原始图像上显示掩码的功能。

imshow (labeloverlay(我BWfinal)标题('覆盖原始图像'的)

图中包含一个轴对象。标题为蒙版覆盖原始图像的axes对象包含一个类型为Image的对象。

显示分段对象的另一种方法是围绕分段单元格绘制轮廓。用Bwperim函数。

BWoutline = bwperim (BWfinal);Segout =我;Segout (BWoutline) = 255;imshow (Segout)标题('概述了原始图像'的)

图中包含一个轴对象。标题为“outline Original Image”的axis对象包含一个类型为Image的对象。

也可以看看

||||||

相关的话题