《数字图像处理》综合性实验报告.doc

上传人:飞****2 文档编号:78973410 上传时间:2023-03-19 格式:DOC 页数:13 大小:322KB
返回 下载 相关 举报
《数字图像处理》综合性实验报告.doc_第1页
第1页 / 共13页
《数字图像处理》综合性实验报告.doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《《数字图像处理》综合性实验报告.doc》由会员分享,可在线阅读,更多相关《《数字图像处理》综合性实验报告.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、数字图像处理综合性实验灰度图像边缘检测题 目:班 级: 学生姓名: 学生学号: 指导老师: 提交时间: 成 绩:华南农业大学 信息学院一、实验目的 1.掌握各种边缘检测算子的概念及原理。2.掌握各种边缘检测算子的算法。3.掌握各种边缘检测算子VC+实现的编制技巧。4.启发学生依据边缘特征进行图像分析与识别,提高学生图像处理与分析能力和实际动手能力。二、实验内容1.编程实现以下六种图像边缘检测算子。(1)Roberts边缘算子(2)Sobel边缘算子(3)Prewitt边缘算子(4)拉普拉斯边缘算子(5)Kirsch边缘算子(6)高斯-拉普拉斯边缘算子2.根据检测结果,分析与比较各种边缘检测算法

2、的主要区别。三、实验要求 1.熟练利用VC+编程实现六个图像边缘检测算子2.选取最优阈值或近似最优阈值实现图像二值化3.通过对比检测效果,对比分析六个检测算子四、实验原理 算法思想及原理:就是基于算子模板的卷积过程,比如有一张8x8的图片,像素矩阵如下:1223522111000120000002564547545412564547545412564547545412564547545412564547545412564547545412又有一个3x3的算子模板矩阵如下:0-10-14-10-10整个模板卷积过程就是用模板覆盖在像素矩阵上,重新计算像素值并移动的过程。如下图即为模板盖住左上角的

3、示例。1223522111000120000002564547545412564547545412564547545412564547545412564547545412564547545412计算方式为模板单元格的值与被模板覆盖的图像子矩阵的值分别相乘并求和,并把结果放在模板中央单元格所对应的图像矩阵单元格中。上图模板中央对应的单元格的值应为:12*0+23*(-1)+52*0+12*(-1)+0*4+0*(-1)+56*0+45*(-1)+47*0=-80。各算子模板如下:1. Roberts算子2. 拉普拉斯边缘算子3. Kirsch边缘算子4. 高斯-拉普拉斯算子5. Prewitt边

4、缘算子6. Sobel算子-1-2-1000121-101-202-101五、实验过程1. 编写一个通用的模板卷积函数,并将实际模板作为参数。2. 在CDib类里面实现对应的模板卷积函数及模板卷积矩阵(数组)。3. 为菜单添加边缘检测的相关菜单项并添加事件处理函数。4. 拿一张灰度的8位图测试并对比结果。六、实验结果及分析1. 下面是一些实验的结果及对比1.1 原图1.2 Roberts算子检测结果:1.3 Sobel算子结果:1.4 Prewitt边缘算子结果:1.5拉普拉斯边缘算子结果:1.6 Kirsch边缘算子结果1.7高斯-拉普拉斯算子结果:2. 结果分析通过以上实验结果对比可知,R

5、oberts算子和Sobel算子的检测结果是比较理想的,其中,Roberts算子的边缘非常清晰。而其他算子可以明显的看出边缘处有较多的杂点,不明朗。当然,这几个算子模板并没有谁好谁不好之分,只是应用领域不同。七、实验总结本次实验是在前面两次实验的基础上进行拓展的,故必须把前面打开和保存BMP、转灰度、直方图显示及均衡化的实验完善好。本次实验的完成还是相当顺利的,主要还是因为之前接触过MFC,对MFC的机制有些了解。考虑到图片处理效率等问题,我也发现VC+是非常适合做图片处理的。通过本次实验,我掌握了边缘检测算法,并实践了整个过程,感觉获益匪浅。当然,数字图像处理领域的知识体系是非常庞大的,边缘

6、检测只是其中很小的一个。实验过程还是遇到过一些难点的,比如24位真彩色图片转8位的灰度图片,必须重建调色板,重构数据区,修改文件头等,否则会出错。但这些问题都在后来反复实践过程中解决了。附录1:对应程序代码矩阵定义:const int sobel29=-1,-2,-1,0,0,0,1,2,1,-1,0,1,-2,0,2,-1,0,1,;const int kirsch89=-3,-3,5,-3,0,5,-3,-3,5,-3,5,5,-3,0,5,-3,-3,-3,5,5,5,-3,0,-3,-3,-3,-3,5,-3,-3,5,0,-3,5,-3,-3,5,5,-3,5,0,-3,-3,-3,

7、-3,-3,-3,-3,5,0,-3,5,5,-3,5,5,-3,5,0,-3,-3,-3,-3,-3,-3,-3,-3,0,5,-3,5,5;const int prewitt29=-1,0,1,-1,0,1,-1,0,1,-1,-1,-1,0,0,0,1,1,1,;const int roberts24=1,0,0,-1,0,1,-1,0,;const int laplace29=0,1,0,1,-4,1,0,1,0,1,1,1,1,-8,1,1,1,1,;const int gauss_Laplace25=-2,-4,-4,-4,-2,-4,0,8,0,-4,-4,8,24,8,-4,-

