ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:196.01KB ,
资源ID:9638705      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9638705.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图像处理及分析实验四.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

图像处理及分析实验四.docx

1、图像处理及分析实验四 西华数学与计算机学院上机实践报告课程名称:计算机图形学年级: 2011上机实践成绩: 指导教师: 罗晓辉姓名: 徐千上机实践名称:图像增强学号:312011*上机实践日期:2013.10.27上机实践编号:4上机实践时间:14:00-18:00一、目的理解图像平滑、中值滤波以及拉普拉斯锐化基本原理,掌握基本的生成图像平滑、中值滤波以及拉普拉斯锐化算法,并实现图像平滑、中值滤波以及拉普拉斯锐化的图片效果,利用C+实现图像平滑、中值滤波以及拉普拉斯锐化的图片效果功能并处理图片效果。二、内容与设计思想内容:(1) 了解图像平滑、中值滤波以及拉普拉斯锐化原理。1、二维中值滤波平滑

2、:用中值算法把数字图像中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,这样来过滤噪声,实现平滑。但是,这样产生出来的图像会有一定的模糊。2、梯度算法锐化:用微分的方法对图像处理,锐化因为平滑导致的模糊。3、拉普拉斯模糊:通过二阶微分像素变得跟周围4个像素一样。4、去除拉普拉斯模糊:将拉普拉斯模糊形式从原图像中去除。(2) 掌握基本的生成图像平滑、中值滤波以及拉普拉斯锐化算法(3) 利用C+分别实现生成图像平滑、中值滤波以及拉普拉斯锐化。(4) 利用该算法在屏幕上处理图片的效果。设计思想:图像平滑: 平滑后的像素灰度值即该像素周围九个点的灰度值分别乘以平滑模板对应元素,

3、再求它们之和,再取平均值步骤: 打开工作区,在图像处理实验算法下的CAView中EhanSmooth函数下编写程序 lpDIB 指向源图像的指针 lpDIBBits指向源图像像素起始位置的指针 lWidth是图像宽度 lHeight是图像高度 int a9平滑模板元素数组 a0=1; a1=1; a2=1;a3=1; a4=1; a5=1; a6=1; a7=1; a8=1; 注意图象的第一行,最后一行,第一列,最后一列跳过不处理; 中值滤波: 滤波后的像素灰度值即该像素周围九个点的灰度值的中值步骤: 打开工作区,在图像处理实验算法下的CAView中MedianFilter函数下编写程序 lp

4、DIB 指向源图像的指针 lpDIBBits指向源图像像素起始位置的指针 lWidth是图像宽度 lHeight是图像高度 注意图象的第一行,最后一行,第一列,最后一列跳过不处理; 拉普拉斯锐化: 每个像素灰度值即该像素周围九个点的灰度值分别乘以锐化模板对应元素,再求它们之和,再取平均值步骤: 打开工作区,在图像处理实验算法下的CAView中LSharp函数下编写程序 lpDIB 指向源图像的指针 lpDIBBits指向源图像像素起始位置的指针 lWidth是图像宽度 lHeight是图像高度 int a9锐化模板元素数组a0=0; a1=-1; a2=0;a3=-1; a4=5; a5=-1

