图像投影/单应性变换/直射

一、基础概念

1. projective transformation  = homography = collineation.

2. 齐次坐标:使用N+1维坐标来表示N维坐标,例如在2D笛卡尔坐标系中加上额外变量w来形成2D齐次坐标系(x,y)(x,y,w)(x,y)⇒(x,y,w) 

齐次坐标具有规模不变性,同一点可以被无数个齐次坐标表达.(x,y,1)(ax,ay,a)(x,y,1)⇒(ax,ay,a) 齐次坐标转化为笛卡尔坐标可以通过同除最后一项得到.

3. 单应性变换是对齐次坐标下点的线性变换,可以通过矩阵运算来表达x=Hxx′=Hx

H为非奇异矩阵.

 二、基础变换

刚体变换(rigid transformation): 旋转和平移变换/rotation,translation, 3个自由度,点与点之间的距离不变

x=(R0Tt1)xx′=(Rt0T1)x

 R为2*2旋转矩阵,t为2维列向量,0^T为0的二维行向量

相似变换(similarity transformation): 增加了缩放尺度, 四个自由度,点与点之间的距离比不变

x=(sR0Tt1)xx′=(sRt0T1)x

s为缩放尺度

仿射变换(affine transformation): 仿射变换和相似变换近似,不同之处在于相似变换具有单一旋转因子和单一缩放因子,仿射变换具有两个旋转因子和两个缩放因子,因此具有6个自由度. 不具有保角性和保持距离比的性质,但是原图平行线变换后仍然是平行线.

x=(A0Tt1)xx′=(At0T1)x

A为2*2的非奇异矩阵,可被分解为如下: A=R(θ)R(ϕ)DR(ϕ)A=R(θ)R(−ϕ)DR(ϕ)

其中R(θ)R(ϕ)R(θ)R(ϕ) 为旋转矩阵,D为对角阵D=(λ100λ2)D=(λ100λ2)

λ1λ2λ1和λ2可以看做两个方向的缩放比.

投影变换(projective transformation): 也叫作单应性变换。投影变换是齐次坐标下非奇异的线性变换。然而在非齐次坐标系下却是非线性的,这说明齐次坐标的发明是很有价值的。投影变换比仿射变换多2个自由度,具有8个自由度。上面提到的仿射变换具有的“不变”性质,在投影变换中已不复存在了。尽管如此,它还是有一项不变性,那就是在原图中保持共线的3个点,变换后仍旧共线。投影变换表示如下:

x=(AVTtv)xx′=(AtVTv)x

其中V=(v1,v2)TV=(v1,v2)T

透视变换: 将3D空间点投影成2D点的变换,在齐次坐标下变换矩阵表达如下:

x=PXx=PX

x 为 2D图像点,齐次3维向量,P为 3*4相机矩阵,X为3D点,齐次4维向量.

三、Python实现

python版本:2.7

依赖包:scipy,numpy,pylab,PIL

 

1. 使用仿射矩阵进行image warping: 图像扭曲

图片:trees_001.jpg

复制代码
from scipy import ndimage
from numpy import *
from PIL import Image
from pylab import *
im = array(Image.open('trees_001.jpg').convert('L'))
H = array([[1.4,0.05,-100],[0.05,1.5,-100],[0,0,1]])
#im2  = ndimage.affine_transform(im,H[:2,:2],(H[0,2],H[1,2]))
im2  = ndimage.affine_transform(im,H[:2,:2],(H[0,2],H[1,2]))
figure()
gray()
imshow(im2)
show()
复制代码

 

 结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值