编程实现一幅图像的平移镜像旋转缩小和放大Word文档格式.docx
- 文档编号:17667260
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:23
- 大小:346.99KB
编程实现一幅图像的平移镜像旋转缩小和放大Word文档格式.docx
《编程实现一幅图像的平移镜像旋转缩小和放大Word文档格式.docx》由会员分享,可在线阅读,更多相关《编程实现一幅图像的平移镜像旋转缩小和放大Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
2周
指导教师签名:
年月日
系主任签名:
摘要
图像是对三维实际景物的平面投影,图形图像处理主要是通过计算机对图像进行处理,从而达到预期的效果的技术。
为了观测需要,常常需要进行各种不同的几何变换,主要包括图像的平移变换,图像水平、垂直镜像变换,图像旋转变换,图像比例变换。
实际上,几何变换不改变像素值,而是改变像素所在的位置。
在图像处理中,可以通过Matlab来实现图像的几何变换,此软件的语法结构简单,并且具有极强的数值计算、图形文字处理、数据分析、图形绘制及图像处理等功能。
本次课程设计即是利用Matlab软件编程实现对图像的几何变换。
关键字:
图像平移、图像镜像变换、图像旋转、图像比例变换、Matlab
Abstract
Imageplaneprojectionof3Dsceneisactual,graphicimageprocessing,mainlyforimageprocessingbycomputer,soastoachievetheexpectedeffectoftechnology.Inordertoobservation,oftenrequireavarietyofgeometrictransformations,includingtheimagetranslation,imagelevel,verticalimagetransform,imagerotation,imagescaling.Infact,thegeometrictransformationdoesnotchangethepixelvalue,butthechangeofpixellocation.
Inimageprocessing,canbeachievedbytheMatlabimagegeometrictransformation,thegrammaticalstructureofthissoftwareissimple,andhasstrongnumericalcalculation,graphicsandtextprocessing,dataanalysis,graphicsrenderingandimageprocessingetc..ThecurriculumdesignistheuseofMatlabsoftwareprogrammingofgeometrictransformationofimage.
Keywords:
imagetranslation,mirrorimagetransform,imagerotation,imagescaling,Matlab
1图像的几何变换
1.1图像几何变换内容
图像几何变换又称为空间变换,是将一幅图像中的坐标位置映射到另外一幅图像中的新坐标位置。
它不改变图像的像素值,只是在图像平面上进行像素的重新安排。
通过几何变换,可以根据应用的需要使原图像产生大小、形状和位置等各方面的变化。
也就是说,几何变换可以改变像素点所在的几何位置以及图像中各物体之间的空间位置关系,这种运算可以被看成是将各物体在图像内移动,特别是图像具有一定的规律性时,一个图像可以由另一个图像通过做几何变换来产生。
几何变换可以分为图像的位置变换(平移、镜像、旋转)、形状变换(放大、缩小和剪切)以及图像的复合变换。
图像几何变换的一般表达式为:
(1.1)
其中(x,y)表示像素点的坐标位置,f(x,
y)表示图像像素点(x,
y)的灰度值。
图像几何变换就是建立一幅图像与其变换后的图像中所有各点之间的映射关系。
1.2Matlab仿真使用的主要函数
本次课程设计将利用Matlab实现图像的几何变换,使用到的主要函数有:
(1)imread
用于读入图像文件,语法格式如:
a=imread('
F:
\gudesi.jpg'
)
(2)imwrite
用于写入图像文件,语法格式如:
imwrite(a,'
(3)imshow
用于图像文件的显示,语法格式如:
imshow(i)
三种函数的联合应用如下:
i=imread('
);
imshow(i);
%显示图像
title('
原始图像'
)%加上图像标题
运行结果为:
图1.1原始图像显示
(4)fliplr/flipud
用于实现矩阵的左右/上下翻转,语法格式为:
fliplr(X)%使矩阵X沿垂直轴左右翻转;
flipud(X)%使矩阵X沿垂直轴上下翻转。
(5)imrotate
用于对图像进行旋转操作,语法格式为:
I=imrotate(A,angle)%将图像A(图像的数据矩阵)绕图像的中心点旋转angle度,正数表示逆时针旋转,负数表示顺时针旋转,返回旋转后的图像矩阵。
以这种格式调用该函数,该函数默认采用最近邻线性插值(Nearest-neighborinterpolation),旋转后的图像超出的部分填充0(黑色)。
(6)imresize
用于改变图像的大小缩放,语法格式为:
B=imresize(A,m,method)%返回原图A的m倍放大的图像(m小于1时效果是缩小),
这里参数method用于指定插值的算法,可选用的值为'
nearest'
(最邻近法),'
bilinear'
(双线性插值算法),'
bicubic'
(双三次插值算法),默认为'
(最邻近法)。
2图像的平移变换
2.1图像平移变换原理
图像平移是将一幅图像中所有的点都按照指定的平移量在水平、垂直方向移动,平移后的图像与原图像相同。
平移后的图像上的每一点都可以在原图像中找到。
设(x0,y0)为原图像上的一点,图像水平平移量tx,垂直平移量为ty,则平移后点(x0,y0)的坐标变为(x1,y1)。
(x0,y0)与(x1,y1)之间的关系为:
x1=x0+tx;
(2.1)
y1=y0+ty;
(2.2)
以矩阵的形式表示为:
(2.3)
它的逆变化:
(2.4)
即:
(2.5)
这样,平移后的图像上的每一点都可以在原图像中找到对应的点。
例如,对于新图中的(0,0)像素,代入上面的方程组,可以求出对应原图中的像素(-tx,-ty)。
如果tx或ty大于0,则(-tx,-ty)不在原图中。
对于不在原图中的点,可以直接将它的像素值统一设置为0或则255(对于灰度图就是黑色或白色)。
同样,若有点不在原图中,也就说明原图中有点被移出显示区域。
如果不想丢失被移出的部分图像,可以将新生成的图像宽度扩大|tx|,高度扩大|ty|。
2.2图像平移变换的matlab实现
根据图像平移变换原理可知程序实现比较简单,利用matlab实现图像的平移变换的程序
如下:
%平移变换
I=imread('
figure
(1);
subplot(2,2,1);
imshow(I);
(a)原始图像'
%在原来的结构元素上进行y和x的平移,平移量分别为100,-100
%左下平移
se1=translate(strel
(1),[100-100]);
%形态学膨胀后J就是平移的结果
J1=imdilate(I,se1);
subplot(2,2,2);
imshow(uint8(J1));
(b)左下平移'
%右下平移
se2=translate(strel
(1),[100100]);
J2=imdilate(I,se2);
subplot(2,2,3);
imshow(uint8(J2));
(b)右下平移'
%右上平移
se3=translate(strel
(1),[-100100]);
J3=imdilate(I,se3);
subplot(2,2,4);
imshow(uint8(J3));
(b)右上平移'
结果为:
图2.1图像的平移实现
可以看到程序代码成功实现了图像向不同方向的平移。
3图像的镜像变换
3.1图像镜像变换原理
图像的镜像变换分为两种:
一种是水平镜像,另外一种是垂直镜像。
图像的水平镜像操作是将图像的左半部分和右半部分以图像垂直中轴线为中心镜像进行对换;
图像的垂直镜像操作是将图像上半部分和下半部分以图像水平中轴线为中心镜像进行对换。
设图像高度为Height,宽度为Width,原图中的(
,
)经过水平镜像后坐标将变为(Width-
),其矩阵表达式为:
(3.1)
逆运算矩阵表达式为:
(3.2)
即
(3.3)
同样,(
)经过垂直镜像后坐标将变为(
,Height-
(3.4)
(3.5)
即
(3.6)
3.2图像镜像变换的matlab实现
根据图像镜像变换原理可得,利用matlab实现图像的镜像变换的程序:
%镜像
figure
(2)
imshow(uint8(I));
)
(b)原始图像'
I=double(I);
h=size(I);
I_fliplr(1:
h
(1),1:
h
(2),1:
h(3))=I(1:
h
(1),h
(2):
-1:
1,1:
h(3));
%水平镜像变换
I1=uint8(I_fliplr);
imshow(I1);
(c)水平镜像变换'
I_flipud(1:
h(3))=I(h
(1):
%垂直镜像变换
I2=uint8(I_flipud);
imshow(I2);
(d)垂直镜像变换'
结果如下:
图3.1图像镜像变换的实现
可以看到,程序代码成功实现了图像的镜像变换。
4图像的旋转变换
4.1图像旋转变换原理
图像的旋转是指以图像中的某一点为原点以逆时针或顺时针方向旋转一定的角度,通常是围绕图像的起始点以逆时针旋转。
旋转后,图像的大小一般会改变。
这样,就可以利用解析几何的方法来实现图像的旋转。
和图像平移一样,既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。
如下图所示,点(x0,y0)经过旋转θ度后坐标变成(x1,y1)。
图4.1图像旋转示意图
在旋转前:
(4.1)
旋转后:
(4.2)
写成矩阵表达式为:
(4.3)
其逆运算如下:
(4.4)
图像旋转以后因为像素位置不再是整数,会出现空穴的现象(如上图蓝色箭头所示),可以用插值法来解决。
所谓插值法就是在判断为空穴的位置上填充一个估计的值。
目前常用的方法有最近邻插值法、线性插值法和样条插值法。
最近邻插值算法操作简单、运算速度高,但是差值效果较差,生成的图像质量较差,易出现明显的块状效应或图像模糊。
样条插值法精确度高,插值后图像质量显著变好,但是样条插值的计算过程复杂,执行时间长,难以实现硬件化。
在这里用的是最近邻插值法,操作比较简单对于图像质量显示也较好。
最近邻插值法是将空穴像素周围像素的均值作为填充值填在该空穴点中,如:
(4.5)
其空穴像素点为
的周围(上、下、左、右)的像素值为
,则该点的像素值
,即
。
(4.6)
4.2图像旋转变换的matlab实现
根据图像旋转变换的原理可得到图像旋转的matlab实现程序为:
%旋转变换
x1=imrotate(I,30,'
'
crop'
%最邻近法逆时针旋转30°
x2=imrotate(I,30,'
%双线性插值法逆时针旋转30°
x3=imrotate(I,-30,'
%最邻近法顺时针旋转30°
x4=imrotate(I,-30,'
%双线性插值法顺时针旋转30°
figure;
subplot(3,2,1);
subplot(3,2,2);
subplot(3,2,3);
imshow(x1);
最邻近法逆时针旋转30°
'
subplot(3,2,4);
imshow(x2);
双线性插值法逆时针旋转30°
subplot(3,2,5);
imshow(x3);
最邻近法顺时针旋转30°
subplot(3,2,6);
imshow(x4);
双线性插值法顺时针旋转30°
图4.2图像的旋转实现
小图状态下看不出两种算法的区别,但是大图状态下可以看出两种算法双线性插值法的效果会好一些。
5图像的比例变换
5.1图像比例变换原理
上面的几种图像几何变换中都是1:
1的变换,而图像的缩放操作将会改变图像的大小,产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。
一般的方法是直接赋值为和它最相近的像素值,也可以通过一些插值算法来计算。
下面介绍最邻近算法。
假设图像x轴方向缩放比率为fx,y轴方向缩放比率为fy,那么原图中点(x0,y0)对应与新图中的点(x1,y1)的转换矩阵为:
(5.1)
(5.2)
(5.3)
例如,当fx=fy=0.5时,图像被缩放到一半大小,此时缩小后图像中的(0,0)像素对应于原图中的(0,0)像素;
(0,1)像素对应于原图中的(0,2)像素;
(1,0)像素对应于原图中的(2,0)像素,以此类推。
在原图基础上,每行隔一个像素取一点,每隔一行进行操作。
其实是将原图每行中的像素重复取值一遍,然后每行重复一次。
5.2图像比例变换的matlab实现
根据图像比例变换的原理及相应算法可得到,图像的放大和缩小的matlab实现程序为:
%比例变换
\gudesi1.jpg'
%I为原始图像
b1=imresize(I,2,'
b2=imresize(I,2,'
b3=imresize(I,0.5,'
b4=imresize(I,0.5,'
imshow(b1);
最邻近法放大2倍'
imshow(b2);
双线性插值法放大2倍'
imshow(b3);
最邻近法缩小2倍'
imshow(b4);
双线性插值法缩小2倍'
图5.1图像的放大和缩小的原始图像
图5.2图像的放大(最邻近法)
图5.3图像的放大(双线性插值法)
从结果图中可以看到双线性插值法效果并没有最邻近法好,有模糊感觉,这是因为所使用的图像素不是很大。
图5.4图像的缩小(最邻近法)图5.5图像的缩小(双线性插值法)
6心得体会
通过这次通信工程应用技术综合训练与实习的课程设计,让我重新复习了有关于图像处理方面的知识,同时也对于matlab这一功能强大的软件的使用更加的熟练,对于使用matlab进行一定的软件编程也有了很多的进步,能够更加灵活地进行运用。
通过这次的课程设计,我对图像几何变换的原理,包括图像的平移变换,图像的水平、垂直镜像翻转,图像的旋转及图像的放大与缩小等原理都有了更清楚的认识,也明白了它们的实现机制。
对于使用Matlab去实现数字图像的处理也有了更好的认识。
这次课程还使我意识到所有的知识都是需要用实践去帮着理解的,所谓理论指导实践,很好的实践能帮助我们更好地去理解知识,对于知识的掌握更加牢靠。
而在复习以前所学知识的同时其实也实现了温故知新,对于旧知识有了新的理解。
对于工程实践,要想实现预期的效果,必须明白它实现的机制和相应的算法,只有通过相应的理论来指导,我们才能有所创新,才能有所突破。
参考文献
[1]杨杰,黄朝兵.数字图像处理及Matlab实现.北京:
电子工业出版社2004年版
[2]郑阿奇,曹戈,赵阳.Matlab实用教程[M].北京:
电子工业出版社2002年版
[3]张弘.数字图像处理与分析[M].北京:
机械工业出版社2005年版
[4]孙兆林.Matlab6.X图像处理[M].北京:
清华大学出版社2010年版
[5][美]冈萨雷斯.温茨著.数字图像处理.2版.北京:
电子工业出版社,2002年版
[6]陈怀琛等编.MATLAB及在电子信息课程中的应用.北京:
电子工业出版社,2007年版
附录
程序代码:
clearall
closeall
figure(3)
\xiaozhu.jpg'
figure(4)
subplot
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 实现 图像 平移 旋转 缩小 放大