坐标值为矩阵形式输入时,图像几何变换的矩阵方程推导

一、问题描述

图像几何变换过程中,我们可以通过像素点操作的方式,对像素值对应像素点的横、纵坐标轴进行平移,旋转和放缩等几何操作。

二、以像素点为运算单位的图像几何变换矩阵方程

我们都知道,当我们对图像进行几何变换时,若对每一个像素点进行循环操作求解,此时关于每一个像素点的横纵坐标值所构成的向量,我们有如下的矩阵表达式

1.几何平移 T m o v e T_{move} Tmove

[ x a f t e r y a f t e r 1 ] = [ 1 0 d x 0 1 d y 0 0 1 ] ⋅ [ x b e f o r e y b e f o r e 1 ] \begin{bmatrix}x_{after}\\y_{after}\\1\end{bmatrix} = \begin{bmatrix}1&0&dx\\ 0&1&dy\\ 0&0&1\end{bmatrix} · \begin{bmatrix}x_{before}\\y_{before}\\1\end{bmatrix} xafteryafter1=100010dxdy1xbeforeybefore1

2.几何旋转 T r o t a t i o n T_{rotation} Trotation

[ x a f t e r y a f t e r 1 ] = [ c o s α − s i n α 0 s i n α c o s α 0 0 0 1 ] ⋅ [ x b e f o r e y b e f o r e 1 ] \begin{bmatrix}x_{after}\\y_{after}\\1\end{bmatrix} = \begin{bmatrix}cos\alpha&-sin\alpha&0\\ sin\alpha& cos\alpha&0\\ 0&0&1\end{bmatrix} · \begin{bmatrix}x_{before}\\y_{before}\\1\end{bmatrix} xafteryafter1=cosαsinα0sinαcosα0001xbeforeybefore1

3.几何缩放 T s i z e T_{size} Tsize

[ x a f t e r y a f t e r 1 ] = [ S i z e x 0 0 0 S i z e y 0 0 0 1 ] ⋅ [ x b e f o r e y b e f o r e 1 ] \begin{bmatrix}x_{after}\\y_{after}\\1\end{bmatrix} = \begin{bmatrix}Size_x&0&0\\ 0&Size_y&0\\ 0&0&1\end{bmatrix} · \begin{bmatrix}x_{before}\\y_{before}\\1\end{bmatrix} xafteryafter1=Sizex000Sizey0001xbeforeybefore1

4.合变换矩阵 T T T

T = T m o v e ⋅ T r o t a t i o n ⋅ T s i z e = [ c o s α − s i n α d x s i n α c o s α d y 0 0 1 ] ⋅ [ S i z e x 0 0 0 S i z e y 0 0 0 1 ] T = T_{move}·T_{rotation}·T_{size} = \begin{bmatrix}cos\alpha&-sin\alpha&dx\\ sin\alpha& cos\alpha&dy\\ 0&0&1\end{bmatrix}· \begin{bmatrix}Size_x&0&0\\ 0&Size_y&0\\ 0&0&1\end{bmatrix} T=TmoveTrotationTsize=cosαsinα0sinαcosα0dxdy1Sizex000Sizey0001

三、以坐标矩阵为运算单元构建图像几何变换矩阵方程

在通过 Matlab 进行编程的时候,我们都希望有更多的循环能够被表示成矩阵相乘的形式,这样做可以大大减少计算时间,特别是在图像处理的过程当中。Matlab 是一款牺牲速度体现精度的编程软件,减少嵌套循环的使用是必须具备的习惯。

1.以矩阵分割为理论基础构建矩阵方程

矩阵分割,实际上是一种整体思维,如
[ C O S A − S I N A D X S I N A C O S A D Y O O E ] ⋅ [ X m × n Y m × n E m × n ] \begin{bmatrix}COSA&-SINA&DX\\ SINA&COSA&DY\\ O&O&E\end{bmatrix} · \begin{bmatrix}X^{m\times n}\\Y^{m\times n}\\E^{m\times n} \end{bmatrix} COSASINAOSINACOSAODXDYEXm×nYm×nEm×n我们希望通过上面的矩阵相乘公式,达到对矩阵内每一个像素点坐标值的几何变换的目的。那么,
C O S A = [ c o s α ⋯ c o s α ⋮ ⋱ ⋮ c o s α ⋯ c o s α ] o r [ c o s α O ⋱ O c o s α ] ? ? ? COSA = \begin{bmatrix}cos\alpha&\cdots&cos\alpha\\ \vdots&\ddots&\vdots\\ cos\alpha&\cdots&cos\alpha\end{bmatrix} or \begin{bmatrix}cos\alpha&&O\\&\ddots&\\ O&&cos\alpha\end{bmatrix} ??? COSA=cosαcosαcosαcosαorcosαOOcosα???这个问题我会在第3小节进行推导。

2.矩阵乘法的维度规则

