图像的几何变换包括平移、旋转、缩放、错切、镜像变换、转置等,是将一幅图像中的坐标映射到另外一幅图像中的新坐标位置,它不改变图像的像素值,只是改变像素所在的几何位置,使原始图像按照需要产生位置、形状和大小的变化。
缩放:
MATLAB中的imresize
函数用于对图像进行缩放处理。该函数的调用格式如下:
B = imresize(A, m)
其中,A
表示要缩放的图像,m
表示缩放系数。缩放后的图像保存在B
中。
imresize
函数还可以接受其他可选参数,例如:
'bilinear'
:采用双线性插值算法。'bicubic'
:采用双三次插值算法。[numrows numcols]
:指定目标图像的高度和宽度。
当使用[numrows numcols]
参数时,缩放后的图像可能会发生畸变。如果希望保持源图像的长宽比例,建议使用双线性或双三次插值算法。
1.将灰度图像‘cameraman.jpg’调整大小。
(1)增大3倍;
% 读取灰度图像 'cameraman.jpg'
img = imread('cameraman.jpg');
% 最近邻插补
img_resized1 = imresize(img, 3, 'nearest');
imshow(img_resized1);
% 双线性插补
img_resized2 = imresize(img, 3, 'bilinear');
imshow(img_resized2);
% 双三次插补
img_resized3 = imresize(img, 3, 'bicubic');
imshow(img_resized3);
(2)减少1/2;
% 读取灰度图像 'cameraman.jpg'
img = imread('cameraman.jpg');
% 最近邻插补
img_resized1 = imresize(img, 0.5, 'nearest');
imshow(img_resized1);
% 双线性插补
img_resized2 = imresize(img, 0.5, 'bilinear');
imshow(img_resized2);
% 双三次插补
img_resized3 = imresize(img, 0.5, 'bicubic');
imshow(img_resized3);
(3) 调整大小为〔20 80〕。
% 读取灰度图像 'cameraman.jpg'
img = imread('cameraman.jpg');
% 最近邻插补
img_resized1 = imresize(img, [20 80], 'nearest');
imshow(img_resized1);
% 双线性插补
img_resized2 = imresize(img, [20 80], 'bilinear');
imshow(img_resized2);
% 双三次插补
img_resized3 = imresize(img, [20 80], 'bicubic');
imshow(img_resized3);
旋转:
MATLAB中的imrotate
函数用于对图像进行旋转操作。该函数的调用格式如下:
B = imrotate(A, angle)
其中,A
表示要旋转的图像,angle
表示旋转的角度。旋转后的图像保存在B
中。
imrotate
函数还可以接受其他可选参数,例如:
'method'
参数用于指定插补方法,可选值包括'nearest'
(最近邻插补)、'bilinear'
(双线性插补)和'bicubic'
(双三次插补)。'bbox'
参数用于指定旋转后的图像边界框,格式为[xmin ymin width height]
,其中(xmin, ymin)
为图像左上角的坐标,width
和height
分别为旋转后图像的宽度和高度。
2. 将灰度图像‘cameraman.jpg’进行旋转。
(1)顺时针旋转30°;
(2)逆时针旋转60°;
(3)逆时针旋转90°;
(4)用参数‘crop’逆时针旋转60°。
完整代码:
A = imread('cameraman.jpg'); % 读取灰度图像 'cameraman.jpg'
B11 = imrotate(A,-30,'bicubic'); % 顺时针旋转30度(双三次插补)
B12 = imrotate(A,-30,'bilinear'); % 顺时针旋转30度(双线性插补)
B13 = imrotate(A,-30,'nearest'); % 顺时针旋转30度(最近邻插补)
B21 = imrotate(A,60,'bicubic','crop'); % 用参数'crop'逆时针旋转60度(双三次插补)
B22 = imrotate(A,60,'bilinear','crop'); % 用参数'crop'逆时针旋转60度(双线性插补)
B23 = imrotate(A,60,'nearest','crop'); % 用参数'crop'逆时针旋转60度(最近邻插补)
B31 = imrotate(A,90,'bicubic'); % 逆时针旋转90度(双三次插补)
B32 = imrotate(A,90,'bilinear'); % 逆时针旋转90度(双线性插补)
B33 = imrotate(A,90,'nearest'); % 逆时针旋转90度(最近邻插补)
subplot(3,3,1);imshow(B11);
subplot(3,3,2);imshow(B12);
subplot(3,3,3);imshow(B13);
subplot(3,3,4);imshow(B21);
subplot(3,3,5);imshow(B22);
subplot(3,3,6);imshow(B23);
subplot(3,3,7);imshow(B31);
subplot(3,3,8);imshow(B32);
subplot(3,3,9);imshow(B33);
剪切:
MATLAB中的imcrop
函数用于对图像进行裁剪操作。该函数的调用格式如下:
I2 = imcrop(I,rect)
X2 = imcrop(X,map,rect)
RGB2 = imcrop(RGB,rect)
在这些调用格式中,rect
表示要裁剪的矩形区域,可以是一个包含四个元素的向量,例如[xmin ymin width height]
,也可以是一个坐标点对,例如[xmin ymin]
。通过指定矩形区域,可以进一步控制裁剪的位置和大小。
3.将索引图像chess.mat进行剪切 ,非交互式剪切,剪切范围为[30 60 40 100]。
MATLAB中的subimage
函数用于在图形窗口中显示图像,并可以设置横轴和纵轴的坐标值范围。它必须与subplot
函数一起使用,后者用于指定下一个要显示的图像在整个图像显示窗口中的分块。
subimage
函数的调用格式如下:
H = subimage(x, y, ...)
其中,x
和y
表示图像在图形窗口中的坐标位置,其他参数可选,用于指定要显示的图像。返回的H
是图像句柄,可以用于后续操作。
需要注意的是,subimage
函数显示的图像可以是logical、uint8、uint16或double类型。
完整代码:
load chess.mat;
subplot(1,2,1);
subimage(X,map);
title('原图像')
X1=imcrop(X,map,[30 60 40 100]);
subplot(1,2,2);
subimage(X1,map);
title('原图剪切块[30 60 40 100]')