数字图像处理——第十章(图像分割)

形态学图像处理中,输入的是图像,输出的是从图像中提取出来的属性,分割是该方向上的另一步骤。分割将图像细分为构成它的子区域或物体。细分的程度取决于要解决的问题。当感兴趣的物体或区域已经被检测出来了,那就停止分割。单色图像的分割算法通常基于灰度值的两个基本性质:不连续性和相似性。第一种是以灰度变换(即灰度的突变)为基础分割图像,如边缘检测;第二种是根据事先预定义的相似性准则把图像分成相似的区域,如阈值分割、区域生长。图像分割的数学描述令R表示一幅图像占据的整个空间区域。将图像分割视为把R分为n个子区域R
摘要由CSDN通过智能技术生成

参考:https://blog.csdn.net/mary_0830/article/details/89597672
https://blog.csdn.net/Dujing2019/article/details/90203492


形态学图像处理中,输入的是图像,输出的是从图像中提取出来的属性,分割是该方向上的另一步骤。
分割将图像细分为构成它的子区域或物体。细分的程度取决于要解决的问题。当感兴趣的物体或区域已经被检测出来了,那就停止分割。
单色图像的分割算法通常基于灰度值的两个基本性质: 不连续性和相似性。第一种是以 灰度变换(即灰度的突变)为基础分割图像,如边缘检测;第二种是根据事先预定义的 相似性准则把图像分成相似的区域,如阈值分割、区域生长、区域分裂和聚合。

图像分割的数学描述
令R表示一幅图像占据的整个空间区域。将图像分割视为把R分为n个子区域R1,R2,…,Rn的过程,满足:
在这里插入图片描述
(a):分割必须是完全的,即每个像素都必须在一个区域内;
(b):一个区域中的点以某种预定义的方式来连接(这些点必须是4连接或8连接的);
©:各个区域必须不相交;
(d):分割后的区域中的像素必须满足的属性(如,若Ri中的所有像素都有相同的灰度级,则Q(Ri) = TRUE),其中属性可以是灰度,颜色,纹理等;
(e):两个邻接区域Ri和Rj在属性Q的意义上必须是不同的。

一、点、线和边缘检测

本节主要介绍以灰度局部剧烈变化(灰度不连续性)检测为基础的分割方法。
对一幅图中灰度的突变,局部变化可以用微分来检测。因为变化短促,可以用一阶微分和二阶微分描述。
数字函数的导数可用差分来定义。一维函数f(x)在点x处一阶导数的近似:
在这里插入图片描述
一维函数f(x)在点x处二阶导数的近似:
在这里插入图片描述
对二维图像函数f(x,y),为表示一致性,使用偏微分,将处理沿两个空间轴的偏微分

有关一阶导数和二阶导数的结论:
(1) 一阶导数通常在图像中产生较粗的边缘
(2) 二阶导数对精细细节,如细线、孤立点和噪声有较强的响应;
(3) 二阶导数在灰度斜坡和灰度台阶过渡处会产生双边缘响应
(4) 二阶导数的符号可用于确定边缘的过渡是从亮到暗(负二阶导数)还是从暗到亮(正二阶导数)

计算图像中每个像素位置处的一阶导数和二阶导数的另一种方法是使用空间滤波器
对3*3滤波器掩膜来说,导数是计算模板系数与被该模板覆盖的区域中的灰度值的乘积之和。即模板在该区域中心点处的响应如下:
在这里插入图片描述
zk为像素的灰度,wk为对应位置的系数。
其中,3 x 3的空间滤波器为:
在这里插入图片描述

1.1 孤立点的检测

点的检测应以二阶导数为基础。
孤立点常嵌在常数区域(或图像中亮度基本不变的区域)中,孤立点的灰度将完全不同与其周围像素。
点检测通常使用拉普拉斯算子进行检测。第三章介绍的四种拉普拉斯模板如下:
在这里插入图片描述
原理:如果在某个点处,该模板的响应R的绝对值超过了某个指定阈值,则说明在模板中心位置(x,y)处的该点已被检测到。输出图像中,这样的点标注为1,其他所有的点标注为0,从而产生一幅二值图像。公式描述如下:
在这里插入图片描述
其中,g是输出图像,T为一个非负阈值。R为上述介绍过的,即模板的系数与其覆盖区域的灰度值的乘积之和,也叫作模板的响应。
当模板的中心位于一个孤立点时,模板的响应最强,而在亮度不变的区域响应为0。

