这个例子展示了如何使用边缘检测和基本形态学来检测一个细胞。如果物体与背景有足够的对比度,那么在图像中可以很容易地检测到物体。
读的cell.tif
图像,这是前列腺癌细胞的图像。图中有两个细胞,但只能看到一个完整的细胞。目标是检测或分割完全可见的细胞。
我= imread ('cell.tif');imshow(i)标题(原始图像的);文本(大小(我,2),大小(我,1)+ 15,...图片由Alan Partin提供,...“字形大小”7“HorizontalAlignment”,'对');文字(大小(i,2),尺寸(i,1)+25,....'约翰霍普金斯大学',...“字形大小”7“HorizontalAlignment”,'对');
待分割的物体与背景图像有很大的差异。计算图像梯度的操作人员可以检测到对比度的变化。为了创建一个包含分割单元的二进制掩码,计算梯度图像并应用一个阈值。
用边缘
和Sobel算子计算阈值。调优阈值和使用边缘
再次获得包含分割单元的二进制掩码。
[〜,阈值] =边缘(I,'sobel');fudgeFactor = 0.5;受虐妇女综合症=边缘(我'sobel',阈值*柔软剂);
显示生成的二进制梯度掩模。
imshow(受虐妇女综合症)标题('二进制渐变面膜')
二值梯度蒙版显示了图像中高对比度的线条。这些线条并不能很好地勾勒出感兴趣的对象的轮廓。与原始图像相比,在渐变蒙版中,物体周围的线条有缝隙。如果使用线性结构元素放大Sobel图像,这些线性间隙将消失。创建两个垂直的线性结构元素strel
函数。
se90 = strel (“行”,3,90);se0 = strel(“行”3 0);
使用垂直结构元素和水平结构元素来扩展二元梯度掩模。的imdilate
功能扩展了图像。
BWsdil = imdilate(BWs,[se90 se0]);imshow (BWsdil)标题(“扩张梯度面具”)
扩张的梯度掩模非常好地显示细胞的轮廓,但细胞内部存在仍然存在孔。要填补这些孔,请使用imfer.
函数。
bwdfill = imfill(bwsdil,'洞');imshow(bwdfill)标题(“填满洞的二值图像”)
感兴趣的细胞已经被成功分割,但它不是找到的唯一对象。对象可以删除连接到图像边界的任何对象imclearborder
函数。要删除对角线连接,请设置连接中的连接imclearborder
函数4
.
BWnobord = imclearborder (BWdfill 4);imshow (BWnobord)标题('清除边框图像')
最后,为了使分割出来的物体看起来自然,使用菱形结构元素对图像进行两次腐蚀,使物体平滑。创建菱形结构元素strel
函数。
seD = strel (“钻石”,1);bwfinal = imerode(bwnobord,sed);BWFINAL = IMERODE(BWFINAL,SED);imshow(bwfinal)标题('分段图像');
你可以使用labeloverlay
函数在原始图像上显示掩码。
imshow(Labeloverlay(i,bwfinal))标题(“原始图像蒙版”)
显示分段对象的替代方法是绘制围绕分段单元的轮廓。使用绘制轮廓bwperim
函数。
bwoutline = bwperim(bwfinal);segout = i;SEGOUT(BWOUTLINE)= 255;imshow(segout)标题(概述了原始图像的)
imfer.
|imclearborder
|边缘
|imdilate
|imerode
|bwperim
|strel