当前位置:文档之家› matlab图像的边缘检测

matlab图像的边缘检测

matlab图像的边缘检测
matlab图像的边缘检测

实验五图像的边缘检测

一、实验目的

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);

相关主题
文本预览
相关文档 最新文档