基于Sobel算子的数字图像边缘检测Word格式.docx
《基于Sobel算子的数字图像边缘检测Word格式.docx》由会员分享,可在线阅读,更多相关《基于Sobel算子的数字图像边缘检测Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
专业:
电子工程所属学院:
指导教员:
职称:
教授
实验室:
305-507实验日期:
2016.8.23-2016.9.2
一、综合设计目的
(1)掌握数字信号处理的基本概念、基本理论和基本方法;
(2)了解边缘检测的算法和用途,学习利用Sobel算子进行边缘检测的程序设计方法;
(3)完成图像边缘处理系统的设计和实现,分析处理性能;
(4)学会TMS320VC5509ADSP的程序设计方法。
二、综合设计要求
(1)在Matlab上独立编程实现通过Sobel算子的边缘检测;
(2)读懂DSP-CCS平台例程,自选图像修改例程实现边缘检测,对比Matlab仿真和DSP-CCS平台处理的结果。
(3)完成实验思考题
三、详细设计过程
1.设计原理分析;
Sobel边缘检测算子:
图像中的每个点都用这连个核做卷积,一个核对通常的垂直边缘相应最大,另一个对水平边缘相应最大。
两个卷积的最大值作为该点的输出位(下文我们统称为梯度)。
Prewitt边缘检测算子:
以上两个卷积核形成了Prewitt算子。
使用方法和Sobel算子一致,区别是系数不同。
2.设计方案和过程。
总体方案:
(1)选择图像灰度处理
这是程序运行的预处理,需要注意的Matlab仿真时,图像选取限制较小,在DSP-CCS平台处理时,注意图像选择要满足例程的空间要求,一般选择80*80尺寸图像。
(2)卷积计算得出梯度
把图像与Sobel算子的两个模板分别进行卷积,取卷积后较大值为该点的梯度。
上图显示了在只考虑水平边缘或垂直边缘的情况下的检测效果与实际效果的对比。
(3)二值处理计算阈值
把计算出的梯度归一化,然后带入Matlab中的graythresh函数,采用最大类间方差法获得阈值。
(4)高于阈值设为1,低于阈值设为0。
把二值图像显示出来即为边缘检测的最终结果。
3.改进与创新
(1)八方向Sobel算子
在原有中两个模板的基础上,又增加六个方向的模板,即45°
,135°
,180°
,225°
,270°
,315°
。
这样可以更加有效地检测图像多个方向边缘,使边缘信息更加完整。
(2)抗噪性能分析
通过在原图像中加入不同信噪比的高斯白噪声,观察边缘检测图像的变化,分析差别。
四、调试过程与结果分析
1.传统Sobel算子边缘检测效果展示
注:
上图中graythresh算子得出的阈值为0.2784
2.阈值不同时的结果对比。
通过手动调整阈值,我们可以发现,减小阈值,图像中线条增多,增大阈值,线条减少,实际情况中,课根据需要选择合适阈值。
3.Sobel算子与Prewitt算子对比
对于大部分图像,Sobel算子与Prewitt算子得出的结果差别不大。
4.八方向Sobel算子性能分析
实际效果,八方向Sobel算子边缘检测效果提升不明显,但是带来了巨大的内存和空间消耗。
此图显示了八方向Sobel算子的空间占用,实际计算时,需要的时间也比传统Sobel算子要长,考虑到其边缘检测效果提升不明显,后续我们没有采用这种方法。
5.抗噪性能分析
通过给图像加高斯白噪声来测试程序的抗躁性能。
加入信噪比为0.05的高斯白噪声:
几乎不受影响,但是也出现了一些杂点。
加入信噪比为0.5的高斯白噪声:
已经损失了一些信息,左侧后视镜已经看不见了。
加入信噪比为0.9的高斯白噪声:
可以发现右图已经基本上没有信息了,手动调整阈值:
将阈值调整为0.01后,原本的车在地面的阴影,后座都被误判为边界,但是车牌等重要信息被检测出来。
6.DSP-CCS平台实现
仿真时使用的奥迪车图片尺寸较大,无法移植,在CCS平台上,我们使用北大校徽和力帆车标做测试。
北大校徽仿真结果:
CCS平台处理结果:
力帆车标仿真结果:
通过两个例子,可以发现CCS平台处理的图像在转弯处,容易出现边缘缺失,可能是由于图片像素太低,精度不足造成的。
五、设计总结和体会
(1)本次实验,以Sobel算子为基础,对数字图像的边缘检测问题进行了一番探究。
实验表明,Sobel算子产生的边缘效果较好,在实际处理中,可根据具体情况采用不同的阈值。
改进的八方向Sobel算子边缘信息更全,但是产生了大量空间和时间消耗,一般不采用。
另外,Sobel算子对噪声具有一定的平滑作用。
(2)选题,分析,仿真,实现,是一般项目进行的主要步骤,好的仿真可以大大缩短实际操作所需要的时间,但是仿真过程中要考虑实际平台的计算能力和存储空间。
(3)本次实验,本组进度进行较快,但是后来看了其他同学的情况后,发现对方做的效果比我们好很多,才激励我们继续研究,找出抗噪性能的分析这一创新点。
启示我们,做研究过程中不要实现一点成绩就沾沾自喜,要保持谦虚,脚踏实地。
六、思考题解答
在CCS平台上,将Sobel算子改为Prewitt算子。
答:
Sobel算子核心代码如下:
其中
m_nWork1=x7+x8+x8-x2-x2-x3;
m_nWork2=x3+x6+x6-x4-x4-x7;
if(m_nWork1<
m_nWork2)
m_nWork1=m_nWork2;
m_nWork2=m_nWork1+x9-x1;
是卷积求梯度的核心代码,根据Prewitt的卷积阵,将此处改为以下代码即可。
m_nWork1=x7+x8-x2-x3;
m_nWork2=x3+x6-x4-x7;
全部代码见附程序Sobel.c和Prewitt.c
七、参考资料
[1]陈宇云.灰度图像的边缘检测研究[D].电子科技大学硕士学位论文.2009
[2]卢洋,张旭秀.图像边缘检测算法的对比分析与研究[J].太原科技.2009,(3):
17-18
[3]韩磊.MATLAB在数字图象处理中的应用[J].电脑知识与技术.2008,1
(1):
29-31
附录
1.transfer_1.m将彩色图转化为灰度图的小程序,在迁移到CCS平台处理时用到,Matlab平台仿真的程序中内嵌了这几行代码。
2.Sobel_1.m传统Sobel算子代码+手动阈值调整功能
3.Sobel_2.m八方向Sobel
4.Sobel_3.m将水平和垂直算子单独考虑与都考虑时的对比
5.Prewitt_1.m传统Prewitt
6.Sobel_prewitt.mSobel和Prewitt的对比+考虑高斯白噪声后的情况