上一期的内容:医学图像处理——数据类与图像类型之间的转换
单色图像的分割算法通常基于图像亮度值的两个基本特性:不连续性和相似性。在第一种类别中,处理方法是基于亮度的突变来分割一幅图像,如图像的边缘。在第二种类别中,主要方法是根据事先定义的准则把图像分割成相似的区域。今天小白介绍一下MATLAB中常用边缘检测的方法。
掩膜的概念
常用的点、线、边缘检测首先需要对检测的工具——掩模这一概念需要了解。拿3 x 3的掩模来说,该过程为计算系数和由掩模覆盖区域所包含的灰度级的乘积之和。换言之,掩模在该图像中任何一点处的响应R由下式给出:
其中,z是与掩模系数w相关的像素的亮度。
在具体的计算过程中,掩模会与图形中3*3的像素矩阵进行卷积并将结果赋值给像素矩阵的中间值。具体的可由下图表示。
点检测
所谓的点检测,就是对嵌在常数区域(或图像中亮度基本不变的区域)中的孤立点的检测,(比如在一大片黑点中的一个白点),基本思路就是利用掩模卷积的思路将结果大于所设阈值的点标定为二值1,反之为零。就像鹤立鸡群一样,我们可以根据身高的值来找到鹤。而其在MATLAB中的实现方式就可以通过如下函数(imfilter)操作。这次小白亲手操作了一下哟!
g=abs(imfilter(double(f),w))>=T;
f=imread("Fig1002(a).tif");
w=[-1,-1,-1;-1,8,-1;-1,-1,-1];
g=abs(imfilter(double(f),w));
T=max(g(:));
g=g>=T-370;
figure(1);
subplot(1,2,1);
imshow(f);
subplot(1,2,2);
imshow(g);
结果如下:
可以看到当我们阈值设为最大值时就可以将左图中的一个最高亮度的点检测出来(为便于观察右图已放大,孤立点比较小,大家注意看!因为放大的缘故点的坐标在两图并不匹配)。
线检测
所谓的线检测就是将满足在某个方向上的线从图像中检出提取出来,一般我们会用如下四种掩模。
可以看到,若是在亮度不变的区域,来自掩模的相应会为零,若是存在与掩模方向相同的线段则其灰度值会因为加权而放大,从而能够有区别的显示在图中。同样,在这部分小白也亲手操作了一下!
f=imread("Fig1004(a).tif");
w=[2,-1,-1;-1,2,-1;-1,-1,2];
g=imfilter(double(f),w);
figure(2);
subplot(2,2,1);
imshow(g,[ ]);
gtop=g(1:120,1:120);
gtop=pixeldup(gtop,4);
subplot(2,2,2);
imshow(gtop,[ ]);
subplot(2,2,3);
imshow(f);
结果如下:
可以看到第三张图中的斜线段大部分已被检测出(显示于图一,图二也就是右边的图则是图一的左上放大部分),那么有的人可能会问,怎么没有直线段?大家可以仔细的看我的代码,所用的掩模其实是-45度方向的,所以自然对斜线段的增强检出更好!当然大家可以把4种掩模都试一下,看看效果如何!
本次小白先只介绍点和线的检测,真正的边缘检测我们下次再说(由于比较复杂)。但大家可以想的到点线的检测肯定是后面的基础,一定要先理解这两部分的思路,才能在后面的关卡中快刀斩乱麻哟!
关注公众号“医电小白的进阶之路”,查看更多干货!
觉得有用就加个关注吧!