第十章 图像分割.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.2.1局部处理
连接边缘点的最简单的方法之一: 分析图像中每个点(x,y)的一个小邻域
(3*3,5*5)内像素的特点。 该点是 一个得到的边缘点。 依据事先预定的准则,将所有被认为是 相似的点连接起来,形成满足这些准则 的像素组成的一条边缘。
边缘像素相似性的两个主要性 质:
1生成的边缘像素的梯度算子的响应强度 2 梯度向量的方向。
10.5使用分水岭变换的分割
在地理学中,分水岭是指一个山脊,在 该山脊两边的区域中有着不同流向的水 系。
分水岭变换将在图象中找到汇水盆地和 脊线。在求解时,关键概念是将初始图 象变换成另一幅图象,在变换后,汇水 盆地就是我们想要识别的 对象或区域。
10.5.1使用距离变换的分水岭 分割
二值图像的距离变换是一个相对简单的 概念:它是每一个像素到最近非零值像 素的距离。
1找到亮度的一阶导数在幅度上比指定的 阈值大的地方。
2找到亮度的二阶导数有零交叉的地方。
[g,t]=edge(f,’method’,parameters) Method: Sobel/Prewitt/Roberts/Laplacian of a
Gaussian(LOG)/Zero crossing/Canny Parameter: Thresh,
区域,满足:
n
Ri R
i 1
R 是一个连通区域,i 1,2,...,n
Ri R j , 对所有的i, j,i j P(Ri ) TRUE, 对i 1,2,...,n P(Ri R j ) FALSE, 对任何区域Ri和R j
10.4.2区域生长
预先定义生长的准则,将像素或子区域 合成较大的区域。
g:分割后的图象
NR:不同区域的数目,SI:一幅包含有 种子点的图像,TI:一幅包含在进行连通 性处理之前通过阈值测试的像素的图象。
例:区域生长对焊接孔隙检测 的应用
f=imread('regiongrowimage.tif'); imshow(f); imhist(f); [g,NR,SI,TI]=regiongrow(f,255,65); figure,imshow(g); figure,imshow(SI); figure,imshow(TI);
参数空间坐标 ( i, j ) 相关的方形。
最初这些单元置为0。然后对于平面上的 每一个非背景点变换到参数空间。将对 应位置的累加器加1。
累加器的值意味着xy平面上有多少个点 共线。
例:Hough变换
f=imread('houghtrans.tif'); imshow(f); H=hough(f); figure,imshow(H,[]);
函数houghpeaks得到Hough变换的峰值点 [r,c,hnew]=houghpeaks(h,numpeaks,
threshold,nhood) h:Hough变换矩阵 numpeaks:指定要寻找的最大峰 threshold:阈值以下的认为不是峰 nhood:抑制的邻域大小
函数houghpixels找到图像中影响到峰 值的每一个非零值点的位置。
函数houghlines采用一些策略,将位置 相关的像素组合成线段。
10.3阈值处理
10.3.1全局阈值处理 步骤: 1)为T选一个初始估计值 2)使用T分割图像,产生两组像素
G1,G2
3) 计算G1和G2范围内的像素的平均亮 度值u1,u2,
4)计算新阈值T=(u1+u2)/2;
4,0.10],1.5); figure,imshow(g_canny_best);
10.2边缘连接和边界检测
在得到的边缘上的像素点,由于噪声, 不均匀光照的影响而产生的边缘间断, 使得一组像素很少能完整地描绘一条边 缘。
使用边缘检测算法后,紧跟着使用连接 过程将边缘像素组合成有意义的边缘。
给出坐标轴显示参数空间
[H,theta,rho]=hough(f); figure,imshow(theta,rho,H,[],'notr
uesize'); axis on,axis normal; xlabel('\theta'),ylabel('\rho');
使用Hough变换作线检测和连 接
指定一个较高的阈值将弱边缘去掉 gv=edge(f,'sobel',0.15,'vertical'); figure,imshow(gv); 产生水平和垂直边缘 gboth=edge(f,'sobel',0.15,'both'); figure,imshow(gboth);
利用直线的斜截式公式
yi axi b b xi a yi
在参数空间中,相交的直线表示在xy平 面中两点共线。
为了表示垂直的情况,使用直线标准表 达
x cos y sin
Hough变换将 参数空间细分为了
累加器单元。坐标为(i,j)的单元,对应
10.3.2局部阈值处理
针对背景照明不均匀时,全局阈值处理 可能无效。针对照明问题作预处理进行 补偿,同时使用形态学变换对图像进行 处理。
使用局部变化的阈值函数对图像进行阈 值处理。
10.4基于区域的分割
分割的目的是把图象分成区域。区域内 部像素具有相似性
10.4.1基础公式 用R表示整个图象区域,将R分成n个子
f (x, y) f (x0 , y0 wk.baidu.com E
(x, y) (x0 , y0 ) A
如果同时满足这两个条件,则将边缘连接起来, 在图像的每个位置重复这样的操作。
10.2.2通过Hough变换进行整 体处理
根据给定图像上的一个点集,如何找到 位于直线上的所有点的子集?
第十章 图像分割
异常图像的分割是图像处理中最困难的 任务之一。精确的分割决定着计算分析 过程的成败。
因此,应该对提高稳定分割的可能性予 以特别关注。
图像分割算法主要基于图像亮度值的两 个基本特性:
1不连续性(图像的边缘)
2相似性(预先定义准则将图像分割为相 似区域:门限处理、区域生长、区域分 离和聚合)
函数edge不能计算+-45度边缘,如要计 算这些边缘,需要制定模板,并使用函数 imfilter
w45=[-2 -1 0;-1 0 -1; 0 1 2]; %w45=[0 1 2;-1 0 -1;-2 -1 0]; g45=imfilter(double(f),w45,'replicate'); T=0.03*max(abs(g45(:))); g45=g45>=T; figure,imshow(g45);
D=bwdist(f) 值为1 的像素的距离变换为0
11000 11000 00000 00123 00123 1 1 1.4 2
gbot=g(end-119:end,end-119:end); gbot=pixeldup(gbot,4); figure,imshow(gbot,[]); g=abs(g); figure,imshow(g,[]); T=max(g(:)); g=g>=T; figure,imshow(g);
Sobel,LoG,Canny边缘检测器 比较
f=imread('edgedetect.tif'); imshow(f); [g_sobel_default,ts]=edge(f,'sobel'); figure,imshow(g_sobel_default); [g_log_default,tlog]=edge(f,'log'); figure,imshow(g_log_default); [g_canny_default,tc]=edge(f,'canny'); figure,imshow(g_canny_default);
g_sobel_best=edge(f,'sobel',0.05); figure,imshow(g_sobel_best); g_log_best=edge(f,'log',0.003,2.25
); figure,imshow(g_log_best); g_canny_best=edge(f,'canny',[0.0
direction:’horizontal’/’vertical’/’both’ Sigma:标准差 g:2值结果。t:阈值
例:使用Sobel模板提取边缘
f=imread('edgedetect.tif'); imshow(f); [gv,t]=edge(f,'sobel','vertical'); figure,imshow(gv); t
10.1.2线检测
模板 -1 -1 -1 2 2 2 -1 -1 -1
-1 -1 2 -1 2 -1 -1 2 -1 -1 2 -1 2 -1 -1 -1 2 -1
2 -1 -1 -1 2 -1 -1 -1 2
水平
+45度 垂直 -45度
f=imread('linedetect.tif'); imshow(f); w=[2 -1 -1;-1 2 -1;-1 -1 2]; g=imfilter(double(f),w); figure,imshow(g,[]) gtop=g(1:120,1:120); gtop=pixeldup(gtop,4); figure,imshow(gtop,[]);
10.1.3边缘检测
边缘检测对于灰度级间断的检测是最为 普遍的检测方法。
利用微分方法求边缘 注意:导数受噪声的影响非常之大。 Sobel,Prewitt,Roberts Laplacian,LOG
使用edge函数的边缘检测
边缘检测的基本意图是使用如下两个基 本准则之一在图像中找到亮度快速变化 的地方
由一个或多个开始点组成的集合的选择 通常要基于问题的性质。
当没有先验信息可用时,一种处理方法 是在每个像素上计算同一组属性,在生 长过程中,这些属性将像素分配到不同 区域。
相似性准则的选择不但依赖于所考虑的 问题,而且依赖于可用的图象数据类型。
但图象为单色图像时,图像分析应该用 一组基于灰度级和空间性质的描述符来 执行。
5)重复步骤2-4,直到迭代中的T的差比 预先指定的参数T0小为止。
函数graythresh实现全局阈值, 使用Otsu方法
T=graythresh(f); f=imread('globalthreshold.tif'); imshow(f); T=graythresh(f); g=f<=T*255; figure,imshow(g);
10.1间断检测 10.2边缘连接和边界检测 10.3阈值处理 10.4基于区域的分割 10.5使用分水岭变换的分割
10.1间断检测
数字图像中有三种基本类型的灰度级间 断:点,线和边缘。
10.1.1点检测
模板进行检测
-1 -1 -1
|R|>T
-1 8 -1
-1 -1 -1
点检测
f=imread('pointdetect.tif'); imshow(f); w=[-1 -1 -1;-1 8 -1;-1 -1 -1 ]; g=abs(imfilter(double(f),w)); T=max(g(:)); g=g>=T; figure,imshow(g);
若在区域生长中没有使用连通信息,则 会产生错误结果。
区域生长的另一个问题是停止规则的表 达。一般来说,当不再有像素满足该区 域所包含的准则时,生长区域就会停止。
函数regiongrow实现区域生长。
[g,NR,SI,TI]=regiongrow(f,S,T)
S,T:是一个数组(与f大小相同)或一 个标量。