图像增广 || 通过仿射变换实现图像的平移、缩放、旋转、翻转、错切,及MATLAB实现与分析

1.仿射变换理论

仿射变换(Affine Transformation或 Affine Map)是一种二维坐标(x,y)到二维坐标(u,v)之间的线性变换,它保持了二维图形的“平直性”(直线经过变换之后依然是直线)和“平行性”(二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)。仿射变换可以写为线性变换和平移的组合如下:
在这里插入图片描述
可以实现平移、缩放、旋转、翻转(对称)、错切(剪切、错位交换,产生弹性物体的变形处理)五种变换,其中前四种变换已经有其他函数可以完美实现,但错切的实现目前只学习到了这一招

2.变换的实现

通过设置变换矩阵,可以实现上述变换功能,效果如图(网图,侵删。错切shear的那两个矩阵有误!!详情见3.
在这里插入图片描述
特别说明一下错切是这样算的:
错切shear,就是以某一系数对单方向的像素点(x,y)进行变换,针对X轴方向做错切变换
在这里插入图片描述

针对Y轴方向做错切变换
在这里插入图片描述

3.MATLAB实现代码及结果展示

3.0 读取图像

clc,clear,close all

image = imread('C:\Users\HS\Desktop\巴拉巴拉.jpg');
figure,imshow(image);title('原图/No change');
set(gcf,'color','w');set(gca,'linewidth',1,'fontsize',16);

在这里插入图片描述

3.1 平移 Translate

%% 1.平移 Translate

T1 = maketform('affine',[1 0 0;0 1 0;50 80 1]); % 变换矩阵   
%I1 = imtransform(image,T1);                    % 仿射变换,大小一样
I1 = imtransform(image,T1,'XData',[1 size(image,2)],...
                          'YData',[1 size(image,1)]);%大小不一样但有黑边

figure,imshow(I1);title('平移/Translate');
set(gcf,'color','w');set(gca,'linewidth',1,'fontsize',16);

当采用

I1 = imtransform(image,T1,'XData',[1 size(image,2)],...
                          'YData',[1 size(image,1)]);

生成平移图像,结果是
在这里插入图片描述

符合预期的平移。
但当使用

I1 = imtransform(image,T1);

生成平移后的图像,结果
在这里插入图片描述

与原图一样,此时MATLAB可以正常运行但提示这样的结果和原图一致,如果需要达到效果,可以采用上面那种方法生成目标图像。
在这里插入图片描述

3.2 缩放 Scale about origin–放大

%% 缩放 Scale about origin
%2.放大
% 
T2 = maketform('affine',[1.2 0 0;0 1.5 0;0 0 1]); % 放大矩阵   
I2 = imtransform(image,T2);                      % 仿射变换,正常放大
%I2 = imtransform(image,T2,'XData',[1 size(image,2)],...
%                'YData',[1 size(image,1)]);   % 尺寸不变 但视野变了

figure,imshow(I2);title('缩放/Scale about origin');
set(gcf,'color','w');set(gca,'linewidth',1,'fontsize',16);

代码里的两种方法生成的结果分别如下
在这里插入图片描述

I2 = imtransform(image,T2);

正常放大了图像,结果比原图像素大

在这里插入图片描述

I2 = imtransform(image,T2,'XData',[1 size(image,2)],...
                'YData',[1 size(image,1)]);

这一句导致的结果与原图像素一样大,但图像里奥特曼明显和原图不一样了

3.3 缩放 Scale about origin–缩小

%% 3.缩小

T3 = maketform('affine',[0.5 0 0;0 0.8 0;0 0 1]);% 变换矩阵   
I3 = imtransform(image,T3);                 % 仿射变换,有一点点黑边
%I3 = imtransform(image,T3,'XData',[1 size(image,2)],...
%            'YData',[1 size(image,1)]);%会有黑色部分

figure,imshow(I3);title('缩放/Scale about origin');
set(gcf,'color','w');set(gca,'linewidth',1,'fontsize',16)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值