图像分割与边缘检测
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.在分析几种典型的边缘检测方法的基础上,设计一种通用的边缘特征检测方法,使之具有上述算子的功能。