python 仿射变换

本文介绍了Python中处理图像的仿射变换,包括单应性变换、基础变换概念(如刚体、相似、仿射变换)以及如何通过对应点计算仿射变换矩阵。讨论了图像扭曲的应用,并展示了如何将图像放置到另一图像中,利用Alpha通道实现图像融合。
摘要由CSDN通过智能技术生成

PCV-chapter03

记录学习Python Computer Vision的过程

第三次

Homography(单应性变换)

图像变换的方法很多,单应性变换是其中一种方法,单应性变换会涉及到单应性矩阵。单应性变换的目标是通过给定的几个点(通常是4对点)来得到单应性矩阵。单应性变换是将一个平面内的点映射到另一个平面内的二维投影变换。平面指的是图像或者三维中平面表面,单应性变换的具有很强的实用性,比如图像标配,图像纠正和纹理扭曲,以及创建全景图像。

基础变换

  • 刚体变换(rigid transformation): 旋转和平移变换/rotation,translation, 3个自由度,点与点之间的距离不变
  • 相似变换(similarity transformation): 增加了缩放尺度, 四个自由度,点与点之间的距离比不变。
  • 仿射变换(affine transformation): 仿射变换和相似变换近似,不同之处在于相似变换具有单一旋转因子和单一缩放因子,仿射变换具有两个旋转因子和两个缩放因子,因此具有6个自由度. 不具有保角性和保持距离比的性质,但是原图平行线变换后仍然是平行线.
  • 投影变换(projective transformation): 也叫作单应性变换。投影变换是齐次坐标下非奇异的线性变换。然而在非齐次坐标系下却是非线性的,这说明齐次坐标的发明是很有价值的。投影变换比仿射变换多2个自由度,具有8个自由度。上面提到的仿射变换具有的“不变”性质,在投影变换中已不复存在了。尽管如此,它还是有一项不变性,那就是在原图中保持共线的3个点,变换后仍旧共线。
  • 透视变换: 将3D空间点投影成2D点的变换

Affine Transformation(仿射变换)

仿射变换就是说一种二维坐标到二维坐标之间的线性变换,然后在变换后还能保持图形的平直性和平行性,通俗的说就是变换后的图形中,直线还是直线,圆弧还是圆弧,而且图形间的相对位置,平行线还有直线的交角都不会改变,一条直线上的几段线段之间的比例关系保持不变。但是这里要提一下,仿射变换不会保持原来的线段长度,和夹角角度不变。

仿射变换可以通过一系列的原子变换的复合来实现,包括:平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。

仿射变换可以用下面公式表示:

image

在上面这个公式中你可以实现平移、缩放、翻转、旋转等变换后的坐标

所以说仿射变换可以理解为经过对坐标轴的放缩,旋转,平移后原坐标在在新坐标域中的值
更简洁的说:仿射变换=线性变换+平移

我们有许多种方法来求这个仿射变换矩阵。下面我们使用对应点来计算仿射变换矩阵,下面是具体函数

def Haffine_from_points(fp,tp):
    """ Find H, affine transformation, such that 
        tp is affine transf of fp. """
    
    if fp.shape != tp.shape:
        raise RuntimeError('number of points do not match')
        
    # condition points
    # --from points--
    m = mean(fp[:2], axis=1)
    maxstd = max(std(fp[:2], axis=1)) + 1e-9
    C1 = diag([1/maxstd, 1/maxstd, 1]) 
    C1[0][2] = -m[0]/maxstd
    C1[1][2] = -m[1]/maxstd
    fp_cond = dot(C1,fp)
    
    # --to points--
    m = mean(tp[:2], axis=1)
    C2 = C1.copy() #must use same scaling for both point sets
    C2[
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值