实验五图像的边缘检测
一、实验目的
1、理解图像边缘提取的基本概念;
2、熟悉进行边缘提取的基本方法;
3、掌握用MA TLAB语言进行图像边缘提取的方法。
二、实验原理
图像理解是图像处理的一个重要分支,他研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。
三、实验要求
1、读取MATLAB图像处理工具箱中提供的rice.tif这幅图像,并显示。
2、分别用Roberts、Sobel和拉普拉斯高斯算子对图像进行边缘检测。比较三种算子处
理的结果。
A=imread('E:\1\rice.tif');
subplot(2,2,1);imshow(A);
BW1=edge(A,'sobel');
BW2=edge(A,'roberts');
BW3=edge(A,'log');
subplot(2,2,2);imshow(BW1),title('用Roberts算');
subplot(2,2,3);imshow(BW2),title('用Sobel算子');
subplot(2,2,4);imshow(BW3),title('用拉普拉斯高斯算子');
3、用不同方向(‘水平’、‘垂直’、‘水平和垂直’)的Sobel算子对图像进行边缘检测。
比较三种情况的结果。
A=imread('E:\1\rice.tif');
subplot(2,2,1);imshow(A),title('原图像');
BW1=edge(A,'sobel','horizontal');
BW2=edge(A,'sobel','vertical');
BW3=edge(A,'sobel','both');
subplot(2,2,2);imshow(BW1),title('水平方向');
subplot(2,2,3);imshow(BW2),title('垂直方向');
subplot(2,2,4);imshow(BW3),title('水平和垂直两个方向');
4、(选做内容)读取其它图像,重复2,3要求。
A=imread('E:\1\girl.bmp');
figure(1),subplot(2,2,1);imshow(A),title('原图像');
BW1=edge(A,'sobel');
BW2=edge(A,'roberts');
BW3=edge(A,'log');
figure(1),subplot(2,2,2);imshow(BW1),title('用Roberts算');
figure(1),subplot(2,2,3);imshow(BW2),title('用Sobel算子');
figure(1),subplot(2,2,4);imshow(BW3),title('用拉普拉斯高斯算子');
B=edge(A,'sobel','horizontal');
C=edge(A,'sobel','vertical');
D=edge(A,'sobel','both');
figure(2),subplot(2,2,1);imshow(A),title('原图像');
figure(2),subplot(2,2,2);imshow(BW1),title('水平方向');
figure(2),subplot(2,2,3);imshow(BW2),title('垂直方向');
figure(2),subplot(2,2,4);imshow(BW3),title('水平和垂直两个方向');
5、(选做内容)自编程序,实现边缘检测处理。
[F,MAP]=imread('E:\1\girl.bmp');
f=double(F);
[m,n]=size(f);
g=zeros(m,n);
for i=2:m-1
for j=2:n-1
DX=(f(i+1,j-1)-f(i-1,j-1))+2*(f(i+1,j)-f(i-1,j))+(f(i+1,j+1)-f(i-1,j+1));
DY=(f(i-1,j+1)-f(i-1,j-1))+2*(f(i,j+1)-f(i,j-1))+(f(i+1,j+1)-f(i+1,j-1));
g(i,j)=round(sqrt(DX*DX+DY*DY));
end
end
G=uint8(g);
subplot(1,2,1), imshow(F,MAP), title('原图像');
subplot(1,2,2), imshow(G,MAP), title('取边缘');
5、图像分割
clear;
I=imread('E:\1\girl.bmp','bmp');
[x,map]=imread('E:\1\girl.bmp');
h0=imhist(I);
h=h0';
j=0;k=0;
q0=inf;
for th0=1:size(h,2)
for i=1:size(h,2)
if h(i) j=j+1; c1(j)=h(i); else k=k+1; c2(k)=h(i); end end N1=j; N2=k; N=N1+N2; a1=var(c1); a2=var(c2); p1=N1/N; p2=N2/N; q=p1*a1+p2*a2; if q th=th0; end q0=q; j=0;k=0; end x1=double(x); g1=x1; for i=1:size(x,1) for j=1:size(x,2) if x1(i,j) g1(i,j)=0; else g1(i,j)=256; end end end g=uint8(g1); subplot(1,2,2);imshow(g,map); subplot(1,2,1);imshow(x,map);