matlab实现几何变换(平移、镜像、旋转、缩放)

1.平移


主函数main.m

close all;  %关闭当前所有图形窗口
clear all;  %清空工作空间变量
clc;        %清屏
I=imread('lena.bmp');
a=50;b=50;
J1=move(I,a,b);
a=-50;b=50;
J2=move(I,a,b);
a=50;b=-50;
J3=move(I,a,b);
a=-50;b=-50;
J4=move(I,a,b);
set(0,'defaultFigurePosition',[100,100,1000,500]);    %修改图形图像位置的默认设置
set(0,'defaultFigureColor', [1 1 1])                  %修改图形背景颜色的设置
figure,
subplot(221),imshow(J1),axis on;
subplot(222),imshow(J2),axis on;
subplot(223),imshow(J3),axis on;
subplot(224),imshow(J4),axis on;

move.m

function J = move(I, a, b)

[M, N, G] = size(I);
I = im2double(I);
J = ones(M + abs(a), N + abs(b), G); %建立新的矩阵,将新图像扩大,避免越过边界

for i = 1:M
    for j = 1:N
        if(a < 0 && b < 0)            
            J(i, j, :) = I(i, j, :);
        elseif(a > 0 && b > 0)
            J(i + a, j + b, :) = I(i, j , :);
        elseif(a < 0 && b > 0)
            J(i, j + b, :) = I(i, j, :);
        else
            J(i + a, j, :) = I(i, j, :);
        end
    end
end
end

实验结果

matlab实现几何变换(平移、镜像、旋转、缩放)_第1张图片

 

2.镜像


主函数main.m

close all;  %关闭当前所有图形窗口
clear all;  %清空工作空间变量
clc;        %清屏
I=imread('lena.bmp');
J1=mirror(I,1);% 1水平、2垂直、3水平垂直
J2=mirror(I,2);
J3=mirror(I,3);
set(0,'defaultFigurePosition',[100,100,1000,500]);    %修改图形图像位置的默认设置
set(0,'defaultFigureColor', [1 1 1])                  %修改图形背景颜色的设置
subplot(221),imshow(I),axis on;
subplot(222),imshow(J1),axis on;
subplot(223),imshow(J2),axis on;
subplot(224),imshow(J3),axis on;

mirror.m

function J = mirror(I, a)
[M, N, G] = size(I);
I = im2double(I);
J = ones(M, N, G); 
for i = 1:M
    for j = 1:N
        if(a == 1)%水平镜像            
            J(i, N-j+1, :) = I(i, j, :);
        elseif(a == 2 )%垂直镜像 
            J(M-i+1, j, :) = I(i, j, :);
        elseif(a == 3 )%水平垂直
            J(M-i+1, N-j+1, :) = I(i, j, :);
        end
    end
end

实验结果

matlab实现几何变换(平移、镜像、旋转、缩放)_第2张图片

 3.缩放


主函数main.m

close all;
clear all;
clc;
[I,map]=imread('lena.bmp');
I=rgb2gray(I);
J1=imresize(I,0.1);%缩小
J2=imresize(I,3);%放大两倍
J3=imresize(I,[20 10]);%设置缩放后图像行列
J4=imresize(I,1.6,'bilinear');%双线性插值法
J5=imresize(I,1.6,'triangle');%三角函数插值法

figure,
subplot(231),imshow(I),axis on;
subplot(232),imshow(J1),axis on;
subplot(233),imshow(J2),axis on;
subplot(234),imshow(J3),axis on;
subplot(235),imshow(J4),axis on;
subplot(236),imshow(J5),axis on;

实验结果

matlab实现几何变换(平移、镜像、旋转、缩放)_第3张图片

 4.旋转


主函数main.m

close all;
clear all;
clc;
I=imread('lena.bmp');
J1=imrotate(I,45);%设置旋转角度,大于0是逆时针,小于0是顺时针。
J2=imrotate(I,-30);
J3=imrotate(I,30,'bicubic','crop'); %设置输出图像大小,双线性插值
J4=imrotate(I,30,'bicubic','loose');%图像足够大,包括旋转图像
figure,
subplot(221),imshow(J1);
subplot(222),imshow(J2);
subplot(223),imshow(J3);
subplot(224),imshow(J4);
% imrotate(I,angel,method,bbox),angel为旋转角度
% method取值为'nearest'最近邻插值,'bilinear'双线性插值和'bicubic'双三次插值
% bbox说明返回图像大小,crop表示一样,loose表示输出的图像足够大包括完整的旋转图像

实验结果

matlab实现几何变换(平移、镜像、旋转、缩放)_第4张图片

 

你可能感兴趣的:(数字图像处理,matlab,图像处理)