基于DirectX的图像旋转算法的研究与实现.doc基于DirectX的图像旋转算法的研究与实现摘要:该文提出一种基于DirectX的图像旋转并实时绘制方式。首先文章概述一个由传统算法完成旋转变换的算法,指出存在的问题和局限性;然后,引入基于DirectX的图像旋转算法,在VS2008中的VC++环境下实验图像的旋转以及实时显示,最后对两种算法进行比较。该算法充分节约CPU资源,将矩阵运算在GPU中实现,极大限度的使用GPU性能,保证图像旋转的运算速率和旋转中的图像质量。关键词:Directx;旋转算法;GPU;图像处理;算法优化中图分类号:TP37文献标识码:A文章编号:1009-3044(2011)19-4625-03 ResearchandImplementationofImageRotationBasedonDirectX CHENXi-tang (puterScienceandEngineering,ChangshuInstituteofTechnology,Changshu215500,China) Abstract:Analgorithmofimagerotationandreal-,amethodofrotationtransformationwhichisimplementedbyCPUissummarized;,-,,whichgreatlylimitstheuseofGPUperformance,putingspeedimagerotationandrotationoftheimagequality. Keywords:directx;rotationalgorithm;GPU;imageprocessing;algorithmoptimization 随着图形处理器(GPU)性能的飞速发展,以及在可编程性方面(基于OpenGL和DirectX编程)最新的进步,GPU被大量的运用到了大计算量的计算领域。GPU在加速计算方面所具备的优势体现在[1]:1)一定的并行性;2)高密集的运算;3)减少了CPU与GPU的数据通信。由此可见,GPU在数字图像处理方面拥有着巨大的能力。图像旋转是数字图像处理中最常见的一种变换。但是在具体使用过程中必然会增加CPU的负荷。特别是在旋转速度加快,图像的像素点增多的情况下CPU往往会不堪重负,严重影响其他进程的运行。于是考虑将CPU的计算任务交由GPU来完成,GPU拥有强大的计算能力,特别是矢量计算和矩阵计算方面的优势。而DirectX为我们提供了将CPU的图像计算交由GPU完成的可能性。 1传统的图像旋转算法首先我们先来了解一下传统的实时图像旋转算法。在传统的旋转算法中,我们将一副图像映射到一个一维数组中,图像的旋转就变成了数据在一维数组中的移位问题[2]。根据数字图像的一般原理,我们使用f(i)=P(X,Y)规则将点P(X,Y)映射到一维数组的第i个位置。当点P围绕图像原点O旋转a角度得到点P',则点P'与点P之间的关系为 X'=cos(a)X-sin(a)YY'=sin(a)X+cos(a)Y 此时,我们将(X',Y')作为参数传给函数f(i)=P(X,Y),得到点P'在数组中的位置i';用这个方法遍历图像中所有的像素点,对这些像素点作同样的坐标变换,就能实现图像的旋转。具体实现步骤为: 1)调用Init函数进行初始化操作,然后用LoadPicture加载预处理的图片; 2)调用GetPictureAttr函数来获取所加载的预处理图像中所有像索点的坐标、颜色信息; 3)对每个像素点调用函数MapPos,得到原图像中每个像索点在数组中的位置i; 4)计算每一个像素点经过旋转之后的新坐标,并将新坐标传递给MapPos函数,得到旋转之后每隔像素点在数组中的新位置i'; 5)将得到的保存了旋转之后各个像素点位置信息的新数组连同原像素点的颜色信息映射成图像信息,用Paint函数拷贝图像到显示设备。通过VC++编程,实现了以上函数功能,由于每帧的旋转都需要对图像的所有像素点进行计算,所以其计算量极大,同时图像的
基于DirectX的图像旋转算法的研究与实现 来自淘豆网m.daumloan.com转载请标明出处.