(4)Finally,thealgorithmperformsedgelinkingbyincorporatingtheweakpixelsthatare8-connectedtostrongpixels.
注意:
Edgefunctiondoesnotcomputeedgesat±450.Tocomputeedgesweneedtospecifythemaskanduseimfilter.
4.Hough变换
Inpractice,theresultingpixelsproducedbythemethodsdiscussedintheprevioussectionsseldomcharacterizeanedgecompletelybecauseofnoise,breaksfromnonuniformillumination,andothereffectsthatintroducespuriousdiscontinuities.HoughTransformisonetypeoflinkingproceduretofindandlinklinesegmentsforassemblingedgepixelsintomeaningfuledges.
AbouttheprincipleofHoughtransform,pleaserefertopage586intextbook.
InstanceofHoughtransform:
%constructinganimagecontaining5isolatedforegroundpixelsinseverallocaitons:
f=zeros(101,101);
f(1,1)=1,f(101,1)=1,f(1,101)=1,f(101,101)=1,f(51,51)=1;
[H,theta,rho]=hough(f);%houghtransform
imshow(theta,rho,H,[],'notruesize');
axison,axisnormal;
xlabel('\theta'),ylabel('\rho');
●图象分割
图像分割是将图像划分成若干个互不相交的小区域的过程,小区域是某种意义下具有共同属性的像素的连通集合。
如不同目标物体所占的图像区域、前景所占的图像区域等。
连通是指集合中任意两个点之间都存在着完全属于该集合的连通路径。
单色(灰度)图像的分割通常是基于图像强度的两个基本特征:
灰阶值的不连续性和灰度区域的相似性。
第一类方法主要是基于图像灰阶值的突然变换(如边缘)来分割图像,而第二类方法主要是把图像的某个子区域与某预定义的标准进行比较,以二者之间的相似性指标为指导来划分图像区域:
如阈值化技术、面向区域的方法、形态学分水岭分割算法等。
1.双峰法
先给出原图的直方图,再定出阈值(门限)T,一般取两个峰值间的谷值。
2.P参数法
这种方法用于目标所占图像面积已知的情况。
设目标在最简单图像f(i,j)中所占的面积s0与图像面积s之比为P=s0/s,则背景所占面积比为1-P=(s-s0)/s。
一般来说,低灰度值为背景,高灰度值为目标。
如果统计图像f(i,j)灰度值不大于某一灰度t的像元数和图像总像元数之比为1-p时,则以t为阈值。
3.自适应全局阈值(单阈值)
算法步骤如下:
1、初始化阈值T(一般为原图像所有像素平均值)。
2、用T分割图像成两个集合:
G1和G2,其中G1包含所有灰度值小于T的像素,G2包含所有灰度值大于T的像素。
3、计算G1中像素的平均值m1及G2中像素的平均值m2。
4、计算新的阈值:
T=(m1+m2)/2。
5、如果新阈值跟原阈值之间的差值小于一个预先设定的范围,停止循环,否则继续2-4步。
全局单阈值分割只适用于很少的图像。
对一般图像采用局部阈值法或多阈值法会得到更好的效果
4.最大类间方差法(OTSU)
设有M-1个阈值:
0≤k1<k2<…<KM-1≤L-1。
将图像分割成M个灰度值的类Cj,(Cj∈[kj-1+1,…,kj];j=1,2,…,M;k0=0,kM=L),则各类Cj的发生概率ωj和平均值μj为
(3-1)
(3-2)
式中,ω(0)=0,μ(0)=0。
由此可得各类的类间方差为
(3-3)
将使上式的σ2值为最大的阈值组(k1,k2,…,kM-1),作为M值化的最佳阈值组。
若取M为2,即分割成2类,则可用上述方法求出二值化的阈值。
三.实验提示
1.MATLAB的图像处理工具箱中提供的edge函数可以实现检测边缘的功能,其语法格式如下:
BW=edge(I,’sobel’)
BW=edge(I,’sobel’,thresh,direction)
BW=edge(I,‘Roberts’)
BW=edge(I,’log’)
BW=edge(I,’log’,thresh,sigma)
BW=edge(I,‘canny’)
BW=edge(I,’canny’,thresh,sigma)
这里BW=edge(I,'sobel')采用Sobel算子进行边缘检测。
BW=edge(I,'sobel',direction)可以指定算子方向,即:
direction=’horizontal’,为水平方向;
direction=‘vertical‘,为垂直方向;
direction=‘both‘,为水平和垂直两个方向。
BW=edge(I,'canny',thresh,sigma)和BW=edge(I,'log',thresh,sigma)分别为用canny算子和拉普拉斯高斯算子进行边缘检测。
选项’log’和’canny’的Sigma默认值分别为2.0和1.0。
例:
用三种算子进行边缘检测。
I=imread('eight.tif');
imshow(I)
BW1=edge(I,'roberts');
figure,imshow(BW1),title('用Roberts算子')
BW2=edge(I,'sobel');
figure,imshow(BW2),title('用Sobel算子')
BW3=edge(I,'log');
figure,imshow(BW3),title('用拉普拉斯高斯算子')
2.也可以通过滤波方式实现图像的图象边缘,如拉普拉斯模板(有好几个):
i=imread('w01.tif')
I=doubole(i);
h=[0,1,0;1,-4,0;0,1,0]
j=conv2(I,h,’same’);
k=I-j;
imshow(k,[]);
3.I>T结果为一个逻辑值矩阵,I中大于T的值对应的位置为1(真),其余位置为0(假)。
I(I>T)表示I中所有大于T的值组成的向量。
255*(I>T)+0*(I<=T)可将I中大于T的像素值设为255,小于等于T的像素值设为0。
四、练习
1点、线和边缘检测
1.1.1点检测
点检测模板w:
-1
-1
-1
-1
8
-1
-1
-1
-1
检测方法:
g=abs(imfilter(double(f),w))>=T
练习1
f=imread(‘moon.tif’);
w=[-1-1-1;-18-1;-1-1-1];
g=abs(imfilter(double(f),w));
T=max(g(:
));
T=T*0.5;
g=g>=T;
imshow(f);figure,imshow(g);
1.1.2线检测
水平模板、+45度模板、垂直模板、-45度模板。
练习2
f=imread(‘circbw.tif’);
imshow(f);
w=[2-1-1;-12-1;-1-12];
g=abs(imfilter(double(f),w));
figure,imshow(g);
1.1.3使用edge函数的边缘检测
语法:
[g,t]=edge(f,‘method’,parameter)
说明:
g是一个逻辑数组,其值为:
在f中检测到边缘的位置为1,其他位置为零;t是edge是用的阈值;method为边缘监测器方法,可选为:
‘sobel’,‘prewit’,‘roberts’,‘log’(LoG),‘zerocoss’,‘canny’等;parameter包含两部分:
T为指定的阈值,第二部分为dir(检测边缘的首选方向:
‘horizontal’,‘vertical’,‘both’),或sigma(标准方差),或H(指定的滤波函数)。
练习3
f=imread(‘rice.tif’);
imshow(f);
[gsobel,t]=edge(f,‘sobel’);
figure,imshow(gsobel);
[glog,t]=edge(f,‘log’);
figure,imshow(glog);
[gcanny,t]=edge(f,‘canny’);
figure,imshow(gcanny);
2.2使用Hough变换的线检测
练习4
设计与实现一个基于Hough变换的直线检测器。
2.3阈值处理
2.3.1全局阈值处理
语法:
T=graythresh(f)
说明:
T是阈值,归一化为0至1之间的值。
2.3.2局部阈值处理
通过一个形态学顶帽算子并对得到的结果使用graythresh来计算。
练习5
f=imread(‘moon.tif’);
imshow(f);
T=graythresh(f);
g=f>=T;
figure,imshow(g);
2.4基于区域的分割
2.4.1区域生长
2.4.2区域分裂和合并
练习6
设计与实现一个基于区域生长的分割程序。
2.5使用分水岭变换的分割
练习7
f=imread(‘cell.tif’);
imshow(f);
g=im2bw(f,graythresh(f));
figure,imshow(g);
gc=~g;
D=bwdist(gc);
L=watershed(-D);
w=L==0;
g2=g&~w;
figure,imshow(g2);
2.6分割后处理
语法:
BW2=bwfill(BW1,c,r,n)
说明:
填充二进制图像的背景色。
(形态学处理)
练习8
BW1=[10000000
11111000
10001010
10001110
11110111
10011010
10001010
10001110]
BW2=bwfill(BW1,3,3,8)
I=imread('blood1.tif');
BW3=~im2bw(I);
BW4=bwfill(BW3,'holes');
imshow(BW3)
figure,imshow(BW4)
语法:
bwareaopen
说明:
二进制图像区域打开,清除小物体。
五.部分参考程序和参考结果
1.房屋轮廓描绘
代码:
f=imread('Fig1006(a)(building).tif');
[gv,t]=edge(f,'sobel','vertical');%usingthresholdcomputedautomatically,heret=0.0516
subplot(231);imshow(f,[]);
title('theoriginalimage');
subplot(232);imshow(gv,[]);
title('verticaledgewiththresholddeterminedautomatically');
gv1=edge(f,'sobel',0.15,'vertical');%usingaspecifiedthreshold.
subplot(233);imshow(gv1,[]);
title('verticaledgewithaspecifiedthreshold');
gboth=edge(f,'sobel',0.15);%edgedetectionoftwodirections
subplot(234);imshow(gboth,[]);
title('horizontalandverticaledge');
%edgedetectionof450directionusingimfilterfunction
w45=[-2-10;-101;012];
g45=imfilter(double(f),w45,'replicate');
T=0.3*max(abs(g45(:
)));
g45=g45>=T;
subplot(235);imshow(g45,[]);
title('edgeat45withimfilter');
wm45=[012;-101;-2-10];
g45=imfilter(double(f),wm45,'replicate');
T=0.3*max(abs(g45(:
)));
g45=g45>=T;
subplot(236);imshow(g45,[]);
title('edgeat-45withimfilter');
另一个实验:
为比较三种检测方法的相对性能:
Sobel,LoG和Cannyedgedetectors,和为了改善检测效果所需使用的技巧。
%usingthedefaultthreshold
f=imread('Fig1006(a)(building).tif');
[gs_default,ts]=edge(f,'sobel');%ts=0.074
[gl_default,tl]=edge(f,'log');%tl=0.002andthedefaultsigma=0.2
[gc_default,tc]=edge(f,'canny');%tc=[0.01890.047]andthedefaultsigma=0.1
%usingtheoptimalthresholdacquiredbymanualtest
gs_best=edge(f,'sobel',0.05);
gl_best=edge(f,'log',0.003,2.25);
gc_best=edge(f,'canny',[0.040.1],1.5);
Theleftcolumninabovefigureshowstheedgeimagesobtainedusingthedefaultsyntaxforthe‘sobel’,‘log’and‘canny’operatorrespectively,whereastherightcolumnaretheresultsusingoptimalthresholdandsigmavaluesobtainedbytry.
2.Hough变换用于线检测从而增强边缘的连续性
2.1Houghtransformforpeakdetection
PeakdetectionisthefirststepinusingHoughtransformforlinedetectionandlinking.However,findingameaningfulsetofdistinctpeaksinaHoughtransformcanbechallenging.BecauseofthequantizationinspaceofthedigitalimageandinparameterspaceoftheHoughtransform,aswellasthefactthatedgesintypicalimagesarenotperfectlystraight,HoughtransformpeakstendtolieinmorethanoneHoughtransformcell.Onestrategytoovercomethisproblemisfollowing:
(1)findt