主要内容

利用边缘检测和形态学检测细胞

这个例子展示了如何使用边缘检测和基本形态学来检测细胞。如果物体与背景有足够的对比度,那么在图像中可以很容易地检测到物体。

第一步:阅读图像

读的cell.tif这是一个前列腺癌细胞的图像。在这张图片中有两个细胞,但只有一个细胞可以完整地看到。其目标是检测或分割完全可见的细胞。

我= imread (“cell.tif”);imshow (I)标题(原始图像的);文本(大小(我,2),大小(我,1)+ 15,...“图片由艾伦·帕廷提供”...“字形大小”7“HorizontalAlignment”“对”);文本(大小(我,2),大小(我,1)+ 25,...约翰霍普金斯大学的...“字形大小”7“HorizontalAlignment”“对”);

图中包含一个轴对象。标题为Original Image的axis对象包含3个类型为Image, text的对象。

第二步:检测整个细胞

被分割的目标与背景图像对比度差异较大。对比度的变化可以通过计算图像梯度的操作来检测。要创建包含分割单元格的二元掩模,请计算梯度图像并应用一个阈值。

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

[~,阈值]=边缘(我“索贝尔”);fudgeFactor = 0.5;受虐妇女综合症=边缘(我“索贝尔”阈值* fudgeFactor);

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

imshow(受虐妇女综合症)标题(“二元梯度面具”

图中包含一个轴对象。标题为二元渐变蒙版的轴对象包含一个类型为image的对象。

第三步:放大图像

二元梯度掩模在图像中显示出高对比度的线条。这些线条并不能完全描绘出感兴趣的对象的轮廓。与原始图像相比,渐变蒙版中物体周围的线条有缝隙。如果使用线性结构元素放大Sobel图像,这些线性间隙将消失。使用。创建两个垂直的线性结构元素strel函数。

se90 = strel (“行”, 90);se0 = strel (“行”3 0);

使用垂直结构元素和水平结构元素来扩展二元梯度掩模。的imdilate功能是放大图像。

BWsdil = imdilate(BWs,[se90 se0]);imshow (BWsdil)标题(“扩张梯度面具”

图中包含一个轴对象。标题为“膨胀渐变蒙版”的轴对象包含一个类型为image的对象。

第四步:填充内部间隙

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

BWdfill = imfill (BWsdil,“黑洞”);imshow (BWdfill)标题(“带有填充孔的二元图像”

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

第五步:移除边界上的连接对象

感兴趣的细胞已经被成功分割,但它不是唯一被发现的对象。控件可以删除连接到图像边界的任何对象imclearborder函数。若要拆除对角线连接,请在imclearborder函数4

BWnobord = imclearborder (BWdfill 4);imshow (BWnobord)标题(“清除边界图像”

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

步骤6:平滑对象

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

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的对象。

另请参阅

||||||

相关的话题