Python计算机视觉(三)—— 图像映射

本文介绍了Python中图像到图像的映射类型,包括位移、旋转、缩放、仿射和透视变换。接着深入探讨了单应性变换,通过直接线性变换(DLT)算法计算单应性矩阵,并讲解了仿射变换的矩阵表示及应用。此外,还讨论了图像扭曲,如图像中的图像放置和分段仿射扭曲,展示了相关代码实现和效果。
摘要由CSDN通过智能技术生成


一、图像到图像的映射

图像映射的基本类型:

  • translation(位移)
  • rotation(旋转)
  • scale(尺度/大小)
  • affine(仿射)
  • Perspective(透视)

在这里插入图片描述

  • 刚体变换:平移+旋转,只改变物体位置,不改变物体形状
  • 仿射变换:改变物体位置和形状,但是保持“平直性”(即变换后直线还是直线不会打弯,圆弧还是圆弧)
  • 投影变换:彻底改变物体位置和形状
    在这里插入图片描述

二、单应性变换

定义:单应性变换是将一个平面内的点映射到另一个平面内的二维投影变换。在这里,平面是指图像或者三维中的平面表面。单应性变换具有很强的实用性,比如图像配准、 图像纠正和纹理扭曲,以及创建全景图像。我们将频繁地使用单应性变换。本质上, 单应性变换 H H H,按照下面的方程映射二维中的点(齐次坐标意义下):

在这里插入图片描述
对于图像平面内的点,齐次坐标是个非常有用的表示方式。点的齐次坐标是依赖于其尺度定义的,所以 x = [ x , y , w ] = [ α x , α y , α w ] = [ x / w , y / w , 1 ] x=[x,y,w]=[αx,αy,αw]=[x/w,y/w,1] x=[x,y,w]=[αx,αy,αw]=[x/w,y/w,1]都表示同一个二维点。因此,单应性矩阵 H H H也仅依赖尺度定义,所以,单应性矩阵具有 8 个独立的自由度。
在这里插入图片描述
我们通常使用 w = 1 w=1 w=1来归一化点,这样,点具有唯一的图像坐标 x x x y y y 。这个额外的坐标使得我们可以简单地使用一个矩阵来表示变换。
根据对应点约束,每个对应点可以写出两个方程,分别对应于 x 和 y 坐标。因此,计算单应性矩阵 H 需要4个对应点对

对点进行归一化和转换齐次坐标的功能:

def normallize(points):
    """在齐次坐标意义下,对点集进行归一化,是最后一行为1"""
    for row in points:
        row /= points[-1]
    return points

def make_homog(points):
    """将点集(dim×n的数组)转换为齐次坐标表示"""
    return vstack((points,ones((1, points.shape[1]))))

2.1 直接线性变换算法

DLT(Direct Linear Transformation,直接线性变换)是给定4个或者更多对应点对 矩阵,来计算单应性矩阵 H H H的算法。将单应性矩阵 H H H作用在对应点对上,重新写出该方程,我们可以得到下面的方程:
在这里插入图片描述

或者 A h = 0 Ah=0 Ah=0,其中 A A A 是一个具有对应点对二倍数量行数的矩阵。将这些对应点对方程的系数堆叠到一个矩阵中,我们可以使用 SVD(Singular Value Decomposition, 奇异值分解)算法找到 H H H 的最小二乘解。

def H_from_points(fp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值