课程设计图像几何变换和图像噪声抑制程序设计_第1页
课程设计图像几何变换和图像噪声抑制程序设计_第2页
课程设计图像几何变换和图像噪声抑制程序设计_第3页
课程设计图像几何变换和图像噪声抑制程序设计_第4页
课程设计图像几何变换和图像噪声抑制程序设计_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目目 录录 摘摘 要要1 一、前言一、前言2 二、算法分析与描述二、算法分析与描述3 2.1 均值滤波3 2.2 图像的平移变换.4 三、详细设计过程三、详细设计过程4 3.1 均值滤波详细说明4 3.2 图像平移变换的详细说明.5 4.1 出现的问题5 4.2 解决问题6 五、程序运行截图及其说明五、程序运行截图及其说明7 六、简单操作手册六、简单操作手册9 设计总结设计总结12 参考资料参考资料13 致致 谢谢14 附录附录 1 15 附录附录 2 20 -11 摘摘 要要 在图像处理中主要用 VC+编写图像处理程序并调用 VC+图像处理的部分内 部函数进行处理,通过程序实现均值滤波,对程序进行相应的调试,并且用图 例进行测试,以验证程序的正确性与可用性。调试及测试时,通过相关信息, 充分验证程序的可用性,本程序通篇均用 C+写成,具有很高的严密性,具有 很高的真实性与可靠性。常用的几何变换功能包括图像的平移、图像的转置、 图像的缩放、图像的旋转等。作为数字图像处理的一个重要部分,一般用 Visual C+编程工具设计一个完整的应用程序,实现相应的图像几何变换功能。 计算机图像处理的实现主要以数学模型为基础,通过建立合适的算法来实 现具体的图像处理,几何变换是最常见的图像处理手段,通过对变形的图像进 行几何校正,可以得出准确的图像。图像噪声抑制程序主要涉及中值滤波、均 值滤波、低通滤波和高通滤波。 【关键词】 图像处理;滤波;噪声抑制;数学模型;平移 -21 一、前言一、前言 众所周知,人类所获得的大部分信息都来自人的视觉。换句话说,人类把 自己双眼所观察到的世界进行缜密的分析和思考之后,推动了科技的进步和世 界的发展。正是因为图像具有能带给人们直观信息的特点,使得图像处理技术 随着多媒体计算机技术的发展而得到人们的高度重视。图形图像处理的应用领 域涉及人类生活和工作的各个方面,它是从 60 年代以来随计算机的技术和 VLSI 的发展而产生、发展和不断成熟起来的一个新技术领域,理论上和实际应 用上都并取得了巨大的成就。数字图像处理与模拟图像处理的根本不同在于, 它不会因图像的存储、传输或复制等一系列变换操作而导致图像质量的退化, 所以图形图像的处理在我们的生活中又很重要的作用。近年来,图像处理技术 飞速的向各个领域渗透。而噪声作为不可预测的随机信号,它影响图象的质量 以及图象处理的输入、采集等各个环节,因此,噪声抑制技术是十分关键也值 得关注的问题。 Visual C+是微软推出的一种面向对象的可视化编程工具,它作为 Microsoft Visual Studio 开发工具包中的一员,利用其提供的强大功能可以 很容易的开发出功能完善、界面友好的 Windows 应用程序,是 Windows 系统下 32 位程序开发的理想工具。特别是 Visual C+6.0 版本问世以来,更是增加了 许多功能,如代码重用、动态输入感应、对象模块化和组件共享等,可以大大 提高软件系统设计的效率和速度,更易于实现大型软件系统的管理。 图像信息在采集过程中往往受到各种噪声源的干扰,这些噪声在图像上常 常表现为一些孤立像素点,这可理解为像素的灰度分布是空间相关的,即噪声 点像素灰度与它们临近像素的灰度有着显著不同。这种干扰或孤立像素点如不 经过滤波处理,会对以后的图像区域分割、分析和判断带来影响。 噪声是随机量,可以从统计数学的观点来定义噪声。凡是统计特性不随时 间变化的噪声称为平稳噪声,而统计特性随时间变化的噪声称作非平稳噪声。 以上各种类型的噪声反映在图像画面上,大致可以分为两种典型的图像噪声: 对噪声的处理常用滤波方法有均值滤波,中值滤波,低通滤波,高通滤波等。 通过这些滤波处理后,使图像的轮廓更加清晰,从而达到了要求。在图形图像 的软件开发中,我们一般用 Visual C+来开发相应的功能,由于其方便快捷的 特点,给我们的开发工作提高了一个很好平台。 二、算法分析与描述二、算法分析与描述 2.1 均值滤波均值滤波 在噪声抑制中均值滤波就是一种方便且易于实现的方法,均值滤波用若干 像素的平均值替代原图像中的像素值,图像噪声的均值滤波方法原理如下:将 一维均值滤波的原理拓展至二维图像,就可以实现图象噪声抑制。而图象的空 间变换是借助于一个称之为模板(mask)的局部象素域来完成的。模板包括了 图像上对待处理的像素及其周围的邻近像素。将模板中的全体像素的均值来替 代原来的像素值的方法称为均值滤波。均值滤波的模板一般选择为 33、55 等,待处理像素放在模板的中心,为了使输出像素值保持在原来的灰度值范围 内,模板的权值总和应维持为 1。因此,模板与模板像素的乘积要除以一个系 数(通常是模板系数之和) ,这个过程称为模板的归一化。 典型的均值滤波 33 模板如下: 1 1 1 1 1 1 1 1 1 9/1H 该模板的相应计算为: g(x,y)=f(x-1,y-1)+f(x-1,y)+f(x-1,y+1)+f(x,y- 1)+f(x,y)+f(x,y+1)+f(x+1,y-1)+f(x+1,y)+f(x+1,y+1)/9 然后用g(x,y)的值代替中心象素的值。 但均值滤波器有一些不完美的缺点,它会使图像变得模糊,因为它对所有 的点都是同等对待,在将噪声点分摊的同时,将景物的边界点也分摊了。为了 进一步改善效果,可以采用加权平均的方式来构造滤波器,如高斯摸板等,为此, 引入了加权系数,将原来的模板加以改造成,距离越近的点,加权系数越大。 新的模板其实也是一个常用的平滑模板,称为高斯(Gauss)模板。它是通过采样 2 维高斯函数得到的。典型的加权平均滤波器 33 高斯摸板如下: -41 1 2 1 2 4 2 1 2 1 16/1H 用高斯模板处理后,可以得到较好的图像显示效果。 2.2 图像的平移变换 图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。假设原 图像区域左上角坐标为,右下角坐标为,将图像分别沿 x 和 y 轴平移 dx 和 dy,则新图像的左上角坐标为,右下角坐标为。坐标平移变换 公式为: dyyy dxxx / / 在屏幕上实现图像的移动分为四个步骤: 保存原图像到缓冲区。 擦除原图像。 计算平移后的新坐标。 在新的坐标位置重新显示原图像 其中,擦除原图像的方法与图形变换中擦除原图形的方法一致,在实现中 仍采用 XOR 异或方式画图擦除原图像。对于新坐标值的计算还需要考虑边界情 况,不要在图像平移后超出答应的屏幕范围。此外,假如采用 C 函数 getimage 和 putimage 来保存和恢复图像,则图像的大小不能超过 64K。 三、详细设计过程三、详细设计过程 3.1 均值滤波详细说明均值滤波详细说明 void CDlgSmooth:OnRadioAvertem() / 判断设置是否有效 if (m_nSmthTemCenX m_nSmthTemWidth - 1) | -51 (m_nSmthTemCenY m_nSmthTemHeight - 1) / 提示用户参数设置错误 MessageBox(“中心元素参数设置错误!“, “系统提示“ , MB_ICONINFORMATION | MB_OK); / 返回 return; 3.2 图像平移变换的详细说明 图像的平移处理,只改变了原有景物在画面的位置,而图像的内容不发生 变化,采用数字图像坐标系,用下面的函数进行平移。 函数名称: TranslationDIB() 参数: * LPSTR lpDIBBits - 指向源 DIB 图像指针 * LONG lWidth - 源图像宽度(象素数) * LONG lHeight - 源图像高度(象素数) * LONG lXOffset - X 轴平移量(象素数) * LONG lYOffset - Y 轴平移量(象素数) * 返回值: * BOOL - 平移成功返回 TRUE,否则返回 FALSE。 * 该函数用来水平移动 DIB 图像。函数不会改变图像的大小,只改变图像在屏幕上的 位置。 四、调试过程中出现的问题及相应解决办法 4.1 出现的问题出现的问题 在设计过程中首先遇到的问题是如何将复杂的算法用程序来描述出来,我 通过查阅资料和认真阅读课本知识,经过不断和同学的探讨,最后终于使算法 -61 成型,初步完成了对算法的编程。 在程序初步完成后,在调试过程中我又遇到了新的问题,由于对 Visual C+6.0 的使用不是很熟练,使我在调试过程中不能很好的解决所出现的问题, 这时我主动向同学请教,通过同学的帮助,原来我的 visual C+6.0 软件有问 题,经过重新安装后,使我的调试过程有了很快的进展,也是我对软件有了更 深刻的了解。 下面是我在程序调试总遇到的一个问题:经过仔细的分析发现原来是缺少 一个头文件:#include “ stdafx.h “。如果没有引入头文件#include “stdafx.h“时,系统便会显示如下提示信息: 图 4-1 编译错误界面 4.2 解决问题解决问题 在编程过程中一定要注意加载正确的头文件,而且此程序一般只对 256 色或 24 色的位图进行处理,且图片大小均有要求,否则系统将出先错 误信息。 例如出现如下提示: -71 或直接出错而要导致程序退出界面。 五、程序运行截图及其说明五、程序运行截图及其说明 以 lena 原图为例进行图像噪声抑制的处理,以下为 lena 原图及处理后 保存的图象。 5.15.1 未经任何处理的图像,如图 5.1 所示。 图 5.1 lena 原图 5.25.2 经过均值滤波处理后的图像,如图 5.2 所示。 -81 图 5.2 lena 原图均值滤波 5.35.3 经过平移处理后的图像,如图 5.3 所示。 图 5.3 lena 图像平移 -91 六、简单操作手册六、简单操作手册 本系统主要是对有噪声的图像用噪声抑制方法均值滤波进行处理和图像平 移,从儿达到理想的画面效果。该系统的主要操作步骤如下: (1)程序编译成功后,运行。显示初始界面如图 6.1 所示. 图 6.1 开始界面 (2)在界面菜单“文件”中打开要处理的图像,如图 6.2 所示. 图 6.2 打开图像文件的界面 (3)打开 Lena 原图,如图 6.3 所示. -101 图 6.3 在界面中打开 Lena 原图 (4) 对打开的图像选择“噪声抑制”菜单中的“均值滤波”进行处理, 处理过程,如图 6.4 所示: 图 6.4 在界面中打开 Lena 原图处理过程 (5) 对原图的均值滤波处理结果,如图 6.5 所示. -111 图 6.5 均值滤波处理过程 (6) 对原图的处理平移结果,如图 6.6 所示. 图 6.6 平移处理结果 -121 设计总结设计总结 在这两周的计算机图像综合训练中,我的题目是: 图像噪声抑制程序设计和 图像几何变换程序设计,通过该题目的设计, 让我对所学知识、理论和方法得 到巩固。得到计算机图象处理应用的综合训练,全面培养图象处理程序开发过 程中的分析、设计、编码、测试及文档规范书写的能力,提高解决实际问题的 能力,加深了课本中所学的知识,学会了如何把学到的知识用于解决实际问题, 锻炼了自己动手的能力。 课设这段时间的训练,我终于发现图像处理有着强大的功能。而且它处理 图像的程序代码简洁易懂,很容易学会,一小段代码就能实现图像的各种变换 处理。真是太让人佩服了,就像我做的图像噪声抑制设计和图像几何变换程序 设计,不到一千行的程序就实现了图象的均值滤波和图像的平移两个功能。在 编程的过程中,对所学知识系统的进行了强化,掌握了在计算机图象处理技术 的基础知识、基本原理和方法的基础上,使用计算机图象处理方法完成图像噪 声抑制程序设计和图像几何变换程序设计。 通过这次综合训练,我深刻体会到实践的重要性,只有通过实践才能把书 本上的知识充分落实到位,还有同学之间的相互讨论也很重要,让我了解到了 编程不是一件易事,这要求设计人员有清晰的思维能力把握实践中模块信息的 连贯性。虽然这次作业完成的不怎么理想,但毕竟是经过自己努力完成的,在 编写过程中,得到了老师和同学的帮助,才使我完成这次任务。在这里对他们 表示感谢。 -131 参考资料参考资料 1 朱虹.计算机图象处理基础M. 科学出版社, 2005 2 R C.Gonzalez, R E.Woods 著,阮秋琦,阮宇智等译.计算机图象处理(第 2 版).北 京:电子工业出版社,2003 3 K.R.Castleman. 计算机图象处理.北京:电子工业出版社,2002 4 章毓晋.图像处理与分析-图像工程(上册),清华大学,2001 5 何斌等编著.Visual C+计算机图象处理.人民邮电出版社,2002 6 张宏林编著.Visual C+计算机图象模式识别技术及工程实践.人民邮电出版 社,2003. 7 黄维通.Visual C+面向对象与可视化程序设计.清华大学出版社,2003 8 R C.Gonzalez, R E.Woods, S L. Eddins 著,阮秋琦,阮宇智等译.计算机图象处理 (MATLAB 版).北京:电子工业出版社,2005 -141 致致 谢谢 感谢。 。 。 。 。 。 。 。 。 。 -151 附录附录 1 图像几何变换部分源代码: /* * 文件名:GeoTrans.cpp * 图像几何变换 API 函数库: * TranslationDIB1() - 图像平移 * TranslationDIB() - 图像平移 */ #include “stdafx.h“ #include “geotrans.h“ #include “DIBAPI.h“ #include #include /* * 函数名称: * TranslationDIB1() * 参数: * LPSTR lpDIBBits - 指向源 DIB 图像指针 * LONG lWidth - 源图像宽度(象素数) * LONG lHeight - 源图像高度(象素数) * LONG lXOffset - X 轴平移量(象素数) * LONG lYOffset - Y 轴平移量(象素数) * 返回值: * BOOL - 平移成功返回 TRUE,否则返回 FALSE。 * 说明: * 该函数用来水平移动 DIB 图像。函数不会改变图像的大小,移出的部分图像 * 将截去,空白部分用白色填充。 */ BOOL WINAPI TranslationDIB1(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, LONG lXOffset, LONG lYOffset) / 指向源图像的指针 LPSTRlpSrc; / 指向要复制区域的指针 LPSTRlpDst; / 指向复制图像的指针 LPSTRlpNewDIBBits; HLOCALhNewDIBBits; / 象素在新 DIB 中的坐标 LONGi; LONGj; -161 / 象素在源 DIB 中的坐标 LONGi0; LONGj0; / 图像每行的字节数 LONG lLineBytes; / 计算图像每行的字节数 lLineBytes = WIDTHBYTES(lWidth * 8); / 暂时分配内存,以保存新图像 hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight); if (hNewDIBBits = NULL) / 分配内存失败 return FALSE; / 锁定内存 lpNewDIBBits = (char * )LocalLock(hNewDIBBits); / 每行 for(i = 0; i = 0) #include “GlobalApi.h“ /* * 函数名称: * GeneralTemplate() * 输入参数: * CDib * pDib- 指向 CDib 类的指针,含有原始图象信息 * int nTempWidth- 模板的宽度 * int nTempHeight- 模板的高度 * int nTempCenX- 模板中心的 X 坐标(相对于模板) * int nTempCenY- 模板中心的 Y 坐标(相对于模板) * double* pdbTemp- 模板数组的指针 * double* dbCoef- 模板的系数 * 返回值: * BOOL- 成功则返回 TRUE,否则返回 FALSE * 说明: * 该函数用指定的模板对 pDib 指向的图象进行模板操作。模板的定义了宽 度,高度, * 中心坐标和系数,模板的数据存放在 pdbTemp 中。对图象进行模板操作 后,仍然存放在 pDib 指向的 CDib 对象中。需要注意的是,该函数只能处理 8 位的图象, -221 * 否则,指向的数据将出错。 * BOOL GeneralTemplate(CDib* pDib, int nTempWidth, int nTempHeight, int nTempCenX, int nTempCenY, double* pdbTemp, double dbCoef) / 临时存放图像数据的指针 LPBYTE lpImage; / 循环变量 int i,j,k,l; / 指向源图像的指针 unsigned char*lpSrc; / 指向要复制区域的指针 unsigned char*lpDst / 计算结果 double dbResult; / 图象的高度和宽度 CSize sizeImage; sizeImage = pDib-GetDimensions(); / 获得图象数据存储的尺寸 int nSizeImage; nSizeImage = pDib-GetSizeImage(); / 给临时存放数据分配内存 lpImage = (LPBYTE) new charnSizeImage; / 判断是否内存分配失败 if (lpImage = NULL) / 分配内存失败 return FALSE; -231 / 将原始图像的数据拷贝到临时存放内存中 memcpy(lpImage, pDib-m_lpImage, nSizeImage); / 进行模板操作 / 行(除去边缘几行) for(i = nTempCenY ; i GetPixelOffset(i,j); dbResult = 0; / 计算 for (k = 0; k m_lpImage + pDib- GetPixelOffset(i-nTempCenY+k, j-nTempCenX+l); / 保存象素值 dbResult += (* lpSrc) * pdbTempk * nTempWidth + l; / 乘上系数 dbResult *= dbCoef; / 取绝对值 dbResult = (double ) fabs(dbResult); / 判断是否超过 255 if(dbResult 255) -241 / 直接赋值为 255 * lpDst = 255; else / 赋值 * lpDst = (unsigned char) (dbResult + 0.5); / 复制变换后的图像 memcpy(pDib-m_lpImage, lpImage, nSizeImage); / 释放内存 deletelpImage; / 返回 return TRUE; /* * 函数名称: * AverageFilter() * 输入参数: * CDib * pDib- 指向 CDib 类的指针,含有原始图象信息 * int nTempWidth- 模板的宽度 * int nTempHeight- 模板的高度 * int nTempCenX- 模板中心的 X 坐标(相对于模板) * int nTempCenY- 模板中心的 Y 坐标(相对于模板) * 返回值: * BOOL- 成功则返回 TRUE,否则返回 FALSE * 说明: -251 * 该函数对指定的 DIB 图像进行均值值滤波。 */ BOOL AverageFilter(CDib* pDib, int nTempWidth, int nTempHeight, int nTempCenX, int nTempCenY) / 临时存放图像数据的指针 LPBYTE lpImage; / 循环变量 int i,j,k,l; / 指向源图像的指针 unsigned char*lpSrc; / 指向要复制区域的指针 unsigned char*lpDst; / 图象的高度和宽度 CSize sizeImage; sizeImage = pDib-GetDimensions(); / 获得图象数据存储的尺寸 int nSizeImage; nSizeImage = pDib-GetSizeImage(); / 指向滤波器数组的指针 unsigned char* pUnchFltValue; / 给临时存放数据分配内存 lpImage = (LPBYTE) new charnSizeImage; / 判断是否内存分配失败 if (lpImage = NULL) / 返回 return FALSE; -261 / 将原始图像的数据拷贝到临时存放内存中 memcpy(lpImage, pDib-m_lpImage, nSizeImage); / 暂时分配内存,以保存滤波器数组 pUnchFltValue = new unsigned charnTempHeight * nTempWidth; / 判断是否内存分配失败 if (pUnchFltValue = NULL) / 释放已分配内存 deletelpImage; / 返回 return FALSE; / 开始均值滤波 / 行(除去边缘几行) for(i = nTempCenY; i GetPixelOffset(i,j); /lpDst = (unsigned char*)lpImage + sizeImage.cx * (sizeImage.cy - 1 - i) + j; / 读取滤波器数组 for (k = 0; k m_lpImage + pDib- GetPixelOffset(i-nTempCenY+k, j-nTempCenX+l); /lpSrc = (unsigned char*)pDib-m_lpImage + sizeImage.cx * (sizeImage.cy - 1 - i + nTempCenY - k) + j - nTempCenX + l; / 保存象素值 pUnchFltValuek * nTempWidth + l = *lpSrc; / 获取均值 /* lpDst = GetAverageValue(pUnchFltValue, nTempHeight * nTempWidth); / 复制变换后的图像 memcpy(pDib-m_lpImage, lpImage, nSizeImage); / 释放内存 deletelpImage; deletepUnchFltValue; / 返回 return TRUE; CDlgSmooth:CDlgSmooth(CWnd* pParent /*=NULL*/) : CDialog(CDlgSmooth:IDD, pParent) /AFX_DATA_INIT(CDlgSmooth) m_nTemType = 0; m_nSmthTemCenX = 0; m_nSmthTemCenY = 0; m_dbSmthTemCoef = 0.0; -281 m_nSmthTemHeight = 0; m_nSmthTemWidth = 0; /AFX_DATA_INIT void CDlgSmooth:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CDlgSmooth) DDX_Text(pDX, IDC_EDIT_SELFTEM_CEN_X, m_nSmthTemCenX); DDX_Text(pDX, IDC_EDIT_SELFTEM_CEN_Y, m_nSmthTemCenY); DDX_Text(pDX, IDC_EDIT_SELFTEM_COEF, m_dbSmthTemCoef); DDX_Text(pDX, IDC_EDIT_SELFTEM_HEIGHT, m_nSmthTemHeight); DDV_MinMaxInt(pDX, m_nSmthTemHeight, 2, 5); DDX_Text(pDX, IDC_EDIT_SELFTEM_WIDTH, m_nSmthTemWidth); DDV_MinMaxInt(pDX, m_nSmthTemWidth, 2, 5); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL0 , m_pdbTemp0 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL1 , m_pdbTemp1 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL2 , m_pdbTemp2 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL3 , m_pdbTemp3 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL4 , m_pdbTemp4 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL5 , m_pdbTemp5 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL6 , m_pdbTemp6 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL7 , m_pdbTemp7 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL8 , m_pdbTemp8 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL9 , m_pdbTemp9 ); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL10 , m_pdbTemp10); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL11 , m_pdbTemp11); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL12 , m_pdbTemp12); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL13 , m_pdbTemp13); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL14 , m_pdbTemp14); -291 DDX_Text(pDX, IDC_EDIT_SELFTEM_EL15 , m_pdbTemp15); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL16 , m_pdbTemp16); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL17 , m_pdbTemp17); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL18 , m_pdbTemp18); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL19 , m_pdbTemp19); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL20 , m_pdbTemp20); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL22 , m_pdbTemp22); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL23 , m_pdbTemp23); DDX_Text(pDX, IDC_EDIT_SELFTEM_EL24 , m_pdbTemp24); /AFX_DATA_MAP void CDlgSmooth:OnRadioGuasstem() / 33 高斯模板 m_nTemType = 1; m_nSmthTemHeight = 3; m_nSmthTemWidth = 3; m_nSmthTemCenX = 1; m_nSmthTemCenY = 1; m_dbSmthTemCoef = (double)(1.0/16.0); / 设置模板元素 m_pdbTemp0 = 1.0; m_pdbTemp1 = 2.0; m_pdbTemp2 = 1.0; m_pdbTemp3 = 0.0; m_pdbTemp4 = 0.0; m_pdbTemp5 = 2.0; m_pdbTemp6 = 4.0; m_pdbTemp7 = 2.0; m_pdbTemp8 = 0.0; -301 m_pdbTemp9 = 0.0; m_pdbTemp10 = 1.0; m_pdbTemp11 = 2.0; m_pdbTemp12 = 1.0; m_pdbTemp13 = 0.0; m_pdbTemp14 = 0.0; m_pdbTemp15 = 0.0; m_pdbTemp16 = 0.0; m_pdbTemp17 = 0.0; m_pdbTemp18 = 0.0; m_pdbTemp19 = 0.0; m_pdbTemp20 = 0.0; m_pdbTemp21 = 0.0; m_pdbTemp22 = 0.0; m_pdbTemp23 = 0.0; m_pdbTemp24 = 0.0; / 更新文本框状态 UpdateEdit(); / 更新 UpdateData(FALSE); void CDlgSmooth:OnRadioSelftem() / TODO: Add your control notification handler code here / 自定义模板 m_nTemType = 2; / 更新文本框状态 UpdateEdit(); void CDlgSmooth:OnKillfocusEditSelftemHeight() -311 / TODO: Add your control notification handler code here / 更新 UpdateData(TRUE); / 更新文本框状态 UpdateEdit(); void CDlgSmooth:OnKillfocusEditSelftemWidth() / TODO: Add your control notification handler code here / 更新 UpdateData(TRUE); / 更新文本框状态 UpdateEdit(); void CDlgSmooth:OnOK() / 获取用户设置(更新) UpdateData(TRUE); / 判断设置是否有效 if (m_nSmthTemCenX m_nSmthTemWidth - 1) | (m_nSmthTemCenY m_nSmthTemHeight - 1) / 提示用户参数设置错误 MessageBox(“中心元素参数设置错误!“, “系统提示“ , MB_ICONINFORMATION | MB_OK); / 返回 return; -321 / 更新模板元素数组(将有效元素放置在数组的前面) for (int i = 0; i EnableWindow(bEnable); / 显示应该可见的模板元素文本框 for (i = 0; i ShowWindow(SW_SHOW); void CDlgSmooth:OnRadioAvertem() / 设置 33 平均模板参数 m_nTemType = 0; m_nSmthTemHeight = 3; m_nSmthTemWidth = 3; m_nSmthTemCenX = 1; -341 m_nSmthTemCenY = 1; m_dbSmthTemCoef = (double)1.0/9.0; / 设置 33 平均模板元素 m_pdbTemp0 = 1.0; m_pdbTemp1 = 1.0; m_pdbTemp2 = 1.0; m_pdbTemp3 = 0.0; m_pdbTemp4 = 0.0; m_pdbTemp5 = 1.0; m_pdbTemp6 = 1.0; m_pdbTemp7 = 1.0; m_pdbTemp8 = 0.0; m_pdbTemp9 = 0.0; m_pdbTemp10 = 1.0; m_pdbTemp11 = 1.0; m_pdbTemp12 = 1.0; m_pdbTemp13 = 0.0; m_pdbTemp14 = 0.0; m_pdbTemp15 = 0.0; m_pdbTemp16 = 0.0; m_pdbTemp17 = 0.0; m_pdbTemp18 = 0.0; m_pdbTemp19 = 0.0; m_pdbTemp20 = 0.0; m_pdbTemp21 = 0.0; m_pdbTemp22 = 0.0; m_pdbTemp23 = 0.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论