一、实验目的
掌握图像的基本几何变换的方法
1. 图像的平移
2. 图像的旋转
二、实验环境
1. PC计算机
2. MatLab软件/语言包括图像处理工具箱(Image Processing Toolbox)
3. 实验所需要的图片
三、实验原理
提示:图片平移就是实现运算
四、实验图像
图片名称: kugou.jpeg QQ.jpeg
图片尺寸: 512*512*3 512*512*3
五、实验步骤和结果
练习用matalb命令实现图像的缩放、旋转和平移操作
1. 读入图像并显示。
A = imread('kugou.jpeg');
imshow(A);B = imread("QQ.jpeg");
imshow(B);
2. 将图像放大1.5倍,插值方法使用三种不同方法,显示放大后的图像,比较不同插值方法的结果有什么不同。将图像放大到其它倍数,重复实验;选用其它图像,重复实验。
A1 = imresize(A, 1.5, 'nearest');
imshow(A1);B1 = imresize(B, 1.5, 'nearest');
imshow(B1);
A2 = imresize(A, 1.5, 'bilinear');
imshow(A2);B2 = imresize(B, 1.5, 'bilinear');
imshow(B2);
A3 = imresize(A, 1.5, 'bicubic');
imshow(A3);B3 = imresize(B, 1.5, 'bicubic');
imshow(B3);
最近邻域内插计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。
双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。
双三次内插方法计算量较大,但插值后的图像效果最好。
3. 图像缩小0.8、0.5倍,插值方法使用三种不同方法,显示并比较结果有什么差异。
提示:用imresize函数,imresize函数的语法格式为:B = imresize(A, m, method)
这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear' (双线性插值),'bicubic'(双三次插值),默认为'nearest'。
A1 = imresize(A, 0.8, 'nearest');
imshow(A1);
B1 = imresize(B, 0.8, 'nearest');
imshow(B1);A2 = imresize(A, 0.8, 'bilinear');
imshow(A2);
B2 = imresize(B, 0.8, 'bilinear');
imshow(B2);A3 = imresize(A, 0.8, 'bicubic');
imshow(A3);
B3 = imresize(B, 0.8, 'bicubic');
imshow(B3);
A1 = imresize(A, 0.5, 'nearest');
imshow(A1);
B1 = imresize(B, 0.5, 'nearest');
imshow(B1);A2 = imresize(A, 0.5, 'bilinear');
imshow(A2);
B2 = imresize(B, 0.5, 'bilinear');
imshow(B2);A3 = imresize(A, 0.5, 'bicubic');
imshow(A3);
B3 = imresize(B, 0.5, 'bicubic');
imshow(B3);
最近邻域内插计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。
双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。
双三次内插方法计算量较大,但插值后的图像效果最好。
4. 图像分别顺时针旋转30度、45度,插值方法使用三种不同方法,显示旋转后的图像并比较结果有什么不同。
提示:用imrotate函数,imrotate的语法格式为:B = imrotate(A, angle, method)
函数imrotate对图像进行旋转,参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。
A1 = imrotate(A, 30, 'nearest');
imshow(A1);
B1 = imrotate(B, 30, 'nearest');
imshow(B1);A2 = imrotate(A, 30, 'bilinea');
imshow(A2);
B2 = imrotate(B, 30, 'bilinea');
imshow(B2);A3 = imrotate(A, 30, 'bicubic');
imshow(A3);
B3 = imrotate(B, 30, 'bicubic');
imshow(B3);
A1 = imrotate(A, 45, 'nearest');
imshow(A1);
B1 = imrotate(B, 45, 'nearest');
imshow(B1);A2 = imrotate(A, 45, 'bilinea');
imshow(A2);
B2 = imrotate(B, 45, 'bilinea');
imshow(B2);A3 = imrotate(A, 45, 'bicubic');
imshow(A3);
B3 = imrotate(B, 45, 'bicubic');
imshow(B3);
最近邻域内插计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。
双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。
双三次内插方法计算量较大,但插值后的图像效果最好。
5. 编写实现图像平移的函数。
% 编写实现图像平移的函数hmove,平移量为x0,y0,平移前图像矩阵为i
function [I]=hmove(i,x0,y0);
[r,c]=size(i);
I(r+x0,c+y0)=0; % 平移后图像矩阵为I
for x=1:r;for y=1:c;x1=x+x0;y1=y+y0;I(x1,y1)=i(x,y);end;
end;
6. 调用平移函数,将灰度图平移100行20列,在同一个窗口中显示平移前和平移后的图像。
函数调用示例:I1=hmove(gray1,100,20);
I = im2double(A);
I1=hmove(I, 100, 20);
imshow(I1);
I = im2double(B);
I1=hmove(I, 100, 20);
imshow(I1);
六、实验思考
通过本次实验,初步掌握了图像的平移、旋转等图像的基本几何变换的方法。