边界探测
- 格式:docx
- 大小:766.45 KB
- 文档页数:6
边界探测实验报告
1.实验目标
通过Matlab/C等程序语言实现机器视觉中的边缘探测。
要求可以针对任一图像文件(例如JPG、JPEG、PNG等格式),实现读取和边界探测的处理,并将原图和处理之后的图片同时显示在一个窗口中,以便进行对比。
2.实现方法与思路
使用编程工具:matlab
实现原理:
1)颜色,这里采用的原理是颜色差异。
因为每个像素点的显示都是由红、绿、蓝构成的,红、绿、蓝的强度数值不同,导致最后的像素点的显示
不同。
因此,我们可以根据边缘与其周围颜色强度的不同进行识别。
2)差分算子,这里采用Sobel算子。
它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值。
3.程序实现
1)颜色
%胡世艳机械学院学号:3115001181
[filename,pathname]=
uigetfile({'*.*';'*.bmp';'*.JPEG';'*.png';'*jpg'},'select picture'); %选择图片路径
str=[pathname filename]; %合成路径+文件名
A=imread(str); %读取指定灰度图
[a,b]=size(A);%a,b分别等于矩阵A的行数和列数
B=double(A);
D=60*sin(1/255*B);%将矩阵A变为双精度矩阵将矩阵B进行线性变换
T=A;n=2;%新建与A同等大小矩阵
for p=2:a-1 %处理图片边框内的象素点
for q=2:b-1
if(D(p,q)-D(p,q+1))>n;
(D(p,q)-D(p+1,q))>n;
(D(p,q)-D(p-1,q))>n;
(D(p,q)-D(p-1,q+1))>n;
(D(p,q)-D(p+1,q-1))>n;
(D(p,q)-D(p-1,q-1))>n;
(D(p,q)-D(p+1,q+1))>n;
T(p,q)=0;%置边界点为黑色
else
T(p,q)=255;%置非边界点为白色
end;
end;
end;
subplot(1,3,1);%将窗口分割为两行一列,下图显示于第一行image(A);%显示原图像
title('处理前原图');%图释
axis image;%保持图片显示比例
axis off %取消坐标轴显示
subplot(1,3,2);%下图显示于第二行
image(T);%显示提取轮廓线后的图片
title('提取后图片1');%设置标题
axis image;
axis off %取消坐标轴显示
Q=A;n=2;%新建与A同等大小矩阵
for p=2:a-1 %处理图片边框内的象素点
for q=2:b-1
if(D(p,q)-D(p,q+1))>n;(D(p,q)-D(p,q-1))>n;
(D(p,q)-D(p+1,q))>n;
(D(p,q)-D(p-1,q))>n;
(D(p,q)-D(p-1,q+1))>n;
(D(p,q)-D(p+1,q-1))>n;
(D(p,q)-D(p-1,q-1))>n;
Q(p,q)=255;%置边界点为白色
else
Q(p,q)=0;%置非边界点为黑色
end;
end;
end;
subplot(1,3,3);%将窗口分割为两行一列,下图显示于第一行
image(Q);%显示原图像
title('提取后图片2');%设置标题
axis image;%保持图片显示比例
axis off %取消坐标轴显示
2)差分,Sobel算子
[filename,pathname]=
uigetfile({'*.*';'*.JPG';'*.JPEG';'*.png';'*jpg'},'select picture'); %选择图片路径
str=[pathname filename]; %合成路径+文件名
f=imread(str); %读取指定灰度图
f=rgb2gray(f);%转化成灰度图
f=im2double(f);%函数im2double 将其值归一化到0~1之间
val=get(handles.kj2,'value');
switch val
case 1 %使用垂直Sobcl箅子.自动选择阈值
[VSFAT Threshold]=edge(f, 'sobel','vertical'); %边缘探测
axes(handles.axes3)
imshow(VSFAT);
title( '差分(垂直图像边界探测)');%显示边缘探测图像
case 2 %使用水平和垂直Sobel算子,自动选择阈值
[VSFAT Threshold]=edge(f, 'sobel','vertical'); %边缘探测
SFST=edge(f,'sobel',Threshold);
axes(handles.axes3)
imshow(SFST);
title('差分(水平和垂直图像边界探测)');%显示边缘探测图像
case 3
[VSFAT Threshold]=edge(f, 'sobel','vertical'); %边缘探测
SFST=edge(f,'sobel',Threshold);%使用水平和垂直Sobel算子,自动选择阈值
s45=[-2 -1 0;-1 0 1;0 1 2];%使用指定45度角Sobel算子滤波器,指定阈值SFST45=imfilter(f,s45,'replicate');%功能:对任意类型数组或多维图像进行滤波。
SFST45=SFST45>=Threshold;
axes(handles.axes3)
imshow(SFST45);
title('差分(45度角图像边界探测)');
%显示边缘探测图像
End
4.结果
示例1
示例2
示例3 5.GUI界面
为方便用户在进行图片边界探测处理的时候,操作更为直观,设计了matlab/GUI用户操作界面。
图1 颜色1 图2 颜色2
图3 差分1 图4 差分2
6.讨论与总结
上图中的示例1、2是针对不同的图片得到的处理结果。
我们可以发现,对于示例1这种边界清晰的图片,处理的效果较好。
而对于示例2,由于边界不清晰,处理出来的效果较差。
GUI界面的设计使得用户能够根据要求自主选择边界探测的方式。
本实现的目的是能够掌握边界探测的原理和程序实现的方法,本程序的编写已经基本达到实验要求。