图像几何变换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

霾山衣修
课程设计说明书
题目:晶像齟迥变按紘辻及去现
学院(系):年级专业:学号:学生姓名:指导教师:教师职称:
燕山大学课程设计(论文)任务书
院(系):电气工程学院基层教学单位:自动化仪表系
年月日
燕山大学课程设计评审意见表
目录
第一章摘要 (1)
第二章基本原理 (2)
2. 1 MATLAB 的介绍 (2)
2.2图像平移的基本理论 (2)
2.3图像放缩的基本理论 (2)
2.4图像旋转的基本理论 (4)
2.5图像镜像的基本理论 (7)
第三章程序设计 (8)
3.1实现图像的平移 (8)
3.2实现图像的放缩 (9)
3.3实现图像的旋转 (11)
3.4实现图像的镜像 (12)
第四章学习心得 (15)
参考文献 (16)
第一章摘要
数字图像处理(Digital Image Processing)是通过讣算机对图像进行系列操作,从而达到某种预期目的的技术。

数字图像处理离不开计算机,因此又称为讣算机图像处理。

图像几何变换是计算机图像处理领域中的一个重要组成部分,也是值得深讨的一个重要课题。

在图像几何变换中主要包括图像的放缩、图像的旋转、图像的移动、图像的镜像、图像的块操作等内容,几何变换不改变图像的像素值,只改变像素所在的几何位置。

从广义上说,图像是自然界景物的客观反映,是人类认识世界和人类本身的重要源泉。

图像对我们并不陌生。

我们生活在一个信息时代,科学研究和统计表明,人类从外界获得的信息约有75%来自视觉系统,也就是从图像中获得的。

所以对数字图像的处理便显得尤为重要了。

我们在处理图像时往往会遇到要对图像进行几何变换的一些问题。

图像几何变换是我们学习和讨论的一个重要课题。

在图像几何变换中主要包括图像的缩放、旋转、移动、减取等内容。

英中使用最频繁的是图像的缩放和旋转,不论照片、图画、书报还是医学X光和卫星遥感图像都会用到这两项技术。

本文主要深讨了图像的几何变换(主要包括图像的平移、缩放、旋转、镜像等)理论,并在此基础上用MATLAB实现的过程。

MATLAB语法结构简单,并且具有极强的数值计算、图形文字处理、数据分析、图形绘制及图像处理等功能,在本文中我用MATLAB实现了图像的平移、放缩、旋转和镜像。

关键字:图像处理:几何变换:MATLAB;函数调用
第二章基本原理
2. 1 MATLAB的介绍
MATLAB是美国Mathworks公司开发的新一代科学计算软件:MATLAB是英文MATtrix LABoratory(矩阵实验室)的缩写:MATLAB是一个专门为科学计算而设讣的可视化汁算器。

利用这个汁算器中的简单命令,能快速完成苴他高级语言只有通过复杂方案才能实现的数值计算和图形显示。

MATLAB是一种既可交互使用又能解释执行的讣算机编程语言。

所谓交互使用,是指用户输入一条语句后立即就能得到该语句的讣算结果,而无需像C语言那样首先编写源程序,然后对之进行编译,连接,才能最终形成可执行文件。

MATLAB语言可以用直观的数学表达式来描述问题,从而避开繁琐的底层编程,因此可大大提髙工作效率。

MATLAB是解决工程技术问题的技术平台。

利用它能够轻松完成复杂的数值计算,数据分析,符号汁算和数据可视化等任务。

MATLAB软件由主包和各类工具箱构成。

其中,主包基本是一个用C/C++等语言编写成的函数库。

该函数库提供矩阵(或数组)的各种算法以及建立在此基础上的各种应用函数和一些相关的用户有好操作界而。

而工具箱从深度和广度上大大扩展了MATLAB主包的功能和应用领域。

随着自身的不断完善和发展,MATLAB功能越来越强大,而且应用的范用也越来越广。

2. 2图像平移的基本理论
图像平移是将一幅图像中所有的点都按照指定的平移量在水平、垂直方向移动,平移后的图像与原图像相同。

平移后的图像上的每一点都可以在原图像中找到对应的点。

