1、计算机图形学课程设计题 目:大头贴图像处理软件设计学 校:学 院:班 级:姓 名:学 号:指 导:摘要:计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。而其中数字图像处理则是将一幅图像变为另一幅经过加工的图像,是图像到图像的过程。同时也是将一幅图像转化为一种非图像的表示,如一个决策等。图像处理会对已有的图像进行变换、分析、重构,得到的仍是图像。而现在随着计算机的发展,图形学中的图像技术近年来得到了极大地重视和长足的发展,出现了许多有关的
2、新理论、新方法、新算法、新手段和新设备等等。所以由此可以看出图像的处理在计算机图形中的重要性,而本课程设计使用Delphi 软件实现图像的各种变换处理并且开发出一个小型的大头贴处理系统,会完成各种必需的功能。Delphi 作为软件开发的一种工具,具有开发速度快,程序容易掌握,编译快,功能容易实现等特点。它所具有的强大控件组也是其他开发软件所没有的。它的强大功能,不但可以很容易地找到程序地出错点,还可以在短期内开发完成一个软件项目。它完成一个功能相对其他开发软件只需要少量的代码,且运行速度很快。除此之外,Delphi 的界面还可以根据设计者的需要,通过编辑可以达到很漂亮的效果。目录一,设计背景
3、.1二,程序功能 .2一,模糊处理 .21,效果展示 .22,源程序 .2二,颜色处理 .31,效果展示 .32,源程序 .3三,旋转处理 .41,效果展示 .42,源程序 .4四,浮雕处理 .51,效果展示 .52,源程序 .5五,光照处理 .61,效果展示 .62,源程序 .6六,墨画处理 .71,效果展示 .72,源程序 .8七,变形处理 .91,效果展示 .92,源程序 .9八,星光闪烁 .101,效果展示 .102,源程序 .10九,水印处理 .111,效果展示 .112,源程序 .11三,参考文献 .12大头贴程序设计一,设计背景毛主席说过,没有调查就没有发言权。没有拍过大头贴的我
4、为了掌握这个发言权,亲自去南昌市区拍了一些。经过仔细的观察发现,成千上万的大头贴是通过数十种程序就可以完成的,因为它们很多都有共性,都是从一个有代表性的举一反三而得的,比如一个图象的偏色就可以玩出很多花样来,偏色中的二值化也可以玩出不少花样,把偏色和变形结合,又可以成倍地出现不少新的东西。对颜色、形状、多图形等等的处理使得大头贴这个小小的创意可以产生太多的花样了。偏色中的二就相当于是用 Delphi 软件实现了图像的各种数字变换处理并且开发出小型的图像处理系统,可以完成对图像的获取、对它实现图像的几何变换和浮雕、锐化、等等各种图像的处理。这样能满足个位爱照大头贴的人的要求和想法,也顺便能让你的
5、照片看起来更加的美观、也使人们更加的自信。也算是这个课程设计的一个目的之一,下面我们来看一下这些具体的功能是怎么实现的。本程序不仅仅针对其中的部分核心内容进行了模拟,也附加了一些可以用于一般图象处理的内容,要提出的是,本程序只是对原理模拟,具体的商业化包装我并未处理,因为前者才是重要的,是精髓。二,程序功能一,模糊处理1,效果展示原图 模糊后2,源程序void CBMPView:Onsoft() Invalidate();int i,j,cx=bm.bmWidth,cy=bm.bmHeight;int r9,g9,b9;int initR,initG,initB;for(i=1;i=cx;i+
6、)for(j=1;j=cy;j+)initR=initG=initB=0;for(int n=0;n9;n+)rn=GetRValue(m_c1i+int(n/3)-1+(j+n%3-1)*cx);gn=GetGValue(m_c1i+int(n/3)-1+(j+n%3-1)*cx);bn=GetBValue(m_c1i+int(n/3)-1+(j+n%3-1)*cx);for(int n1=0;n19;n1+)initR+=rn1;initG+=gn1;initB+=bn1;m_c1i+j*cx=RGB(initR/9,initG/9,initB/9);void CBMPView:OnHit
7、Image() Invalidate();for(int n=0;n10;n+)Onsoft();二,颜色处理1,效果展示原图 黑白后 偏蓝后2,源程序 原理都是一样得简单:检测全图,只要哪里不是全白(255,255,255)的,就让它着蓝(红、绿或灰)色。void CBMPView:OnBlue() Invalidate();int i,j,cx=bm.bmWidth,cy=bm.bmHeight;int b;for(i=1;icx;i+)for(j=1;jcy;j+)b=GetBValue(m_c1i+j*cx);m_c1i+j*cx=RGB(0,0,b);三,旋转处理1,效果展示原图 旋
8、转后2,源程序为了平铺图像以造成视角之变化,坐标之变换为:x1=sqrt(x*x+y*y)*cos(atan(y/x);y1=sqrt(x*x+y*y)*sin(atan(y/x);4 舍 5 入,x1=floor(0.5+sqrt(x*x+y*y)*cos(atan(y/x);y1=floor(0.5+sqrt(x*x+y*y)*sin(atan(y/x);使用此方法后效果很不理想。完全是因为整型与浮点型的转换导致了像素点大量丢失。可以有更简便的方法获得需要的效果:假设视角变化 45 度:y1=y/sqrt(2); x1=x+y1;void CMyView:Onmapping()memcpy
9、(void*)m_c2,m_c1,bm.bmWidth*bm.bmHeight*sizeof(COLORREF);int i,j; /virtual coordinateint m,n; /real coordinatefor(i=0;ibm.bmWidth;i+)for(j=0;jbm.bmHeight ;j+) n=j/sqrt(2); m=i+n;四,浮雕处理1,效果展示原图 浮雕后2,源程序仔细观察浮雕与原图的区别,即可发现,原来浮雕只是邻相素差异的体现。可以将一相素的 R(G、B )值与其左边一位相素的 R(G 、B )值相减,所得即是此差异。void CBMPView:OnShap
10、e() Invalidate();int i,j,cx=bm.bmWidth,cy=bm.bmHeight;int r3,g3,b3;for(i=1;icx;i+)for(j=1;jcy;j+)r0=GetRValue(m_c2i+j*cx);g0=GetGValue(m_c2i+j*cx);b0=GetBValue(m_c2i+j*cx);r1=GetRValue(m_c2i-1+j*cx);g1=GetGValue(m_c2i-1+j*cx);b1=GetBValue(m_c2i-1+j*cx);r2=r0-r1+192;g2=g0-g1+192;b2=b0-b1+192;m_c1i+j*cx=RGB(r2,g2,b2);五,光照处理1,效果展示原图 光照后2,源程序可以将原图象的 R、G、B 值成等倍率地提高来实现,若值超过 255 则置为 255。