5、;a6=0; a7=-1; a8=0; 注意图象的第一行,最后一行,第一列,最后一列跳过不处理;(4)仿照原理,编写代码,分别用图像平滑、中值滤波以及拉普拉斯锐化处理图片。(5)调试、编译、生成程序。(6)处理图片。三、使用环境Microsoft visual c+ 6.0Windows 7四、核心代码及调试过程.(实验结果)BOOL CAView:EhanSmooth(LPBYTE lpDIBBits, LONG lWidth, LONG lHeight) /* 说明:lpDIBBits是指向图象数据起始点的指针 lWidth是图像宽度 lHeight是图像高度*/ /*以下为可能涉及的指针

6、等*/ LPBYTE lpSrc;/像素指针 LONG lLineBytes;/每行字节数 lLineBytes=WIDTHBYTES(lWidth *8); long i,j; / 循环变量 int a9; /平滑模板元素数组 a0=1; a1=1; a2=1; a3=1; a4=1; a5=1; a6=1; a7=1; a8=1; /*请在下面编写图像平滑的算法*/ double *tempt=new doublelWidth*lHeight; int *b=new int9;int k;double sum,mean; for(i=1;ilHeight-1;i+) for(j=1;jlW

7、idth-1;j+) lpSrc=lpDIBBits+lLineBytes*i+j; b0=*(lpDIBBits+lLineBytes*(i-1)+j-1); b1=*(lpDIBBits+lLineBytes*(i-1)+j); b2=*(lpDIBBits+lLineBytes*(i-1)+j+1); b3=*(lpDIBBits+lLineBytes*i+j-1); b4=*(lpDIBBits+lLineBytes*i+j); b5=*(lpDIBBits+lLineBytes*i+j+1); b6=*(lpDIBBits+lLineBytes*(i+1)+j-1); b7=*(lp

8、DIBBits+lLineBytes*(i+1)+j); b8=*(lpDIBBits+lLineBytes*(i+1)+j+1); sum=0; mean=0; for(k=0;k9;k+) sum=sum+ak*bk; mean=sum/9; temptlWidth*i+j=mean; for(i=1;ilHeight-1;i+) for(j=1;j255) *lpSrc =(unsigned char)255; else *lpSrc =(unsigned char)temptlWidth*i+j; return TRUE;void CAView:OnMedianFilter() Bac

