这个例子展示了如何使用边缘检测和基本形态学来检测一个细胞。如果一个物体与背景有足够的对比度,那么这个物体就很容易在图像中被检测出来。
读的cell.tif
这是一个前列腺癌细胞的图像。图中有两个细胞,但只有一个细胞是完整的。其目标是检测或分割完全可见的细胞。
我= imread (“cell.tif”);imshow (I)标题(原始图像的);文本(大小(我,2),大小(我,1)+ 15,...“图片由艾伦·帕汀提供”,...“字形大小”7“HorizontalAlignment”,“对”);文本(大小(我,2),大小(我,1)+ 25,....约翰霍普金斯大学的,...“字形大小”7“HorizontalAlignment”,“对”);
待分割对象与背景图像的对比度有很大的不同。对比度的变化可以通过计算图像梯度的操作员来检测。要创建包含分割单元格的二进制掩码,计算梯度图像并应用阈值。
使用边缘
和Sobel算子来计算阈值。调整阈值和使用边缘
再次获取包含分段单元格的二进制掩码。
[~,阈值]=边缘(我“索贝尔”);fudgeFactor = 0.5;受虐妇女综合症=边缘(我“索贝尔”阈值* fudgeFactor);
显示生成的二进制渐变掩码。
imshow(受虐妇女综合症)标题(“二元梯度面具”)
二值梯度掩模在图像中显示出高对比度的线条。这些线条并不能很好地勾勒出感兴趣对象的轮廓。与原始图像相比,在渐变蒙版中,物体周围的线条有间隙。如果使用线性结构元素放大索贝尔图像,这些线性间隙将消失。使用创建两个垂直的线性结构元素strel
函数。
se90 = strel (“行”, 90);se0 = strel (“行”3 0);
使用垂直结构元素和水平结构元素扩展二元梯度掩模。的imdilate
函数扩展图像。
BWsdil = imdilate(BWs,[se90 se0]);imshow (BWsdil)标题(“扩张梯度面具”)
放大的渐变蒙版很好地显示了细胞的轮廓,但细胞内部仍然有孔。要填满这些洞,用imfill
函数。
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(我BWfinal)标题(“原始图像的蒙版”)
显示分割对象的另一种方法是在分割单元格周围绘制轮廓。使用bwperim
函数。
BWoutline = bwperim (BWfinal);Segout =我;Segout (BWoutline) = 255;imshow (Segout)标题(概述了原始图像的)
imfill
|imclearborder
|边缘
|imdilate
|imerode
|bwperim
|strel