Dx =2 , Dy =-1
=x>
x = x o + Z
y =
利用齐次坐标, 变换前后图像上的点H)(A O,夕0)和P0y)之间的关系可以用如卜•的
矩阵变换表示为:
'xO
1 0 Ax'
X
y = 0 1 Ay
y 1 _
0 0 1
1
2. 3图像缩放的基本理论
图像比例缩放是指将给宦的图像在x 轴方向按比例缩放fx 倍,在y 轴方向上按比例缩 放fy 倍,从而获得一幅新的图像。

比例缩放前后两点刃(“,丿0)、P&,司之间的关 系用矩阵形式可以表示为:
三个入口参数:原图像I, 缩放倍数「,插值方式mode
fx 0 0_
0方0
0 0 0
1
X=f x XO y=fyyo
MATLAB图像处理工具箱中的函数im resiz e可以对图像进行插值缩放,如果不指定插值方法,则默认使用最近邻插值法。

im resiz e函数的语法格式为:
B 二im resiz e (A , m , m ethod )
这里参数m ethod用于指左插值的方法,可选的值为nea rest (最近邻法),bilinea r (双线形插值)及bicubic(双三次插值),默认值为nea rest。

B = im resiz e (A , m , m ethod )返回原图A的m倍放大图像(m小于1时效果是缩小)。

图像的缩放操作将会改变图像的大小,产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。

一般的方法是直接赋值为和它最相近的像素值,也可以通过一些插值算法来计算。

下而的代码直接采用了前一种做法。

2. 4图像旋转的基本理论
图像的旋转实际上是坐标系的旋转,F图给出了图像转的原理示意图。

旋转是指将图像中所有的像素(基准点除外)按给定角度()在XY平而内顺时针
x=rCos( 0 -a )=rCos 0 Cos a +rSin 0 Sin a =xOCos a +yOSin a y=rSin( 0-a )=rSin e Cos a -rCos e Sin a =-xOSin a +yOCos a
图像的旋转变换也可以用矩阵变换表示。

上式写成矩阵表达式为:
sina
cosa 0
上述旋转是以坐标原点(o, o )为基点进行的,但在实际应用中,往往是一图像中心 为基点对图像进行旋转。

具体操作是:先将坐标系平移到图像中心,再进行旋转,然 后平移回原始坐标原点。

在对数字图像进行旋转的时候,各象素的坐标将会发生变化,使得旋转之后不能正 好落在整数坐标处,因此,需要进行插值。

一般来说,旋转后的图像会比原图大,超出 原 图像的部分值为0o
在二维变换中,点P0旋转到点P1,可以通过矩阵变化计算得出。

由于有浮点计算 带来的误差,P1点在某些时候会落在预期坐标的附近,而带来图形部分轻微的失真。

在工具箱中的函数im rota te 可用来对图像进行插值旋转,默认的插值方法也是 最近邻插值法。

Im rota te 的语法格式为:
B = im rota te (A , ang le, m ethod )
函数im rota te 对图像进行旋转,参数m ethod 用于指左插值的方法,可选的值为 nea rest (最近邻法),bilinea r (双线形冲值)及bicubic (双三次插值),默认 值为 nea rest 。

im rota te 函数可把源图像以其几何中心为轴旋转任意A 角后显示,并得到相应矩 阵。

旋转后的图像相当于用一矩形把旋转后的图像内接起来,四个角填充以黑色。

cosa -sin a 0
y<)
1
或逆时针方向沿圆弧路径进行变换的过程。

