文档介绍:=摘要=
图像处理老师的课很"抽像",很会"跳"....刚讲了一点"RBG转灰度图",就马上进军图像的几何变换了,同时也带来了一个新的实验(作業):<图像的旋转>.
要求:旋转弧度: 0<radian<pi/2 (顺时针旋转).
对于我这个"好学生"来说...当然掩盖不了心中的好奇心----图像旋转是怎么实现的?于是经过一定的探索(主要是matlab的用法)...终于实现了这个"旋转":)
本文就是关于这个"探索"过程的一点文字记录啦.
=预览一下=
matlab有一个图像处理工具(IPT),里面已经有一个图像旋转算法的实现了...函数名:imrotate(源图像,旋转角度)...这里将给出:源图像,IPT版本处理过的旋转后图像,我自己的算法处理过的旋转图像:
==原图像==
==IPT(imrotate)实现旋转==
==我自己的旋转函数結果==
==说明==
上面的旋转对于玩过图像处理PS的人来说是不是太简单了?在PS里面或者其他图像处理工具里面对于图像的旋转是"极"简单的...一点就是了:)
上面的"旋转"在生活中经常看到...你把一张生活照旋转一下就感觉到了哈.
=什么是图像的旋转=
图像的旋转是图像几何变换的一种...看到上面预览的图就能知道...旋转前后的图像的像素的RGB都是没有改变的,改变的只是每一个像素的所在位置....这个就是旋转的本质:
把原图像像素从原点(x,y)放到目标位置点上(x',y')..这个(x,y)到(x',y')的转换是经过旋转计算而来的...那么这个图像处理就是旋转处理(几何变换).
再看看上面的图,还真的发现只是图像的像素点的位置改变了,图像本身的彩色信息并没有改动什么.
=怎么SHOW旋转后的图像=
=图像是怎么显示的=
图像的显示都是基于矩阵像素来显示的....
设一张图像的大小是col*..在这里因为图像的显示是矩阵式的,,旋转后的图像就包含在这个正方形的矩阵中.
=计算旋转图像所需要的正方形=
因为图像是col*row的,所以这个正方形的边长 new_img_size = (col^2+row^2)^;
这样使用matlab就可以生成一个存储最终图像的rgb矩阵了:
[cpp] view plaincopy
img_rotated = uint8(zeros(new_img_size , new_img_size , 3); //%一个像素由RGB三个分量表现.  
=怎么旋转?=
现在来到正题了,上面已经把旋转的原理给讲清楚了...本质就是找到原点(x,y)的新位置(x',y'),然后把原点的像素复制到目标点上就行了...上面也提到了一点:旧坐标到新坐的变的是"旋转"而来的...下面来体现一下旋转的原因:
设一个原点P,P的坐标是:(x,y),这里的x是列分量,y是行分量.
那么P点离图像左上角的距离是:r=(x^2+y^2)^; 同时p到(1,1)点的连线