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

1.读取图像

cell.tif 图像中读取,这是一个前列腺癌细胞的图像。此图像中存在两个细胞,但只有一个细胞完整显示。目标是检测或分割完整显示的细胞。

Figure contains an axes. The axes with title Original Image contains 3 objects of type image, text.

 I = imread('cell.tif');%读取这张名为cell.tif的图
 imshow(I)%显示它
 title('Original Image');%名字为‘原始图片’-
 text(size(I,2),size(I,1)+15, ...%size括号里的参数一个代表长,一个代表宽。-具体啥意思我有疑问????-
     'Image courtesy of Alan Partin', ...
     'FontSize',7,'HorizontalAlignment','right');
 text(size(I,2),size(I,1)+25, ....
     'Johns Hopkins University', ...
     'FontSize',7,'HorizontalAlignment','right');

步骤 2:检测整个细胞

要分割的对象与背景图像的对比度相差很大。计算图像梯度的算子(sobel算子可以计算图像梯度,计算图像梯度的作用是提取边界。)可以检测到对比度的变化。要创建包含分割后的细胞的二值掩膜,请计算梯度图像并应用一个阈值 -。

使用 edge 和 Sobel 算子计算阈值。调整阈值,再次使用 edge 获得包含分割后的细胞的二值掩膜。

 [~,threshold] = edge(I,'sobel');%%使用sober算法检测图像边缘
 fudgeFactor = 0.5;%阈值
 BWs = edge(I,'sobel',threshold * fudgeFactor);%返回强度高于 threshold * fudgeFactor的所有边缘

这里的阈值怎么选择?试出来的!

显示生成的二元梯度掩膜

 imshow(BWs)
 title('Binary Gradient Mask')

Figure contains an axes. The axes with title Binary Gradient Mask contains an object of type image.

步骤 3:膨胀图像

二元梯度掩膜显示图像中高对比度的线条。这些线条没有很好地描绘出关注对象的轮廓。与原始图像相比,梯度掩膜中对象周围的线条有间隙。如果使用线性结构元素膨胀 Sobel 图像,这些线性间隙将消失。使用 strel 函数创建两个垂直线性结构元素。

 se90 = strel('line',3,90);%SE = strel('line',len,deg) %创建一个关于邻域中心对称的线性结构元素,长度约为 len,角度约为 %deg
 se0 = strel('line',3,0);

先后使用垂直结构元素和水平结构元素,来膨胀二元梯度掩膜。使用 imdilate 函数膨胀图像。

 BWsdil = imdilate(BWs,[se90 se0]);
 imshow(BWsdil)
 title('Dilated Gradient Mask')

J = imdilate(I,SE) 用于膨胀灰度图像、二值图像或压缩二值图像 I,返回膨胀图像 J。SE 是结构元素对象或结构元素对象的数组,由 strel 或 offsetstrel 函数返回。

Figure contains an axes. The axes with title Dilated Gradient Mask contains an object of type image.

步骤 4:填补内部间隙

膨胀的梯度掩膜很好地显示了细胞的轮廓,但细胞内部仍有小孔。要填充这些孔洞,请使用 imfill 函数。

 BWdfill = imfill(BWsdil,'holes');
 imshow(BWdfill)
 title('Binary Image with Filled Holes')

Figure contains an axes. The axes with title Binary Image with Filled Holes contains an object of type image.

步骤 5:删除边界上的连通对象

关注的细胞已成功分割,但它不是被发现的唯一对象。可以使用 imclearborder 函数删除任何与图像边界连通的对象。要删除对角线连通,请将 imclearborder 函数中的连通性设置为 4。(什么是对角线联通?)应该是要与对角线联通的区域

%4-连通,如果像素的边缘接触,像素就会连接起来。像素的邻域是水平或垂直方向上的相邻像素。

 BWnobord = imclearborder(BWdfill,4);
 imshow(BWnobord)
 title('Cleared Border Image')

Figure contains an axes. The axes with title Cleared Border Image contains an object of type image.

步骤 6:平滑处理对象

最后,为了使分割后的对象看起来自然,用菱形结构元素对图像腐蚀两次来平滑处理对象。使用 strel 函数创建菱形结构元素。

 seD = strel('diamond',1);
 BWfinal = imerode(BWnobord,seD);
 BWfinal = imerode(BWfinal,seD);
 imshow(BWfinal)
 title('Segmented Image');

%SE = strel('diamond',r) 创建一个菱形结构元素,其中 r 指定从结构元素原点到菱形各点的距离 diamond是菱形

%J = imerode(I,SE) 腐蚀灰度图像、二值图像或压缩二值图像 I,返回腐蚀图像 J。SE 是结构元素对象或结构元素对象的数组,由 strel 或 offsetstrel 函数返回。

步骤 7:可视化分割

显示分割后的对象的另一种方法是在分割的细胞周围绘制轮廓。使用 bwperim 函数绘制轮廓。

BWoutline = bwperim(BWfinal);
Segout = I; 
Segout(BWoutline) = 255; 
imshow(Segout)
title('Outlined Original Image')

Figure contains an axes. The axes with title Outlined Original Image contains an object of type image.

%BW2 = bwperim(BW)返回仅包含输入图像中对象的周边像素的二进制图像。BW。如果像素是非零的,并且连接到至少一个零值像素,则像素是外围的一部分

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值