9、kForUndo(GetDocument()-GetHDIB(); / 获取文档 CADoc* pDoc = GetDocument(); / 指向DIB的指针 LPSTR lpDIB; / 锁定DIB lpDIB = (LPSTR) :GlobalLock(HGLOBAL) pDoc-GetHDIB(); / 源图像的宽度和高度 LONG lWidth; LONG lHeight; lWidth=:DIBWidth(lpDIB);/* 获取图像的宽度(4的倍数)*/ lHeight=:DIBHeight(lpDIB)/*获取图像的高度*/; / 指向DIB象素的指针 LPBYTE lpDIB

10、Bits; / 找到源DIB图像象素起始位置 lpDIBBits = (LPBYTE):FindDIBBits(lpDIB); / 创建新DIB HDIB hNewDIB = NULL; / 更改光标形状 BeginWaitCursor(); / 判断平滑是否成功 if (MedianFilter(lpDIBBits, lWidth, lHeight ) / 设置脏标记 pDoc-SetModifiedFlag(TRUE); / 更新视图 pDoc-UpdateAllViews(NULL); else / 提示用户 MessageBox(分配内存失败!); / 解除锁定 :GlobalUnlo

11、ck(HGLOBAL) pDoc-GetHDIB(); / 恢复光标 EndWaitCursor(); BOOL CAView:MedianFilter(LPBYTE lpDIBBits, LONG lWidth, LONG lHeight) /* 说明:lpDIBBits是指向图象数据起始点的指针 lWidth是图像宽度 lHeight是图像高度*/ /*以下为可能涉及的指针等*/ LPBYTE lpSrc;/像素指针 LONG lLineBytes;/每行字节数 lLineBytes=WIDTHBYTES(lWidth *8); long i,j; / 循环变量 /*请在下面编写中值滤波的

12、算法*/ int *tempt=new intlWidth*lHeight; unsigned char *b=new unsigned char9; for(i=1;ilHeight-1;i+) for(j=1;jlWidth-1;j+) lpSrc=lpDIBBits+lLineBytes*i+j; b0=*(lpDIBBits+lLineBytes*(i-1)+j-1); b1=*(lpDIBBits+lLineBytes*(i-1)+j); b2=*(lpDIBBits+lLineBytes*(i-1)+j+1); b3=*(lpDIBBits+lLineBytes*i+j-1); b

13、4=*(lpDIBBits+lLineBytes*i+j); b5=*(lpDIBBits+lLineBytes*i+j+1); b6=*(lpDIBBits+lLineBytes*(i+1)+j-1); b7=*(lpDIBBits+lLineBytes*(i+1)+j); b8=*(lpDIBBits+lLineBytes*(i+1)+j+1); temptlWidth*i+j=GetMedianNum(b, 9); for(i=1;ilHeight-1;i+) for(j=1;j255) *lpSrc =(unsigned char)255; else *lpSrc =(unsigned

14、 char)temptlWidth*i+j; return TRUE;unsigned char CAView:GetMedianNum(unsigned char *b, int num)/找中值(冒泡法) / 循环变量 int i; int j; / 中间变量 unsigned char f; / 用冒泡法对数组进行排序(b0 最小) for (j = 0; j num - 1; j +) for (i = 0; i bi + 1) / 互换 f = bi; bi = bi + 1; bi + 1 = f; / 计算中值 if (num & 1) 0) / 数组有奇数个元素,返回中间一个元

15、素 f = b(num + 1) / 2; else / 数组有偶数个元素,返回中间两个元素平均值 f = (bnum / 2 + bnum / 2 + 1) / 2; / 返回中值 return f;void CAView:OnEnhaLsharp() BackForUndo(GetDocument()-GetHDIB(); / 获取文档 CADoc* pDoc = GetDocument(); / 指向DIB的指针 LPSTR lpDIB; / 锁定DIB lpDIB = (LPSTR) :GlobalLock(HGLOBAL) pDoc-GetHDIB(); / 源图像的宽度和高度 LO

16、NG lWidth; LONG lHeight; lWidth=:DIBWidth(lpDIB);/* 获取图像的宽度(4的倍数)*/ lHeight=:DIBHeight(lpDIB)/*获取图像的高度*/; / 指向DIB象素的指针 LPBYTE lpDIBBits; / 找到源DIB图像象素起始位置 lpDIBBits = (LPBYTE):FindDIBBits(lpDIB); / 创建新DIB HDIB hNewDIB = NULL; / 更改光标形状 BeginWaitCursor(); / 判断锐化是否成功 if (LSharp(lpDIBBits, lWidth, lHeigh

17、t ) / 设置脏标记 pDoc-SetModifiedFlag(TRUE); / 更新视图 pDoc-UpdateAllViews(NULL); else / 提示用户 MessageBox(分配内存失败!); / 解除锁定 :GlobalUnlock(HGLOBAL) pDoc-GetHDIB(); / 恢复光标 EndWaitCursor(); BOOL CAView:LSharp(LPBYTE lpDIBBits, LONG lWidth, LONG lHeight) /* 说明:lpDIBBits是指向图象数据起始点的指针 lWidth是图像宽度 lHeight是图像高度 /*以下为

18、可能涉及的指针等*/ LPBYTE lpSrc;/像素指针 LONG lLineBytes;/每行字节数 lLineBytes=WIDTHBYTES(lWidth *8); long i,j; / 循环变量 int a9; /锐化模板元素数组 a0=0; a1=-1; a2=0; a3=-1; a4=5; a5=-1; a6=0; a7=-1; a8=0; /*请在下面编写图像锐化的算法*/double *tempt=new doublelWidth*lHeight; int *b=new int9;int k;double sum; for(i=1;ilHeight-1;i+) for(j=

19、1;jlWidth-1;j+) lpSrc=lpDIBBits+lLineBytes*i+j; b0=*(lpDIBBits+lLineBytes*(i-1)+j-1); b1=*(lpDIBBits+lLineBytes*(i-1)+j); b2=*(lpDIBBits+lLineBytes*(i-1)+j+1); b3=*(lpDIBBits+lLineBytes*i+j-1); b4=*(lpDIBBits+lLineBytes*i+j); b5=*(lpDIBBits+lLineBytes*i+j+1); b6=*(lpDIBBits+lLineBytes*(i+1)+j-1); b7

20、=*(lpDIBBits+lLineBytes*(i+1)+j); b8=*(lpDIBBits+lLineBytes*(i+1)+j+1); sum=0; for(k=0;k9;k+) sum=sum+ak*bk; temptlWidth*i+j=sum; for(i=1;ilHeight-1;i+) for(j=1;j255) *lpSrc =(unsigned char)255; else *lpSrc =(unsigned char)temptlWidth*i+j; return TRUE;运行结果如下:五、总结 基本了解了图像平滑、中值滤波以及拉普拉斯锐化的要点:对于在图片处理即平滑、滤波及锐化方面上有很重要的作用。掌握基本的图像平滑、中值滤波以及拉普拉斯锐化,并实现图像平滑、中值滤波以及拉普拉斯锐化的处理图片效果。在这次试验中,遇到了很多的难点,对自己的编程能力还有待提高。六、附录

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1