实现
若T已经给出

g = abs(imfilter(double(f),w))>=T;  
f:输入图像;
w:点检测模板;
T:指定的非负阈值;
g:包含检测点的输出图像

示例:图像中的孤立点检测

f = imread('test_pattern_with_single_pixel.tif');
w = [1 1 1; 1 -8 1; 1 1 1];
g = abs(imfilter(double(f),w));
T = max(g(:)); % 将滤波后的图像g的最大值设定为阈值T,很明显,g中不可能有比T值更大的点。
g = g >= T;

figure;
subplot(1,2,1); imshow(f); title('原图');
subplot(1,2,2); imshow(g); title('点检测图像');

在这里插入图片描述
由图可以看出,原图方框框的位置,有一个几乎看不见的小黑点,通过点检测的方法,在检测后的图像中,就能很明显的看到该点的存在。
点检测的另一种方法是在大小为m*n的所有邻域内寻找一些点,这些点的最大值和最小值之差超过了T。可以使用ordfilt2函数(排序)来实现。

g = imsubtract(ordfilt2(f,m*n,ones(m,n)),ordfilt2(f,1,ones(m,n)));
g = g >= T;

1.2 线检测

线检测会更复杂一些。对于线检测,二阶导数将产生更强的响应,并产生比一阶导数更细的线。
==注:==必须适当处理二阶导数的双线效应
线检测模板如下:
在这里插入图片描述
第一个模板对水平方向的线有最佳响应;第二个模板对45°方向的线有最佳响应;第三个模板对垂直方向的线有最佳响应;第四个模板对**-45°方向**的线有最佳响应。每个模板的首选方向用一个比其他方向更大的系数(如2)加权。每个模板中系数之和为0,表明恒定灰度区域中的响应为0。
:有关正负45°模板中,不同的书有不同的说法,均与所选的坐标系及其方向有关,只要自己能搞清楚到底想要的是图像哪个方向的边缘即可,根据自己想要提取的对角的方向选择合适的模板即可,而不必纠结到底哪个模板是+45°,哪个是-45°。

若对检测图像中由给定模板定义的方向上的所有线感兴趣,则只须简单对图像运用这个模板,并对结果的绝对值进行阈值处理。留下的点是有最强响应的点,这些点与模板的方向最为接近,且组成了只有一个像素宽的线。

示例:寻找图像中所有宽度为1像素、方向为-45°的线。

f = imread('wirebond_mask.tif');
w = [2 -1 -1;-1 2 -1;-1 -1 2];
g = imfilter(double(f),w);

gtop = g(1:120,1:120); % 获取左上角的图像
gtop = pixeldup(gtop,4); % 将图像放大4*4倍

gbot = g(end -119:end,end -119:end);  % 获取右下角的图像
gbot = pixeldup(gbot,4);  % 将图像放大4*4倍

g1 = abs(g); 
T = max(g1(:));  % 将阈值设为g1的最大值
g2 = g1 >= T; % 对模板滤波的结果进行阈值处理

figure;
subplot(2,3,1),imshow(f),title('(a)原图');
subplot(2,3,2),imshow(g,[]),title('(b)45°方向处理后的图像');
subplot(2,3,3),imshow(gtop,[]),title('(c)左上角放大的图像');
subplot(2,3,4),imshow(gbot,[]),title('(d)右下角放大的图像');
subplot(2,3,5),imshow(g1,[]),title('(e)滤波后绝对值的图像');
subplot(2,3,6),imshow(g2),title('(f)阈值处理后的图像');

