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

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

第1步:读取图像

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

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

第2步:检测整个单元格

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

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

[〜,阈值] =边缘(i,'sobel');Fuddfactor = 0.5;bws =边缘(我,'sobel',阈值*柔软剂);

显示生成的二进制渐变掩模。

imshow(bws)标题('二进制渐变面膜'

第3步:扩张图像

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

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

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

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

第4步:填补内部空白

扩张的梯度掩模非常好地显示细胞的轮廓,但细胞内部存在仍然存在孔。要填补这些孔,请使用Imfill.功能。

bwdfill = imfill(bwsdil,'洞');imshow(bwdfill)标题('填充孔的二进制图像'

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

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

bwnobord = inclecleborder(bwdfill,4);imshow(bwnobord)标题('清除边框图像'

第6步:平滑对象

最后,为了使分段对象看起来自然,通过用钻石结构元件侵蚀图像两次,平滑对象。使用钻石结构化元素使用str功能。

sed = strel('钻石',1);bwfinal = imerode(bwnobord,sed);BWFINAL = IMERODE(BWFINAL,SED);imshow(bwfinal)标题('分段图像');

第7步:可视化分段

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

imshow(Labeloverlay(i,bwfinal))标题(“掩盖原始图像”

显示分段对象的替代方法是绘制围绕分段单元的轮廓。通过使用绘制轮廓Bwperim功能。

bwoutline = bwperim(bwfinal);segout = i;SEGOUT(BWOUTLINE)= 255;imshow(segout)标题('概述了原始图像'

也可以看看

||||||

相关话题