一.实验目的:
1.掌握点、线检测的模板、基本原理和方法。 2.掌握使用edge函数进行边缘检测的技术。
二.实验内容:
1.构造点、线、边缘检测的模板
1.利用MATLAB标准函数edge进行点、线、边缘检测
三.实验原理:
1.点检测
使用以前学过的MATLAB标准函数imfilter运用点检测模板进行孤立点的检测。
嵌在常数区域(或图像中亮度基本不变的区域)中的孤立点检测,使用下列模板:
若|R| >= T,则就说在掩模的中心位置已检测出了一个孤立的点。显然,当掩模的中心点位于一个孤立点时,其模板的的相应最强,而在亮度不变的区域中响应为零。
>> w = [-1 -1 -1; -1 8 -1; -1 -1 -1] >> g = abs(imfilter(double( f )), w) >> T = max( g(:) ) >> g = g >= T >>imshow(g)
2. 线检测
>> w = [2 -1 -1; -1 2 -1; -1 -1 2] %建立-45度方向线检测模板
>> g = imfilter(double(f), w) %注意与f没有转换为double型的对比 >> imshow(g, [ ]) %Fig.10.4(b)
>> gtop = g(1:120, 1:120) %取出一个子图像
>> gtop = pixeldup(gtop, 4) %放大4倍,原图像大小 >> fugure, imshow(gtop, [ ]) %Fig.10.4(c) >> gbot = g(end-119 : end, end-119 : end) >> gbot = piexldup(gbot, 4)
>> figure, imshow(gbot, [ ]) %Fig.10.4(d) >> g = abs(g)
>> figure, imshow(g, [ ]) %Fig.10.4(e) >> T = max(g(:)) >> g = g >= T
>> figure, imshow(g) %Fig.10.4(f)
3. 边缘检测
使用edge函数进行边缘检测,依据是一阶和二阶导数。
Sobel检测器的调用语法:
[g t] = edge(f, ‘sobel’, T, dir)
T是一个指定的阈值,dir指定检测边缘的首选方向: ‘horizontal’、’vertical’或’both’(默认值)。g在被检测到的边缘的位置处为1而在其它位置为0的逻辑类图像。输出参数t是可选的,它是edge函数所用的阈值。若指定了T的值,则t = T,否则,若T为空,则函数edge会令t等于它自动确定的一个阈值,然后用于边缘检测(阈值化)。
Prewitt检测器的调用语法:
[g t] = edge(f, ‘sobel’, T, dir)
Roberts检测器的调用语法:
[g t] = edge(f, ‘sobel’, T, dir)
>> [gv t] = edge(f, ‘sobel’, ‘vertical’) >> imshow(gv)
>> [gv t] = edge(f, ‘sobel’, 0.15, ‘vertical’) %指定一个较高的阈值,把弱一些
的边缘去掉
>> figure, imshow(gv)
>> gboth = edge(f, ‘sobel’, 0.15)
函数edge不能计算正负45度的Sobel边缘,需要我们自己建立模板并使用函数imfilter。
>> w45 = [-2 -1 0; -1 0 -1; 0 1 2] %正45度检测模板
>> g45 = imfilter(double(f), w45) % 比较g45 = imfilter(f, w45) >> figure, imshow(g45) >> g45 = abs(g45)
>> T = 0.3*max(g45(:)) >> g45 = g45 >= T
>> figure, imshow(g45)
四.实验报告:
1.对图像single_pixel.bmp进行点检测。
2.对图像wirebond.bmp进行正45度线检测。 3.用sobel,Prewitt检测器进行水平、垂直边缘检测,使用-45度掩模[0 1 2; -1 0 1; -2 -1 0] sobel检测器进行-45方向边缘检测。
因篇幅问题不能全部显示,请点此查看更多更全内容