1.图像的平移
图像的平移是图像的几何变换中最简单的变换之一,它是将一幅图像上的所有点都按照给定的偏移量沿水平方向、垂直方向移动,平移后的图像大小与原图像相同。
在Matlab中没有直接使用的函数,所以这里我们先写一个函数 move.m,保存在子文件中方便以后直接调用。
function movepic=move(I,a,b);
% I 为原始图像,a、b分别表示沿水平方向,垂直方向移动的距离
%不考虑平移之后图像溢出的情况,找不到对应点的地方都赋为1
[M,N,G]=size(I);% 利用size函数获取图像大小
I=im2double(I);% 将图像数据类型转换为双精度
%分四种情况对新图像进行赋值
for i=1:M
for j=1:N
if a<0 && b<0;
movepic(i,j,:)=I(i,j,:);
else if a>0 && b>0;
movepic(i+a,j+b,:)=I(i,j,:);
else if a>0 && b<0;
movepic(i+a,j,:)=I(i,j,:);
else if a<0 && b>0;
movepic(i,j+b,:)=I(i,j,:);
end
end
end
end
end
end
下面还是随手百度一张阔爱的图~
以上图为例,进行平移
代码:
clear all;
clc;
I=imread('C:\Users\Administrator\Desktop\timg.jpg');
imshow(I);%显示原图
axis on; %在坐标系中显示
% a、b的值根据自身实际情况设计
a=50;
b=50;
movepic_1=move(I,a,b);%调用写好的函数
figure,imshow(movepic_1);%显示平移后的图
axis on;
结果:
噔噔噔,平移结束~
2.图像的缩放
图像的缩放是指将原图像在x轴方向(即水平方向)按比例缩放x倍,在y轴方向(即垂直方向)按比例缩放y倍,从而得到一幅新图像。
注意:如果x≠y,那么图像可能产生几何畸变
在Matlab中,提供了imresize()函数进行缩放操作。
调用的方式有以下几种:
(1)B = imresize(A, m)
返回的图像B的长宽是图像A的长宽的m倍,即缩放图像。 m大于1, 则放大图像; m小于1, 缩小图像。
(2)B = imresize(A, [numrows numcols])
numrows和numcols分别指定目标图像的高度和宽度。 显而易见, 由于这种格式允许
长宽比例不相同,因此所产生的图像有可能发生畸变。
(3)[Y newmap] = imresize(X, map, m)
对图像A进行缩放,m是缩放比例,它的取值可以使一个数值,也可以是数组(同(2)中的[umrows numcols]);默认条件下,该函数返回的是一个新的、最优的、缩放后图像Y的颜色映射数组newmap
(4)[...] = imresize(..., method)
method参数用于指定在改变图像尺寸时所使用的算法, 可以为以下几种:
① 'nearest': 这个参数也是默认的, 即改变图像尺寸时采用最近邻插值算法;
② 'bilinear':采用双线性插值算法;
③ 'bicubic': 采用双三次插值算法,在R2013a版本里,默认为这种算法,所以不同版本可能有不同的默认参数,使用之前建议使用命令help imresize获得帮助信息,以帮助信息为准;
(5)[...] = imresize(..., parameter, value,...)
该函数通过设置 parameter的值value,控制图像的缩放特性。方法(4)是此方法的特殊版(待下次详细补一下这个调用)
还是用之前的那张图,来做一下缩放~
代码:
clear all;
clc;
[I,map]=imread('C:\Users\Administrator\Desktop\timg.jpg');%读取图像
resizepic_1=imresize(I,0.1);%调用方式(1)缩小
resizepic_2=imresize(I,5.5);%调用方式(2)扩大
resizepic_3=imresize(I,[60,40]);%调用方式(2)
resizepic_4=imresize(I,[60,NaN]);%调用方式(2),行或列为NaN时,行或列取原图像行或列
resizepic_5=imresize(I,1.6,'bilinear');%调用方式(4),设置图像插值方法
figure;
subplot(2,3,1),imshow(I);
subplot(2,3,2),imshow(resizepic_1);
subplot(2,3,3),imshow(resizepic_2);
subplot(2,3,4),imshow(resizepic_3);
subplot(2,3,5),imshow(resizepic_4);
subplot(2,3,6),imshow(resizepic_5);
结果图:
放在一起结果显示的不明显。如果想一张一张的显示图像,修改下显示图像的代码就可以,代码就变成了这样:
好啦,第一部分结束啦~
准备过一个浑浑噩噩的周末