8、4,0,8,0,-4,-2,-4,-4,-4,-2,;相关实现:void CDib:Sobel()if (!IsGray()AfxMessageBox(请先将图像转换为8位灰度图像);return ;int nWidth=GetWidth();int LineBytes=GetLineBytes();int nHeight=GetHeight();BYTE * pData=GetData();BYTE * tmp = new BYTELineBytes * nHeight;memset(tmp,0,sizeof(BYTE)*LineBytes*nHeight);int k;for(k=0;k2

9、;+k)/sobel算子有两个模板Convolution(tmp,sobelk,3,3,true);memcpy(pData,tmp,sizeof(BYTE)*LineBytes*nHeight);/将处理完的数据赋给图像,用以显示delete tmp;void CDib:Roberts()if (!IsGray()AfxMessageBox(请先将图像转换为8位灰度图像);return ;int nWidth=GetWidth();int LineBytes=GetLineBytes();int nHeight=GetHeight();BYTE * pData=GetData();BYTE

10、* tmp = new BYTELineBytes * nHeight;memset(tmp,0,sizeof(BYTE)*LineBytes*nHeight);int k;for(k=0;k2;+k)Convolution(tmp,robertsk,2,2,true);memcpy(pData,tmp,sizeof(BYTE)*LineBytes*nHeight);/将处理完的数据赋给图像,用以显示delete tmp;void CDib:Prewitt()if (!IsGray()AfxMessageBox(请先将图像转换为8位灰度图像);return ;int nWidth=GetWid

11、th();int LineBytes=GetLineBytes();int nHeight=GetHeight();BYTE * pData=GetData();BYTE * tmp = new BYTELineBytes * nHeight;memset(tmp,0,sizeof(BYTE)*LineBytes*nHeight);int k;for(k=0;k2;+k)Convolution(tmp,prewittk,3,3,true);memcpy(pData,tmp,sizeof(BYTE)*LineBytes*nHeight);/将处理完的数据赋给图像,用以显示delete tmp;v

12、oid CDib:Kirsch()if (!IsGray()AfxMessageBox(请先将图像转换为8位灰度图像);return ;int nWidth=GetWidth();int LineBytes=GetLineBytes();int nHeight=GetHeight();BYTE * pData=GetData();BYTE * tmp = new BYTELineBytes * nHeight;memset(tmp,0,sizeof(BYTE)*LineBytes*nHeight);int k;for(k=0;k8;+k)Convolution(tmp,kirschk,3,3,

13、true);memcpy(pData,tmp,sizeof(BYTE)*LineBytes*nHeight);/将处理完的数据赋给图像,用以显示delete tmp;void CDib:Laplace()if (!IsGray()AfxMessageBox(请先将图像转换为8位灰度图像);return ;int nWidth=GetWidth();int LineBytes=GetLineBytes();int nHeight=GetHeight();BYTE * pData=GetData();BYTE * tmp = new BYTELineBytes * nHeight;memset(t

14、mp,0,sizeof(BYTE)*LineBytes*nHeight);int k;for(k=0;k2;+k)Convolution(tmp,laplacek,3,3,true);memcpy(pData,tmp,sizeof(BYTE)*LineBytes*nHeight);/将处理完的数据赋给图像,用以显示delete tmp;void CDib:Gauss_Laplace()if (!IsGray()AfxMessageBox(请先将图像转换为8位灰度图像);return ;int nWidth=GetWidth();int LineBytes=GetLineBytes();int

15、nHeight=GetHeight();BYTE * pData=GetData();BYTE * tmp = new BYTELineBytes * nHeight;memset(tmp,0,sizeof(BYTE)*LineBytes*nHeight);Convolution(tmp,gauss_Laplace,5,5,true);memcpy(pData,tmp,sizeof(BYTE)*LineBytes*nHeight);/将处理完的数据赋给图像,用以显示delete tmp;附录2:用户使用说明运行方式:直接运行提交文件夹根目录下的边缘检测.exe或用VC6打开程序项目文件夹下的B

16、itmapTest.dsw运行。随后用菜单栏的的文件菜单项打开一个8位灰度BMP图像(或者打开24位的BMP图片并用菜单栏的灰度菜单项转化成8位灰度),随后就可以用边缘检测的菜单项观察结果了。华南农业大学信息学院设计性、综合性实验实验题目灰度图像边缘检测起止日期2011-2012学年第1学期课程名称数字图像处理学生资料学号 学生姓名 院系 专业班级 实验内容1.编程实现六种图像边缘检测算子。2.根据检测结果,分析与比较各种边缘检测算法的主要区别。评语与成绩项目/分数优良中及格不及格系统分析设计程序设计水平内容完成情况设计报告撰写质量课程设计总结情况附加说明:成绩 (优/良/中/及格/不及格) 指导教师 年 月 日

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