图像分割与边缘检测

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一、图像分割与边缘检测

一、实验目的

依据边缘检测的理论,实现灰度图像一阶和二阶边缘检测方法,启发学生依据边缘特征进行图像分析与识别,提高学生图像处理与分析能力和实际动手能力。

二、实验内容

1 编程实现一阶差分边缘检测算法,包括Roberts梯度算子、Prewitt算子和Sobel算子。

2 编程实现二阶差分Laplace边缘检测算法。

3 分析与比较各种边缘检测算法的性能。

三、实验原理

1 基本原理分析(略)

2 部分源程序

1)clc all;

[I,map]=imread('rice.png');

figure;

subplot(3,2,1),imshow(I,map);

I=double(I);

[IX IY]=gradient(I);

GM=sqrt(IX.*IX+IY.*IY);

OUT1=GM;

subplot(3,2,2);imshow(OUT1,map);

OUT2=I;

J=find(GM>=10);

OUT2(J)=GM(J);

subplot(3,2,3),imshow(OUT2,map);

OUT3=I;

J=find(GM>=10);

OUT3(J)=255;

subplot(3,2,4),imshow(OUT3,map);

OUT4=I;

J=find(GM<=10);

OUT4(J)=255;

subplot(3,2,5),imshow(OUT4,map);

OUT5=I;

J=find(GM>=10);

OUT5(J)=255;

Q=find(GM<10);

OUT5(Q)=0;

subplot(3,2,6),imshow(OUT5,map);

2) I = imread('coins.png');

BW1 = edge(I,'roberts');

BW2 = edge(I,'prewitt');

BW3 = edge(I,'sobel');

BW4 = edge(I,'log');

BW5 = edge(I,'canny');

figure

subplot(3,2,1);imshow(I),title('原图像');

subplot(3,2,2);imshow(BW1),title('robert图像');

subplot(3,2,3);imshow(BW2);title('prewitt图像');

subplot(3,2,4);imshow(BW3);title('sobel图像');

subplot(3,2,5);imshow(BW4);title('log图像');

subplot(3,2,6);imshow(BW5);title('canny图像');

3) clc;

clear all;

I = imread('coins.png');

h=[1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9];

I=conv2(I,h,'same');

I=medfilt2(I,[3,3]);

R_l=[-1,0;0,1];

R_h=[0,-1;1,0];

BW_l=conv2(I,R_l,'same');

BW_h=conv2(I,R_h,'same');

BW=sqrt(BW_l.*BW_l+BW_h.*BW_h);

[row col]=size(BW);

for i=1:row

for j=1:col

if BW(i,j)>10

BW(i,j)=1;

else

BW(i,j)=0;

end

end

end

figure;

subplot(2,1,1);imshow(BW);title('roberts边缘检测');

P_l=[-1,0,1;-1,0,1;-1,0,1];

P_h=[-1,-1,-1;0,0,0;1,1,1];

BW_l=conv2(I,P_l,'same');

BW_h=conv2(I,P_h,'same');

BW2=sqrt(BW_l.*BW_l+BW_h.*BW_h);

[row col]=size(BW2);

for i=1:row

for j=1:col

if BW2(i,j)>15

BW2(i,j)=1;

else

BW2(i,j)=0;

end

end

end

subplot(2,1,2);imshow(BW2);title('prewitt边缘检测');

4) I = imread('coins.png');

imshow(I)

BW = im2bw(I);

imview(BW)

dim = size(BW)

col = round(dim(2)/2)-90

row = min(find(BW(:,col)))

boundary = bwtraceboundary(BW,[row, col],'N')

imshow(I)

hold on;

plot(boundary(:,2),boundary(:,1),'g','LineWidth',1);

四、实验仪器

1计算机;

2 MA TLAB程序;

五、实验报告内容

1叙述实验过程;

2提交实验的原始图像和结果图像。

六、思考题

1.利用一阶导数和二阶导数特性检测图像边缘,分析检测结果的主要区别。

2.在分析几种典型的边缘检测方法的基础上,设计一种通用的边缘特征检测方法,使之具有上述算子的功能。

相关文档
最新文档