数字图像处理—图像分割
概述:
- 在对图像的研究和应用中,人们往往仅对图像中的某些部分感兴趣,这些部分一般称为目标或前景。
- 为了辨识和分析目标,需要将有关区域分离提取出来,在此基础上对目标进一步利用,如进行特征提取和测量。
- 图像分割就是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。
- 特性可以是灰度、颜色、纹理等,目标可以对应单个区域,也可以对应多个区域。
- 图像分割是图像识别和图像理解的基本前提步骤。
图像分割算法:基于亮度值的不连续性和相似性。
- 不连续性是基于亮度的不连续变化分割图像,如图像的边缘。
- 根据制定的准则将图像分割为相似的区域,如阈值处理、区域生长、区域分离和聚合。
(一)点、线和边缘检测
1.1 点检测
使用如下图所示的模板,如果:
则在模板中心位置检测到一个点。其中,T是阈值,R是模板计算值。
基本思想:如果一个孤立点与它周围的点不 同,则可以使用上述模板进行检测。
注意:如果模板响应为0,则表示在灰度级为常数的区域。
函数:
g = abs(imfilter(tofloat(f), w)) >= T;
其中,f 是输入图像,w 是适合点检测的模板,g 是包含检测点的图像。
f = imread('D:\数字图像处理\第十章学习\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;
subplot(1,2,1);imshow(f);title('(a)原图像');
subplot(1,2,2);imshow(g);title('(b)点检测');
分析:
图 (a)显示了一幅图像f,在球体的东北象限有一个几乎不可见的黑点,检测该点,在滤波后的图像g中选择最大值作为 T值。然后在g中寻找所有的g>=T的点。假设所有的点是孤立的镶嵌在恒定或是近似恒定的背景上。我们可识别能给出最大响应的点。因为在选择g中的最大值作为T值的情况下,在g中不存在比T值大的点。我们使用>=算子(代替=)定 义一致性。如图 (b)所示,其中有一个孤立点,该点使用 T值置为max(g (: ))且满足g>=T 的条件。
1.2 线检测
通过比较典型模板的计算值,确定一个点是否在某个方向的线上。
也可以设计其他模板:
- 模板系数之和为0。
- 感兴趣的方向系数值较大。
该模板对水平线有最大响应(水平模板)
该模板对45°方向线有最大响应(45°模板)
该模板对垂直线有最大响应(垂直模板)
该模板对-45°方向线有最大响应(135°模板)
用R1,R2,R3和R4分别代表水平、45°、垂直和 -45°方向线的模板响应,在图像中心的点,如果
|Ri|>|Rj|,j不等于i,则此点被认为与在模板i方向上的线更相关。
例:如果| R i R_i Ri|>| R j R_j Rj|,j=2,3,4,
则该点与水平线有更大的关联。
在灰度恒定的区域,上述4个模板的响应为零。
检测指定方向的线 :
f = imread('D:\数字图像处理\第十章学习\Fig1004(a).tif'); % 图像大小:486×486
w = [2 -1 -1;-1 2 -1;-1 -1 2]; % +45°方向检测线
g = imfilter(double(f),w);
gtop = g(1:120,1:120); % 左上角区域
gtop = pixeldup(gtop,4); % 通过复制像素将图像扩大gtop*4倍
gbot = g(end-119:end,end-119:end); % 右下角区域
gbot = pixeldup(gbot,4);
g1 = abs(g); % 检测图的绝对值
T = max(g1(:));
g2 = g1>=T;
subplot(3,2,1);imshow(f);title('(a)连线模板图像');
subplot(3,2,2);imshow(g,[]);title('(b)+45°线处理后的结果');
subplot(3,2,3);imshow(gtop,[]);title('(c)(b)中左上角的放大效果');
subplot(3,2,4);imshow(gbot,[]);title('(d)(b)中右下角的放大效果');
subplot(3,2,5);imshow(g1,[]);title('(e)(b)的绝对值');
subplot(3,2,6);imshow(g2);title('(f)满足g>=T的所有点');
分析:
- 图 (a)显示了一幅数字化(二值化)的电子线路连线模板的一部分。图像大小是486×486 像素。
- 在图 (b)中,比灰色背景暗一点的阴影与负值 相对应。在+45°方向上有两个主要线段,一个在左 上方,另一个在右下方(图©和图(d)显示了这 两个区域的放大的片段)。
- 注意,在图 (d)中,直线部分比图 ©中的线段要亮得多。原因是:图 (a)中右下方的部分只有一个像素宽,但左上方的部分不是。模板的响应对一个像素宽的部分比较强烈。
- 图(e)显示了图(b)的绝对值。因为我们对最强的响应感兴趣,所以令 T等于图像中的最大值。图 (f)以白色显示了满足条件g>=T的点,其中的 g是图(e)中的图像。
1.3 使用函数edge的边缘检测
边缘:
- 边缘是指图像中像元灰度有阶跃变化或屋顶状变化的那些像元的集合。
- 存在于目标与背景、目标与目标、区域与区域、基元与基元之间。
- 包含方向、阶跃性质、形状等信息。
- 是图像识别中抽取的重要属性,对图像识别和分析十分有用。
边缘的分类:
- 阶跃状:位于两边的像素灰度值有明显不同。
- 屋顶状:位于灰度值从增加到减少的转折处。
阶跃状边缘:
- 一阶导数为极值点
- 二阶导数为过零点
屋顶状边缘:
- 一阶导数为过零点
- 二阶导数为过极值点
边缘和导数(微分)的关系:
图解:边缘的一阶导数在图像由暗变亮的突变位置有一个正的峰值,而在图像由亮变暗的位置有一负的峰值,而在其他位置都为0。
分析:可用一阶导数的幅度值来检测边缘的存在,幅度峰值对应的一般就是边缘的位置,峰值的正或负就表示边缘处由暗变亮还是由亮变暗。同理,可用二阶导数的过0点检测图像中边缘的存在。二阶导数判断边缘像素在边缘亮的一边,还是暗的一边。
(a)梯度算子:
- 对于阶跃边缘,在边缘点处一阶导数有极值,因此可计算每个像元处的梯度来检测边缘点。
- 梯度的大小代表边缘的强度,梯度方向与边缘走向垂直。
函数f(x,y)在(x,y)处的梯度为一个向量:
梯度向量指向f变化率最大方向。
大小:
a(x,y)代表梯度向量在(x,y)处方向角。
边缘在(x,y)处方向与此点梯度向量方向垂直。
模板表示: