基于C++的数字图像处理技术

上传人:马*** 文档编号:141546909 上传时间:2022-08-24 格式:DOC 页数:17 大小:6.54MB
返回 下载 相关 举报
基于C++的数字图像处理技术_第1页
第1页 / 共17页
基于C++的数字图像处理技术_第2页
第2页 / 共17页
基于C++的数字图像处理技术_第3页
第3页 / 共17页
点击查看更多>>
资源描述
本科毕业论文(设计) 题目: 基于C+的数字图像处理技术 学院: 物理与电子科学学院 班级: 2010级物电学院电子三班 姓名: 赵锦云 指导教师: 孙慧萍 职称: 讲师 完成日期: 2014 年 5 月 25 日 基于C+的数字图像处理技术摘要:在信息时代,我们几乎每天都在处理图片。我们可以拍照,向互联网上传图片和下载图片,我们可以利用数字图像处理软件对我们的照片和下载的图片进行修改,以达到想要的效果。 C+是一种面向对象的高级程序设计语言,配合微软公司的MFC中关于位图处理的类库。基于C+和MFC,我设计了基本的数字图像处理软件。本软件对图像处理的功能分为图像的基本变换,锐化处理和颜色饱和度处理。它可以完成对图像的等比例缩放、锐化处理、图像灰度化,还可以完成图像负片效果、图像浮雕效果、图像变亮和变暗等效果。关键词: Visual C+;MFC;位图;数字图像处理目 录 1 引言3 1.1 C/C+语言3 1.2 VISUAL C+4 1.3 MFC4 2 总体设计4 2.1 系统功能描述4 2.2 功能模块划分4 2.3 系统流程分析43 详细设计5 3.1 构造CDib类53.2 主窗口的设计7 3.2.1 创建MFC单文档项目7 3.2.2 加载CDib类7 3.2.3 位图的基本变换8 3.2.4 位图的锐化处理9 3.2.5 位图的颜色和饱和度处理 104 总结16 4.1 优点16 4.2 缺点16 参考文献16 1 引言数字图像处理软件是一款对于处理图像非常方便和必不可少的软件。它对于平面设计和网页设计等设计领域非常方便,它可以提高设计人员的工作效率,这样设计人员就有了更多的时间去构思,去创新。普通人可以用该软件对图像进行放大,设计人员可以方便的处理图像的颜色、色调和饱和度等。1.1 C/C+语言C语言是在70年代初问世的。电话电报公司是美国的一个伟大的公司,其旗下的贝尔实验室于1978年研发了C程序设计语言。在电脑编程语言中结合了高级的语言和汇编的语言特色,这就是C语言的特色。该语言不仅可以编写系统代码还可以编写普通程序。它的应用相当广泛。下面介绍本论文的主角:C+。C+用来处理现实生活中的任何问题,它是按一类事物进行处理的。比如杯子是一个类,我的杯子就是这个类中的一个实际的例子。然后给这个类添加颜色,大小,价格,倒水,拧瓶盖等属性和方法,C+就是这样处理现实生活中的问题的与按一件事调用另一件事的处理方式的C语言有很大的区别。C+是活着的编程语言,它的标准一直在变化,却越来越严谨、易用,而且始终保持着系统性。C+在高级程序设计语言中,处理运行速度是最快的,大部分的游戏软件,系统都是由C+编写的。C+的标准很庞大而且有着分明的层次,如果我们学会了C+的详细语法和标准库,那么我们编程时将会变得游刃有余。俗话说:读书破万卷,下笔如有神。我们编写的代码会及其精练,编起程序来也会很轻松。C+采用了C语言的语法,但是去除了C语言语法不严谨的缺点,还去除了C语言中有歧义的特性。我们可以在创建的C+工程中加入C语言的思路。C+语言之所以灵活在于其灵活的指针处理功能和灵活多变的标准库算法,C+算法执行效率很高。许多语言都是C+的派生语言,比如Java,C#。当我们掌握好C+时,学习其他C+派生的编程语言将会非常的容易。当然同时由于Java,C#等语言的出现和硬件价格的大规模下降,C+受到了一定的冲击。C+语言的缺点是其过渡复杂的语法和标准库,C+语言已经无法简化了。在今年的编程语言世界排行上C+排行第三,仅次于C和Java。本论文用C+与MFC相结合去实现对图像的各种处理。1.2 Visual C+6.0经过微软公司员工们的辛勤努力,终于研发出一款用于编写C+代码的软件产品:Visual C+6.0。它是一款实用,强大的,方便的编写软件的工具。该软件受到了世界上专业程序员的认可,微软公司也继续开发出更新的版本和不同的版本。自此它成为了软件开发的主流工具。它不仅仅是一款C+软件编写工具,它还将微软操作系统的开发环境集成在一块,我们可以通过它将建立的各个类紧密的联系起来。1.3 MFC微软公司的员工们不懈努力,在团队合作下组装了一个巨大的类库。他们用C+类打包了微软自定义的一些应用程序编程接口,并把这些类放到这个类库中,这个类库就是:MFC。这样程序员可以很轻松地调用这个类库中的方法去快速解决编程中的一些大小问题,这样可以提高编程效率。2 总体设计2.1 系统功能描述 该系统针对图像的处理分为载入位图,位图的基本变换,位图的锐化处理,位图的颜色和饱和度处理。各个部分功能如下:位图的基本变换:图片放大和缩小。锐化处理。位图的颜色和饱和度处理:灰度化,负片,浮雕,变亮,变暗。2.2 功能模块划分数字图像处理实现的功能如图2-1所示,每部分功能都在一个单文档窗口中的一个菜单项中,各部分的具体功能在菜单项的子菜单项中,打开位图后,只要选择某一菜单项然后在子菜单项中选择一项点击即可运行,各部分功能独立运行,功能简单而方便,但颜色和饱和度处理,还有锐化处理会改变整个位图。2.3 系统流程分析 打开系统,界面是一个单文档窗口,界面友好而简单,打开位图后加载位图,窗口会按位图原来的大小显示位图,然后用户可以对位图进行基本变换处理,锐化处理,颜色和饱和度处理。数字图像处理系统载入位图颜色饱和度锐化处理基本变换 图 21 数字图像处理系统实现的主要功能3 详细设计31 构造CDib类.bmp格式的图片是微软公司自定义的一种图片格式,又称作位图,它可以在不同的设备或系统上显示漂亮的颜色。该位图文件又称作DIB,它还支持对其中的图像数据进行压缩。BMP文件是由红,绿,蓝三原色组成的,图像本身由一个一个像素排列组合而成,所以如果有足够多的彩色像素的话位图可以表示大自然中无数漂亮的,景象,正是由于位图的这一构造特点,使得位图在旋转和缩放时容易失真。(1)BMP文件组成BMP文件组成如图3-1所示:(2)BMP文件头BMP文件头结构定义包含如下内容:位图文件的类型,必须为BMP 位图文件的大小,以字节为单位位图文件保留字,必须为0以BMP文件头为参考的经过一定偏移量所在的位置,以字节为单位位图文件头结构BITMAPFILEHEADER位图信息头结构BITMAPINFOHEADER位图颜色表RGBQUAD位图像素位图像素数据图 31 BMP文件组成(3)BMP信息头BMP信息头结构定义包含如下内容:本结构所占用字节数 位图的宽度,以像素为单位位图的高度,以像素为单位目标设备的级别,必须为1 位图像素所占位数,可以为1,4,8,24位图压缩类型位图的大小,以字节为单位位图水平分辨率,每米像素数位图垂直分辨率,每米像素数位图实际使用的颜色表中的颜色数位图显示过程中重要的颜色数(4)颜色表 RGBQUAD结构的定义包含如下内容:蓝色的亮度值 绿色的亮度值 红色的亮度值 保留,必须为0蓝色,绿色,红色的亮度值必须再0到255这个范围之内。(5)位图像素数据位图的一个像素值所占的字节数:当biBitCount=1时,8个像素占一个字节;当biBitCount=4时,2个像素占一个字节;当biBitCount=8时,1个像素占一个字节;当biBitCount=24时,1个像素占三个字节;当1像素占1位时,色彩数为2;当1像素占4位时,色彩数为16; 当1像素占8位时,色彩数为256;当1像素占24位时,1像素占3字节,分别对应蓝,绿,红,其色彩值即为像素值。位图存储的时候是以行存储的,而且在存储器中是以相反的顺序存储的,即位图文件的首行对应存储器中的末行,而且位图文件的最左边的像素对应于字节的最高位。 (6)CDib类的定义首先我们要继承Object类,Object类是微软公司规定的,其他大多数类都会继承Object类。因为Object类包含很多对数字图像处理有关的函数,属性和句柄,输入,输出,文件读取等很多方便而有用的功能,这样我们就可以实现处理图像的很多功能。然后我们要对CDib类中的数据进行封装,所谓封装就是指将类中的属性隐藏保护起来,只允许该类的成员函访问,这样外界就无法轻易改变类中属性的值,大大地提高了数据的安全性。最后我们要在测试类中创建CDib类的实例,然后通过创建的对象去访问。 3.2 主窗口的设计3.2.1 创建单文档项目 打开VC+6.0新建一个MFC运行程序,写上工程名称,然后点击确定,选择单文档,最后点击确定,这样一个单文档窗口就实现了。3.2.2 加载CDib类找到CDib.cpp并加载进来。同理,找到CDib.h加载进来。编译运行,如果出现错误C1083:Cannot open precompiled header file: Debug/EffectShow.pch: No such file or directory,那么可以按ALT+F7打开工程设置,选择C/C+进行相关设置,点击确定按钮,再次编译。在CShowEffectView类的OnDraw函数中调用CDib类的DrawDib函数显示图像。编译运行打开一张位图,打开一张位图效果如图3-2所示:图3-2 打开一张位图3.2.3 位图的基本变换(1)算法分析:原图的宽为lSrcWidth像素,高为lSrcHeight像素,显示区域的宽为newwide,高为newheight,缩放的比例系数为k。我们利用MFC提供的显示位图函数可以很方便的显示一张位图,参数中原图像的宽高不要变,显示区域的宽和高改变,整张图片的显示效果就会随着显示区域的宽和高自动缩放。newwide=lSrcWidth*K (3-1) newheight=lSrcHeight*K (3-2)(2)打开视图窗口中的Menu双击会弹出一个菜单项目 属性的窗口,在标明里面写“基本变换”,然后给基本变换添加子菜单项,双击将菜单项目 属性中的弹出复选框取消,设置ID为ID_chuizhi,在标明里面写“放大”。同理,设置缩小(ID_suoxiao)。(3)在视图窗口中选择ClassView,双击CShowEffectView添加一个消息句柄;相应的ShowEffectView.cpp中添加消息映射宏:ON_COMMAND_RANGE(ID_fangda,ID_suoxiao,OnImageTransform)位图缩小效果如图3-3所示:图3-3 放大位图效果图位图放大效果如图3-4所示: 图3-4 位图缩小效果图3.2.4 位图的锐化处理算法分析:在设计领域,锐化可以对不清晰的图像加以处理,使得图像的边缘更加明确,已达到使图像清晰的目的,图像模糊的原因是图像在积分运算的影响下导致的,所以处理时我们采用积分运算的逆运算即微分运算对图像的行或列进行处理,要实现位图的锐化处理,需要将图像中色彩变化剧烈的区域用深色,而色彩变化不太明显的区域则显示相近的比较淡的色彩,按下面公式处理后,颜色比较暗,所以我们要将(x,y)处的像素的颜色亮度提高,然后取反,就能清晰的显示图像的轮廓了。处理过程中我们对图像的列进行微分处理,而微分又可以近似用差分表示,具体的转换公式如下:g(x,y)=f(x,y)-f(x-1,y) (3-3)其中g(x,y)为 (x,y)处的像素值,f(x,y)为当前像素的像素值,f(x-1,y)为当前像素的前一个像素的像素值。位图锐化效果如图3-5所示: 图3-5 位图锐化效果图3.2.5 位图的颜色和饱和度处理往菜单栏中添加一个菜单选项:颜色/饱和度(灰度化ID_gray,负片ID_negative,浮雕ID_fudiao,变亮ID_brighter,变暗ID_darker)。添加Windows 消息和消息映射。(1)灰度化算法分析:在设计领域,我们经常要将彩色图像转化为灰色图像,这样可以加快处理的速度,灰度化处理具有很大的实际意义。当每个像素的蓝,绿,红的像素分量值都相同时,这个像素的色彩值就是灰度值,整张图片就是灰度图,该点越白,即越亮,越小则越黑。转换关系为: g(x,y)=a*r(x,y)+b*g(x,y)+c*b(x,y) (3-4)将G(x,y)分别赋给(x,y)处的像素的蓝,绿,红分量值,公式中a+b+c的值必须为1。 位图灰度化效果如图3-6所示: 图3-6 位图灰度化效果图(2)负片算法分析:负片效果也就是我们平常所见的底片的样子,全部颜色都是相反的,将(x,y)的像素值取反即用255减去当前像素值转换关系为: g(x,y)=255-f(x,y) (3-5)f(x,y)为原像素值分量,g(x,y)为处理后像素的对应的分量。位图负片效果如图3-7所示:图3-7 位图负片效果图(3)浮雕算法分析:在设计领域,浮雕效果可以让图片看起来是鼓起来的,有立体纵深的感觉,我们可以利用浮雕这一处理效果做出漂亮的设计作品,通过将图像中色彩变化剧烈的部分放大显示,而变化趋于平缓的部分隐藏,实现图像的明显轮廓转换关系为: g(x,y)=g(x,y)-f(x-1,y)+a (3-6)g(x,y)为图像经过处理后(x,y)处的像素值,f(x,y)为原图像中(x,y)处的像素值,f(x-1,y)为(x-1,y)处的像素的值,a为常量,可以增加处理后浮雕效果的亮度。位图浮雕效果如图3-8所示: (4)变亮和变暗 算法分析:图像变量和变暗是日常生活中最基本的图像处理技术,比如我们拍照时由于光线的问题,拍下的照片可能过亮或过暗,这时我们就可以通过改变亮度对图像进行饱和度处理将图像转换为正常的光线状态。当图像的亮度很低时,需要将图像的亮度调高;当图像的亮度太高时,需要将图像的亮度下降,变图3-8 位图浮雕效果图 暗。要实现这个效果,只需将(x,y)处的像素乘以一定倍数即可。转换关系为: g(x,y)=f(x,y)*k (3-7),f(x,y)为原图像的像素值,g(x,y)为处理后图像的像素值,k为调整的倍数,k大于1时图像变亮,k小于1时图像变暗。 位图变亮效果如图3-9所示:图3-9 位图变亮效果图位图变暗效果如图3-10所示:图3-10 位图变暗效果图4 总结4.1 优点本人通过研究大量的教程,相关资料和上网寻求问题的解决办法,最后做出了这个数字图像处理软件。图像的基本变换:通过改变缩放比例,用户可以很方便的等比例缩放图像。简单的操作:该软件的操作十分简单,只需打开位图,再选择相应的菜单项就可得出处理的效果。颜色处理功能丰富:对颜色的处理方面,该软件功能丰富而有趣,用户可以对图像进行灰度化,做成负片的效果,提高图像的亮度或降低图像的亮度,做出浮雕效果。4.1 欠缺虽然这个数字图像处理系统很有趣,不过在功能上和用户界面上还有些不足。 加载保存位图的功能:对位图进行相关处理后,只可以保存为.bmp文件无法转换为如.gif .png .jpg格式的图片。而且只可以加载位图。添加上位图与其他图片格式的互转机制,功能将更加完善。位图的基本功能:功能比较少,如果加上镜像,旋转,裁剪,粘贴复制功能会更加强大。位图的锐化处理:功能太少,算法略有偏差。位图的颜色饱和度处理:算法略有不足,变亮/变暗显示略有偏差。需要算法上加以改进。参考文献:1杨淑莹 边奠英.VC+图像处理程序设计M.北京:清华大学出版社,2003:2-291.2何斌 马天予 王运坚 朱红莲.Visul C+数字图像处理M.北京:人民邮电出版社,2001:20-36.3Stanley B Lippman Josee Lajoie.C+Primer第三版M.北京:中国电力出版社,1998:501-715.4Andrew Koenig Barbara Moo.C+沉思录M.北京:人民邮电出版社,2002:1-335.5夏良正.数字图像处理M.南京:东南大学出版社,1999:2-15.6赵海廷 严运国.C+程序设计基础导学M.北京:科学出版社,2006:10-55.7Andrew Koenig Barbara E. Moo.Accelerated C+M.北京:机械工业出版社,2006:40-50.8荣政 胡建伟 绍晓鹏等.C程序设计M.西安:西安电子科技大学,2006:104-185.9谭浩强.C/C+程序设计题解与实验教程M.北京:高等教育出版社,2001:20-90.10谭浩强.C+程序设计M.清华大学出版社,2004:50-80.Digital image processing techniques based on c+Abstract : In the information age,wealmost every day in thetreatment. We can take a photograph,to the Internetto upload pictures anddownload pictures,we can modify our photos anddownloading of imagesusing digital imageprocessing software,to achieve the desired effect. C+ is an object-oriented high-level programming language, with Microsofts MFC class library on the bitmap handle. Based on C + + and MFC, I designed a bas ic digital image processing software. The software for image processing functions into the basic transformation of the image, sharpening and color saturation processing. It c an be done, such as the ratio of the image scaling, sharpening, gray image, you can co mplete the image negative effects, image embossed effect, the image becomes brighte r and darker effects. Key words : Visual C+; MFC; Bitmap; digital image manage16
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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