在这里插入图片描述
由于一个figure中显示的图太多,故有些图中的细节可能显示不完整,若想要观察每个图的具体细节,单独显示要观察的图就好。
从图b中可以看到,图中有明显的黑线和白线,这就是二阶导数的双线效应,中等灰度表示0,较暗的灰色调表示负值,较量的色调表示正值。放大图像会看的更明显。对图b求绝对值,可以消除图中的负值,如图e所示。
从图c和图d中的直线段相比,图d中的更亮,这是因为图a中右下角的线段宽度为1,而左上方线段的宽度不是。

1.3 边缘检测

边缘检测是基于灰度突变来分割图像的方法

1.3.1 边缘模型

边缘模型根据它们的灰度剖面分为:台阶模型、斜坡模型和屋顶模型。
在这里插入图片描述
台阶边缘:理想型,1像素的距离上出现两个灰度级间的理想过渡。
斜坡边缘:实际中,数字图像都存在被模糊且带有噪声的边缘,因此更接近斜坡边缘,斜坡的斜度与边缘的模糊程度成正比。一个边缘点是斜坡中包含的任何点,一条边缘线段是一组已连接起来的这样的点。
屋顶边缘:屋顶模型是通过一个区域的线的模型,屋顶边缘的基底(宽度)由该线的宽度和尖锐度决定。
在这里插入图片描述
结论:
(1) 一阶导数的幅度可用于检测图像中的某个点处是否存在一个边缘;
(2) 二阶导数的符号可用于确定一个边缘像素是位于该边缘的暗侧还是位于该边缘的亮侧,为“正”在暗侧,为“负”在亮侧;
围绕一条边缘的二阶导数的两个附加性质:
a、对图像中的每条边缘,二阶导数生成两个值(一个不希望的特点);
b、二阶导数的零交叉点(零灰度轴和二阶导数极值间的连线的交点)可用于定位粗边缘的中心

边缘检测的基本步骤:
在这里插入图片描述
(1) 平滑滤波:由于梯度计算易受噪声影响,因此第一步是用滤波去噪。但是,降低噪声的平滑能力越强,边界强度的损失越大;
(2) 锐化滤波:为了检测边界,必须确定某点邻域中灰度的变换。锐化操作加强了存在有意义的灰度局部变化位置的像素点;
(3) 边缘判定:在图像中存在许多梯度不为零的点,但对于特定应用,不是所有点都有意义。这就要求我们根据具体情况选择和去除处理点,具体方法包括二值化处理和过零检测等;
(4) 边缘连接:将间断的边缘连接成有意义的完整边缘,同时去除假边缘。主要方法是Hough变换

1.3.2 基本边缘检测

图像梯度
图像f的(x,y)处边缘的强度和方向用梯度表征,梯度用∇f表示,用向量来定义:
在这里插入图片描述
该向量指出了f在位置(x,y)处的最大变化率的方向
∇f的大小(长度/赋值)表示为M(x,y)。
在这里插入图片描述
平方和平方根需要大量的计算开销,故常用的是用绝对值来近似梯度的大小(幅值)。
在这里插入图片描述
它是梯度向量方向变化率的值,M(x,y)常称为梯度图像:gx,gy和M(x,y)都是与原图像大小相同的图像。
梯度向量的方向由对于x轴度量的角度给出:
在这里插入图片描述
任意点(x,y)处一个边缘的方向与该点处梯度向量的方向α(x,y)正交。

梯度算子(一阶导数)
常见的梯度算子的模板如下:
在这里插入图片描述
Roberts交叉梯度算子
具有对角优势的二维模板之一。
在这里插入图片描述
Prewitt算子
检测水平和竖直方向。
在这里插入图片描述
Sobel算子
与Prewitt模板类似,检测水平和竖直方向,但中心系数上使用一个权值2:
在这里插入图片描述
中心位置处使用2可以平滑图像。

用于检测对角线方向边缘的Prewitt和Sobel算子
在这里插入图片描述
小结:
1、Roberts算子边缘定位精确度高,但易丢失一部分边缘,由于图像没经过平滑处理,故不具备抑制噪声的能力。该算子对具有陡峭边缘且含噪声少的图像效果较好
2、Sobel算子和Prewitt算

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值