当基准点为原点时,原始点(M ), jO )和变
入口参数:原图像,
旋转角度
图像旋转算法流程图
2.5图像镜像的基本理论
两个入口参数:原图
图像苗像算法流稈图
第三章程序设计
3. 1图像的平移
3. 1. 1平移的程序
1、用程序实现图像的平移
i=imread(,Sailboat256G・ bmp'); imshow(i);
[mO nO]=size(i);%处理后图像初始化
for y=l:nO;
for x=l:m0;
x0=x-0; y0=y-40;
if
xO>=l&&xO<=mO&&yO>=l&&yO<=nO:
I(xO,yO)=i(x, y);
end;
end;
imshow(I)
2、用调用函数实现图像的平移
调用函数
function I=pingyi(i)
[mO nO]=size(i) ;%处理后图像初始化
for y=l:nO;
for x=l:m0;
x0=x-0;
y0=y-40;
if
xO>=l&&xO<=mO&&yO>=l&&yO<=nO;
I(xO,yO)=i(x, y);
end; end;
主程序
i=imread(,Sailboat256G・ bmp');
I=pingyi(i);
imshow(I);
3. 1. 2平移的图像
3.2图像的缩放3. 2. 1缩放的程序
1、用程序实现图像的平移
A=imread(,Sailboat256G・ bmp'); imshow(A); titleC 原图');
B二imresize(A, 2);
figure
imshow(B);
titleC 二倍图');
C=imresize(A, 0・ 5); figure imshow(C); titleC 二分之一图');
2、用调用函数实现图像的平移调用函数function [B,Cj=suofang(A)
B二imresize(A, 2);
figure imshow(B);
titleC 二倍图’);
C=imresize(A, 0・ 5); figure imshow(C); titleC 二分之一图’); 主程序
A=imread(,Sailboat256G・ bmp'); B C^=suofang(A) 3・2. 2缩放的图像
原图
二分之一图
二倍園
3.3图像的旋转
程序一
3. 3. 1旋转的程序
I=imread(' Sailboat256G・ bmp');
Lm, n] =size(I);
Tl=[l 0 0;0 1 0-127 -127 1];
a=pi/6;
T2= [cos (a), sin(a), 0;-sin(a), cos (a), 0;0, 0, 1]; T3=[l 0 0;0 1 0;127 127 1];
T=T1*T2*T3;
% [127, 127, 1]*T
for i=l:m
for j=l:n
a=[i, j, 1]*T;
x=uint8(a(l))+l;
y=uint8(a(2))+l;
12 (x, y)=I(i, j);
end
end
imshow(I2,[])
3・3. 2旋转的图像
程序二
3. 3. 1旋转的程序
I=imread( Sailboat256G・ bmp' ); figure imshow(I);
A=imrotate(I, 45, ' nearest');
imshow(uint8(A));
3. 3・2旋转的图像
3. 4图像的镜像
3. 4. 1镜像的程序
水平镜像
i=imread( Sailboat256G・bmp’);
i=double(i);
figure
imshow(uint8(i));
[mO, nO] =size(i);
for y=l:nO yO二nO_y;
if yO>=l&&yO<=nO
I (:, yO) =i (:, y);
end
end imshow(I,[]);
垂直镜像
i=imread(' Sailboat256G・bmp’);
i=double(i);
figure imshow(uint8(i)); [mO, nO] =size(i); for x=l:mO xO=mO-x;
if xO>=l&&xO<=nO 1(x0, :)=i (x,:); end end imshow(I,[]);
水平垂直镜像
i=imread(' Sailboat256G・bmp’);
i=double(i);
figure imshow(uint8(i));
[mO, nO] =size(i);
for x=l:m0
for y=l:nO
xO二mO-x+1; yO=nO-y+l;
if
xO>=l&&xO<=mO&&yO>=l&&yO<=nO; 1(x0, yO)=i (x, y);
end
end
end imshow(I,[]);
3. 4. 2镜像的图像
也很里很开心这
门课程有了更深一步的认识。

我明白了学习理论知识和实际应用是两个不同的层而,光懂得理论知识是远远步够的。

在这几天里,我们小组通过査阅各种书籍、资料,与一起讨论研究,得到了我们所要的结果,让我更体会到了团队一起学习的高效性和重要性。

同时也让我对数字图像处理有了更高一层次的认识。

并且在老师的帮助下,我学会了使用Matble编写简单的程序来实现数字图像的几何变换,包括了基础知识的积累、理论的成型、MATLAB语言编写和程序的使用、理论过程的MATLAB程序实现,和期间程序的不断编写和调试,「叮以说让我对于MATLAB 的数字图像处理整个过程都有了一个很完整和客观的认识,并在参与英中的程序编写和实现中积累了非常宝贵的经验。

通过这次课程设汁让我认识到了自己很多的不足,对学过的知识掌握的不够,而且缺乏独立思考问题的能力,以后我一泄努力培养自己独立思考的能力,使自己能够独立应对问题。

这次课程设计我之所以能过完成,很感谢老师您耐心的为我解答各种问题,给我了正确的引导,谢谢您。

参考文献
1、数字图像处理学电子工业出版社贾永红
2、数字图像处理(Mat lab版)电子工业出版社冈萨雷斯2006
3、艮他数字图像处理和matlab编程方面的书籍及相关学习资料
4、薛年喜MATLAB在数字信号处理中的应用清华大学出版社2003年薛。

相关文档
最新文档