matlab 图像几何变换 平移、旋转、缩放

时间:2020-12-15 19:04:34

1、缩放

该函数用于对图像做缩放处理。在matlab的命令窗口中输入doc imresize或者help imresize即可获得该函数的帮助信息

调用格式

B = imresize(A, m)

返回的图像B的长宽是图像A的长宽的m倍,即缩放图像。 m大于1,则放大图像; m小于1,缩小图像。

B = imresize(A, [numrows numcols])

numrows和numcols分别指定目标图像的高度和宽度。显而易见,由于这种格式允许图像缩放后长宽比例和源图像长宽比例不相同,因此所产生的图像有可能发生畸变。

[Y newmap] = imresize(X, map, scale)

[...] = imresize(..., method)

method参数用于指定在改变图像尺寸时所使用的算法,可以为以下几种:

'nearest': 这个参数也是默认的,即改变图像尺寸时采用最近邻插值算法;

'bilinear':采用双线性插值算法;

'bicubic': 采用双三次插值算法,在R2013a版本里,默认为这种算法,所以不同版本可能有不同的默认参数,使用之前建议使用命令help imresize获得帮助信息,以帮助信息为准;

2、旋转

函数功能:对图像进行旋转操作。

调用格式:

B = imrotate(A,angle)

将图像A(图像的数据矩阵)绕图像的中心点旋转angle度,正数表示逆时针旋转,负数表示顺时针旋转。返回旋转后的图像矩阵。以这种格式调用该函数,该函数默认采用最近邻线性插值(Nearest-neighbor interpolation)。旋转后的图像超出的部分填充0(黑色)。

B = imrotate(A,angle,method)

使用method参数可以改变插值算法,method参数可以为下面这三个值:

{'nearest'}:最邻近线性插值(Nearest-neighborinterpolation)

'bilinear':双线性插值(Bilinearinterpolation)

'bicubic':双三次插值(或叫做双立方插值)(Bicubicinterpolation)

B = imrotate(A,angle,method,bbox)

bbox参数用于指定输出图像属性:

'crop':通过对旋转后的图像B进行裁剪,保持旋转后输出图像B的尺寸和输入图像A的尺寸一样。

{'loose'}:使输出图像足够大,以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。一般上这种格式产生的图像的尺寸都要大于源图像的尺寸。

3、Reshape函数

    函数功能:重新调整矩阵的行数、列数、维数。

调用格式:

B = reshape(A,m,n)

返回一个m*n的矩阵B, B中元素是按列从A中得到的。如果A中元素个数没有m*n个,则会引发错误。

B = reshape(A,m,n,p,...)和B =reshape(A,[m n p ...])

返回一个和A具有相同元素的n维数组。但B的尺寸是m*n*p*...,m*n*p*...必须和prod(size(A))相等。即A和B元素个数相等。

B = reshape(A,...,[ ],...)

计算由占位符[ ]所表示的尺寸的长度,这样维度的乘积等价于prod(size(A))。而prod(size(A))的值必须能被的指定维数的乘积所整除。在这里面占位符[ ] 只能使用一次。

B = reshape(A,siz)

返回一个和A元素相同的n维数组,但是由向量siz来决定重构数组维数的大小,prod(siz)的数量值必须和prod(size(A))的保持一致。

4、平移

matlab实例:

clc;clear;close all;

img1=imread('1.jpg');
img1=rgb2gray(img1);
figure,imshow(img1);
imwrite(img1,'a1.jpg');
%%%%%%平移 
se=translate(strel(1),[20 20]);
img2=imdilate(img1,se);
figure,imshow(img2);
imwrite(img2,'a2.jpg');
%%%%%%旋转
img3=imrotate(img1,90);
figure,imshow(img3);
imwrite(img3,'a3.jpg');
% %%%%%缩放
img4=imresize(img1,2);
figure,imshow(img4);
imwrite(img4,'a4.jpg');