【matlab图像处理】映射和仿射变换

中国史之【恭王即位】:
周恭王姬繄(yi)扈,周穆王之子。周恭王继位后,裁减军队,明法息民,令百姓安于生产;采取和平稳定的外交政策;允许土地自由买卖,这是西周王朝首次把士地私有合法化,这些举措大大增强了西周国力。
——来源:全历史APP

【路漫漫其修远兮,吾将上下而求索】

今天介绍图像的几何操作之映射和仿射变换。本内容参考自《实用MATLAB图像和视频处理》第7章。

1、介绍

几何操作的定义是:通过以一种约束的方式重新排列像素而改变一幅图像的几何布局。

从数学上可描述为通过调整图像像素的坐标将一幅输入图像f(x,y)变换为一幅新图像f(x’,y’)的过程:

图片

也就是说,原来位于坐标(x,y)的像素值在输出图像中将被重新安排到坐标(x’,y’)处。注意,并非改变图像的像素值。

2、变换

对上面的过程建模,需要一个映射函数。映射函数对输入图像中的各个像素指定其在输出图像中的新坐标:
在这里插入图片描述
这里的T就是映射函数,它可以是一个任意的2D函数。通常,T会被指定为两个分离的函数,分别对应两个维度,也就是x’和y’。
在这里插入图片描述
在这里插入图片描述
其中,Tx和Ty常表示成x和y的多项式。当Tx和Ty是x和y的线性组合时,可称这种变换为仿射变换,表示如下:
在这里插入图片描述
在这里插入图片描述
学过线性代数的,应该都知道这种线性组合可以使用矩阵来表示,也就是:
在这里插入图片描述
可以转换成矩阵后,那问题就转换为矩阵计算了,这是matlab的强项。

3、四种常用操作

仿射变换将直线变换成直线,三角形变换成三角形,矩形变换成平行四边形。平行线仍保持平行,且直线上的点间距离比例保持不变。(三角形平移后还是三角形)

四种最常用的几何操作是包括:平移、放缩、旋转和剪切。具体的汇总如下:
在这里插入图片描述
从上面可以看出,6个参数唯一地由三组对应点所确定。给定相应点变换前和变换后的坐标,可以写出x和y的n个方程并解出n个变换系数(参数)。下图为一个三角形仿射变换前后的例子。
在这里插入图片描述

4、matlab中的操作

在图像处理工具包中,有两个和仿射变换关联的函数:maketform和imtransform。

其中,maketform用来定义2维空间变换,也就是上面表格里面的参数矩阵。除了仿射变换,maketform还支持投影变换和自定义的变换。(这其实就是类似pytorch框架中的torchvision.transforms函数,使用变换来进行数据增广)

而imtransform函数用于根据输入图片和变换矩阵,对图片进行变换。我们来举个例子:

**【题目】**使用matlab将仿射变换应用到一幅输入图像中,其中仿射变换矩阵包括(a)旋转30度;(b)在x和y方向都用因子3.5进行放缩;(c)用【25, 15】个像素进行平移;(d)用因子【2, 3】剪切。

**【答案】**首先,我们先构造仿射矩阵,这个可对照上面的表格以及题目给出的参数进行构建即可。构建后的矩阵如下:
在这里插入图片描述
接着,使用matlab代码进行操作,代码和效果如下:


%%本代码用于学习如何对图像进行常见的仿射变换

I = imread('kobe.jpg');

% Rotation旋转30度
Ta = maketform('affine', [cosd(30) -sind(30) 0; sind(30) cosd(30) 0; 0 0 1]');
Ia = imtransform(I,Ta, 'XYScale',1);

%Scaling放缩3.5
Tb = maketform('affine', [3.5 0 0; 0 3.5 0; 0 0 1]');
Ib = imtransform(I,Tb, 'XYScale',1);

% Translation平移
Tc = maketform('affine',  [1 0 0; 0 1 0; 25 15 1]);
Ic =  imtransform(I,Tc, 'XData', [1 size(I,2)], 'YData', [1 size(I,1)]);

% Shearing剪切
Td = maketform('affine', [1 3 0; 2 1 0; 0 0 1]');
Id = imtransform(I,Td, 'XYScale',1);

figure
subplot(2,2,1), imshow(Ia), title('旋转30度');
subplot(2,2,2), imshow(Ib), title('放缩3.5');
subplot(2,2,3), imshow(Ic), title('平移');
subplot(2,2,4), imshow(Id), title('剪切');

在这里插入图片描述

以上是本期内容,建议自己动手来实践一下。如果需要图片和代码,可以关注公众号,回复关键字【matlab代码】即可获得。我会上传到云盘。

【声明】:学习笔记基于互联网上各种学习资源的个人整理。

以上是本期内容,下期介绍图像处理的几何操作之插值方法。

我叫小保,一名计算机视觉爱好者、学习者、追随者,欢迎关注我【CV之道】一起学习。

猜你喜欢

转载自blog.csdn.net/ling_xiobai/article/details/124233751