matlab图像几何变换
- 格式:doc
- 大小:188.00 KB
- 文档页数:8
学 号
光电图像处理实验报告
实验一: 图像几何变换
作 者 肖剑洪 专 业 电子科学与技术
学 院 物理与电子学院 指导老师 王晓明
完成时间
实验一 图像几何变换
一、实验目的
图像几何变换是图像处理与分析的基础内容之一。使学生掌握图像平移、
镜像、缩放和旋转等几何变换的方法以及程序实现。
二、实验设备
联想图像处理工作站
三、实验内容及要求 图像几何变换不改变图像的像素值,而是改变像素所在的几何位置,具有独特的方法。本实验的内容如下:
1.学会使用Matlab的图像处理工具箱(Image Processing Toolbox)。使学生初步具备使用该软件处理图像信息能力,并可以利用该软件完成本课程规定的其他实验和作业。
2.编程实现图像平移,要求平移后的图像大小不变;
3.编程实现图像的镜像;
4.编程实现图像的比例缩放,要求分别用最近邻插值、双线性插值和双三次插值三种方法来实现,并比较缩放效果;
5.编程实现以任意角度对图像进行旋转变换。
四、实验原理
1.图像平移
从上到下、从左到右依次计算新图像中的每个像素(x, y)在源图像中对应的坐标值(x0, y0);
即: x0 = x – △x,y0 = y – △y
其中,△x、△y分别是水平和垂直偏移量。
2.图像镜像
从上到下、从左到右依次计算新图像中的每个像素(x, y)在源图像中对应的坐标值(x0, y0);
即: x0 = fWidth – x,y0 = y 水平镜像
x0 = x,y0 = fHeight – y 垂直镜像
其中,fWidth、fHeight分别是图像的宽度和高度。
3.图像比例缩放
图像比例缩放是指将给定的图像在x轴方向按比例缩放fx倍,在y轴方向按比例缩放fy倍,从而获得一幅新的图像。从上到下、从左到右依次计算新图像中的每个像素(x, y)在源图像中对应的坐标值(x0, y0);即: x0 = [x / fx + ],y0 = [y / fy + ]
其中,fx、fy分别是水平和垂直方向的缩放比率,中括号表示对括号内表达
式取整。
图像的比例缩放所产生的图像中的像素可能在源图像中找不到相应的像素
点,这时就需要进行插值处理,通常可用最近邻插值和双线性插值算法来实现。
(1) 最近邻插值
对通过反变换得到的浮点坐标进行简单的取整操作,得到一个整数型坐标,
这个整数型坐标对应的原图像的像素值就是新图像的像素值。
(2)双线性插值
对通过反变换得到的浮点坐标,求出此浮点坐标对应原图像四个邻域整数型
坐标的灰度值,然后经过双线性插值得到新图像的像素值。
(,)(1)(1)([],[])(1)([]1,[])(1)([],[]1)([]1,[]1)gxyvufxyvufxyvufxyvufxy(3) 双三次插值
对通过反变换得到的浮点坐标,求出此浮点坐标对应原图像16 个邻域整数
型坐标的灰度值,然后经过双三次插值得到新图像的像素值。
4.图像旋转
一般图像的旋转是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角度。如图所示:
新图像坐标与原图像坐标对应关系:
0000cossinsincosxxyyxy 00cossinsincosxxyyxy
两个常量:
0102cossin222sincos222wwhfhwhf
图像旋转之后会出现许多空洞点,须对这些空洞点进行插值处理。可用近邻插值,均值插值算法。
五、实验步骤
1.根据实验内容的要求在Matlab软件中编写相应程序;
2.调试运行程序,并记录结果;
3.完成实验报告。
六、实验程序清单和实验结果及分析
1.图像平移
I = imread('f:/');
se = translate(strel(1), [25 25]);
J = imdilate(I,se);
imshow(I), title('Original')
figure, imshow(J), title('Translated');
2.图像镜像
A=imread('f:/');
[height,width,dim]=size(A);
tform=maketform('affine',[-1 0 0;0 1 0;width 0 1]);
B=imtransform(A,tform,'nearest');
tform2=maketform('affine',[1 0 0;0 -1 0;0 height 1]);
C=imtransform(A,tform2,'nearest');
subplot(1,3,1),imshow(A);
title('原图像');
subplot(1,3,2),imshow(B);
title('水平镜像');
subplot(1,3,3),imshow(C);
title('竖直镜像');
3.图像比例缩放
T1 = maketform('affine',[2 0 0; 0 1 0; 0 0 1]);
T2 = maketform('affine',[1 0 0; 0 2 0; 0 0 1]);
T3 = maketform('affine',[4/5 0 0; 0 3/5 0; 0 0 1]);
I = imread('f:/');
I1 = imtransform(I,T1);
I2 = imtransform(I,T2);
I3 = imtransform(I,T3);
imshow(I), figure, imshow(I1), figure, imshow(I2), figure, imshow(I3);
4.图像旋转
Image=imread('f:/');
angle=30;
pai=;
im1=(Image);subplot(211);
imshow(im1);
title('1');
roteang=angle/180*pai;
[im1X,im1Y]=size(im1);
rotmatrix=[cos(roteang),-sin(roteang);sin(roteang),cos(roteang)];
rrotmatrix=[cos(-roteang),-sin(-roteang);sin(-roteang),cos(-roteang)];
im2XY1=[im1X,im1Y]*rotmatrix;
im2XY2=[im1X,1]*rotmatrix;
im2XY3=[1,1]*rotmatrix;
im2XY4=[1,im1Y]*rotmatrix;
im2p11=[min([im2XY1(1),im2XY2(1),im2XY3(1),im2XY4(1)]),min([im2XY1(2),im2XY2(2),im2XY3(2),im2XY4(2)])];
im2X=round(max([im2XY1(1),im2XY2(1),im2XY3(1),im2XY4(1)])-im2p11(1));
im2Y=round(max([im2XY1(2),im2XY2(2),im2XY3(2),im2XY4(2)])-im2p11(2));
im2=uint8(zeros(im2X,im2Y))+255; for i=1:im2X
for j=1:im2Y
pij=round([i+im2p11(1)-1,j+im2p11(2)-1]*rrotmatrix);
if (pij(1)>=1)&&(pij(2)>=1)&&(pij(1)<=im1X)&&(pij(2)<=im1Y)
im2(i,j)=im1(pij(1),pij(2));
end
end
end;
subplot(212);
imshow(im2);
七、实验总结
MATLAB是一个实用性很强,MATLAB中有丰富的图形处理能力,提供了绘制各种图形、图像数据的函数。MATLAB提供了一组绘制二维和三维曲线的函数,他们还可以对图形进行旋转、缩放等操作。操作相对容易,比较完善的工具软件,使用起来比较方便。