用MATLAB编程实现数字图像旋转

/ 2

用MATLAB编程实现数字图像旋转

黄胜忠(广西柳州高等师范专科学校,广西柳州545004)

作者简介:黄胜忠(1975-),男,广西贺州人,大学本科,副教授,主研方向:计算机算法、网络编程、数字图像处理。

摘要:文章论述了用Matlab编程实现数字图像旋转的基本方法,从计算机几何坐标中的图像旋转矩阵表示着手,给出了图像旋转变换的推导过程,用简单综合插值方法,基本解决了数字图像旋转后出现的空洞问题,并通过Matlab编程工具进行实验验证。

关键词:数字图像旋转;移动变换;旋转矩阵变换;简单综合插值。

数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。目前,数字图像处理的信息大多是二维信息。由于数据量大,因此对计算机的计算速度、存储容量等要求较高。随着微型计算机性能的提高,原来以大型机、小型机为主机的图像处理系统演变为以微机为主机的结构,其应用也迅速普及,当前图像处理技术在工业自动化、工业检测、遥感探测、军事、航空、生物医学等各个方面都发挥着十分重要的作用。

图像旋转是一种常用的数字图像处理技术,传统的图像旋转都是在二维空间中进行的,由于旋转后图像像素点坐标不再是整数,故旋转后必须对像素点灰度进行一维插值运算或二维插值运算,尤其是当对旋转后的图像质量要求较高时,需要采用高阶插值运算。

本文从通用的图像旋转矩阵着手,给出了图像旋转变及换简单综合插值的推导过程,并用Matlab编程工具进行实验验证图像旋转结果。

1Matlab简介

MATLAB是矩阵实验室(MatrixLaboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,可视化建模仿真和实时控制等功能。MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C、C#等语言来解算相同的事情简捷得多。

2图像旋转矩阵

一般图像的旋转是以图像的中心为原点,将图像上所有像素都旋转一个相同角度。图像的旋转变换后,图像的大小会改变。在图像旋转变换中既可以把转出显示区域的图像截去,也可以扩大范围(即是移动图像),以显示所有的图像。设点旋转角后的对应点为,r是点到原点(0,0)的距离,在旋转过程中,r保持不变。

利用公式进行图像旋转变换时要需要注意如下两点:

①图像旋转之前,为了避免信息的丢失,一定要进行坐标移动,使旋转后的图像在计算机屏幕上能全部看得到。图像的移动是将一副图像所有点都按照给定的偏移量在水平方向沿x轴平移△x、在垂直方向沿y轴纵移△y,移动后的图像与原图像相同,图像上的点P0(x0,y0)和P(x,y)之间的关系可以用如下的移动变换矩阵表示为:

②图像旋转之后,由于坐标取整数的原因,会出现许多空洞点,对这些空洞点必须进行填充处理,否则画面效果不好,一般也称这种操作为插值处理。最简单的方法是行插值和列插值、移动平均插值;另外还有运算效复杂一点的如双线性插值、曲线插值、曲面插值和高阶插值等等。通常效果较好的其计算量也较大。本文为了简化编程,采用简单的综合插值方法:

如果空点的上下左右四点均非空,则取这四点的平均值。

如果空点的左、右紧邻的两点都是非空点,而上、下紧邻的两点有空点,则用行插值法,取这两个非空点的平均值。

如果空点的上、下紧邻的两点都是非空点,而左、右紧邻的两点有空点,则用列插值法,取这两个非空点的平均值。

如果空点的上下左右四周边紧邻的八个点存在非空点,则用四邻域插值法,取各非空点的以点距为权的加权平均。

如果空点的四邻域的八个点均是空点,则此空点可能是图像本身的空洞点,不用插值。跳过。

对于下一个空点,重复(1)—(5),就可完成全部空点插值。

3图像旋转算法

①读入图像文件并把图像转为灰度图像,显示图像,X轴标注为图(a);

②计算图像旋转θ角后的四个顶点坐标(以便确定旋转后的图像大小);

③根据四个顶点坐标,计算移动偏移量△x、△y,移动图像(目的使旋转后的图像全部能见);

④计算图像旋转后的坐标并填充对应原图像坐标的灰度值;

⑤显示旋转后的图像(可观察到图像中有许多空洞点),X轴标注为图(b);

⑥找出四个顶点坐标围成的四边形内的空洞点并进行简单的综合插值;

⑦显示经插值处理后的图像,X轴标注为图(c)。

4Matlab实验结果

根据上述算法,编制图像旋转文件Image_move.m。运行Image_move.m文件,输入小猫的图像文件名,得到较满意的实验结果,见图2所示。图2-(a)是原图像;图2-(b)是旋转35度后末作插值处理的图像,可以看到有明显的空洞点;图2-(c)是旋转35度后作了简单综合插值处理的图像,空洞点已基本消失。

平面图像旋转后比原图像大,也就是图2-(b)、图2-(c)实际上比图2-(a)大。因为在Matlab格式语句(subplot(1,3,i),i=1,2,3。)的控制下,同在一个视窗输出的三个图像会自动缩放相同大小的三个方框内。若分不同视窗输出,会看到图2-(b)、图2-(c)比图2-(a)大许多。

5小结

通过实验说明,图像旋转问题主要是消除旋转图像中的空洞点,消除空洞点的方法主要是采用插值法。在众多的插值方法中,本文采用的简单综合插值法,虽然不属于最好的方法,但是计算较简单,而且很有效。

参考文献:

[1]冈萨雷斯(美).阮秋琦,阮宇智译.数字图像处理(第二版)[M].北京:电子工业出版社,2009.

[2]冈萨雷斯(美).阮秋琦,阮宇智译.数字图像处理(MATLAB版)[M].北京:电子工业出版社,2009.

[3]张志涌.MATLAB教程[M].北京:北京航空航天大学出版社,2009.

[4]吴恩华,柳有权.基于图形处理器(GPU)的通用计算[J].计算机辅助设计与图形学学报,2004,16(5):601-612.

[5]刘耀林,邱飞岳,王丽萍,等.基于GPU的图像快速旋转算法的研究及实现.计算机工程与科学,2008,30(6):48-50.