使用边缘检测和形态学检测细胞
这个例子展示了如何使用边缘检测和基本形态学来检测一个单元。如果一个物体与背景有足够的对比,那么这个物体就可以很容易地在图像中被检测到。
第一步:读取图像
阅读cell.tif
这是一个前列腺癌细胞的图像。图中有两个细胞,但只有一个完整的细胞。目标是检测或分割完全可见的细胞。
I = imread(“cell.tif”);imshow (I)标题(原始图像的);文本(大小(我,2),大小(我,1)+ 15,...图片由Alan Partin提供,...“字形大小”7“HorizontalAlignment”,“对”);文本(大小(我,2),大小(我,1)+ 25,....“约翰霍普金斯大学”,...“字形大小”7“HorizontalAlignment”,“对”);
步骤2:检测整个细胞
要分割的对象与背景图像的对比差异很大。对比度的变化可以通过计算图像梯度的运算符来检测。要创建包含分割单元格的二进制掩码,请计算梯度图像并应用阈值。
使用边缘
和Sobel算子计算阈值。调优阈值并使用边缘
再次获取包含分段单元格的二进制掩码。
[~,threshold] = edge(I,“索贝尔”);fudgeFactor = 0.5;BWs =边(I,“索贝尔”,阈值* fudgeFactor);
显示结果的二元渐变蒙版。
imshow(受虐妇女综合症)标题(“二元渐变蒙版”)
步骤3:放大图像
二值梯度蒙版显示了图像中高对比度的线条。这些线条不能很好地勾勒出感兴趣的物体的轮廓。与原始图像相比,渐变蒙版中物体周围的线条有间隙。如果使用线性结构元素将Sobel图像放大,这些线性间隙将消失。创建两个垂直的线性结构元素strel
函数。
Se90 = strel(“行”, 90);Se0 = strel(“行”3 0);
使用垂直结构元素和水平结构元素来扩展二元梯度蒙版。的imdilate
函数放大图像。
BWsdil = imdilate(BWs,[se90 se0]);imshow (BWsdil)标题(“扩张渐变蒙版”)
第四步:填充内部空隙
放大的梯度蒙版很好地显示了细胞的轮廓,但在细胞内部仍然有洞。要填补这些洞,使用imfill
函数。
BWdfill = imfill(BWsdil,“黑洞”);imshow (BWdfill)标题(“填洞二值图像”)
步骤5:删除边界上的连接对象
感兴趣的单元已经被成功分割,但它并不是唯一被发现的对象。方法可以删除连接到图像边界的任何对象imclearborder
函数。中设置连接性,可删除对角线连接imclearborder
函数4
.
bwnoboard = imclearborder(BWdfill,4);imshow (BWnobord)标题(“清除边界图像”)
步骤6:平滑对象
最后,为了使分割的对象看起来自然,通过用菱形结构元素对图像进行两次侵蚀来平滑对象。控件创建菱形结构元素strel
函数。
seD = strel(“钻石”1);BWfinal = imerosion (bwnoboard,seD);BWfinal = imerosion (BWfinal,seD);imshow (BWfinal)标题(“分割图像”);
步骤7:可视化分割
您可以使用labeloverlay
函数在原始图像上显示蒙版。
imshow (labeloverlay(我BWfinal)标题(“掩码覆盖原始图像”)
显示分段对象的另一种方法是围绕分段单元格绘制轮廓。画一个轮廓bwperim
函数。
BWoutline = bwperim(BWfinal);Segout = I;Segout(BWoutline) = 255;imshow (Segout)标题(“原始轮廓图”)
另请参阅
imfill
|imclearborder
|边缘
|imdilate
|imerode
|bwperim
|strel