X a f t e r = C O S A ∗ X b e f o r e − S I N A ∗ Y b e f o r e + D X ∗ E X_{after} = COSA*X_{before} - SINA*Y_{before}+DX*E Xafter=COSAXbeforeSINAYbefore+DXE
其中 d i m [ X a f t e r ] = d i m [ X b e f o r e ] = m × n dim[X_{after}]=dim[X_{before}]= m\times n dim[Xafter]=dim[Xbefore]=m×n,那么,由矩阵乘法的维度规则我们可以知道
d i m [ X a f t e r ] = d i m [ C O S A ] ∗ d i m [ X b e f o r e ] dim[X_{after}]=dim[COSA]*dim[X_{before}] dim[Xafter]=dim[COSA]dim[Xbefore] R m × n = R p × q ∗ R m × n R^{m\times n}=R^{p\times q}*R^{m\times n} Rm×n=Rp×qRm×n p = m , q = m p = m,q=m p=m,q=m,则有
d i m [ C O S A ] = m × m dim[COSA] = m\times m dim[COSA]=m×m同理 S I N A , D X , D Y , E , O SINA,DX,DY,E,O SINA,DX,DY,E,O 的维度。

3. C O S A COSA COSA 应当时对角线上有值,还是每个位置都有值?

可以知道, X a f t e r X_{after} Xafteri 行第 j 列的元素为
[ X a f t e r ] i j = ∑ k = 1 m ( [ C O S A ] i k ⋅ [ X ] k j − [ S I N A ] i k ⋅ [ Y ] k j + [ D X ] i k ⋅ [ E ] k j ) [X_{after}]_{ij}=\sum_{k=1}^m ([COSA]_{ik}·[X]_{kj}-[SINA]_{ik}·[Y]_{kj}+[DX]_{ik}·[E]_{kj}) [Xafter]ij=k=1m([COSA]ik[X]kj[SINA]ik[Y]kj+[DX]ik[E]kj)我们单单以
∑ k = 1 m [ C O S A ] i k ⋅ [ X ] k j \sum_{k=1}^m [COSA]_{ik}·[X]_{kj} k=1m[COSA]ik[X]kj来探究。若我们最终希望 [ X a f t e r ] 11 = c o s α ∗ [ X b e f o r e ] 11 [X_{after}]_{11} = cos\alpha *[X_{before}]_{11} [Xafter]11=cosα[Xbefore]11 ,也即 [ X a f t e r ] 11 [X_{after}]_{11} [Xafter]11 仅仅用到了 X b e f o r e X_{before} Xbefore 中的第1行第1列,那么在刚刚的表达式中,则不应该出现有使用到 X 的其他位置数据的情况。于是,则有如下的推导
∑ k = 1 m [ C O S A ] i k ⋅ [ X ] k j = [ C O S A ] i ? ∗ [ X ] i j \sum_{k=1}^m [COSA]_{ik}·[X]_{kj} = [COSA]_{i?}*[X]_{ij} k=1m[COSA]ik[X]kj=[COSA]i[X]ij
显然, ? = i ?= i ?=i ——也就时说, C O S A COSA COSA 仅在对角线上有值,即
C O S A = [ c o s α O ⋱ O c o s α ] COSA = \begin{bmatrix}cos\alpha&&O\\&\ddots&\\ O&&cos\alpha\end{bmatrix} COSA=cosαOOcosα结论: C O S A COSA COSA 应当是在对角线上有值

四、结论

关于图像几何变换的矩阵方程如
[ X m × n Y m × n E m × n ] = [ C O S A − S I N A D X S I N A C O S A D Y O O E ] ⋅ [ X m × n Y m × n E m × n ] \begin{bmatrix}X^{m\times n}\\Y^{m\times n}\\E^{m\times n} \end{bmatrix} = \begin{bmatrix}COSA&-SINA&DX\\ SINA&COSA&DY\\ O&O&E\end{bmatrix} · \begin{bmatrix}X^{m\times n}\\Y^{m\times n}\\E^{m\times n} \end{bmatrix} Xm×nYm×nEm×n=COSASINAOSINACOSAODXDYEXm×nYm×nEm×n可以简化成
[ X m × n Y m × n E m × n ] = [ c o s α ∗ E − s i n α ∗ E d x ∗ E s i n α ∗ E c o s α ∗ E d y ∗ E O O 1 ∗ E ] ⋅ [ X m × n Y m × n E m × n ] \begin{bmatrix}X^{m\times n}\\Y^{m\times n}\\E^{m\times n}\end{bmatrix} = \begin{bmatrix}cos\alpha*E&-sin\alpha*E&dx*E\\ sin\alpha*E&cos\alpha*E&dy*E\\ O&O&1*E\end{bmatrix} · \begin{bmatrix}X^{m\times n}\\Y^{m\times n}\\E^{m\times n} \end{bmatrix} Xm×nYm×nEm×n=cosαEsinαEOsinαEcosαEOdxEdyE1EXm×nYm×nEm×n其中, E E E 为m阶单位方阵
E = [ 1 O ⋱ O 1 ] ( E = R m × m , ∣ E ∣ = 1 ) E = \begin{bmatrix}1&&O\\&\ddots&\\ O&&1\end{bmatrix} ( E = R^{ m\times m} ,|E| = 1 ) E=1OO1(E=Rm×m,E=1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值