本书概要
《Python计算机视觉编程》的出版日期 2014.7
py2.6
实例索引
主题 | 内容 | 备注 |
---|---|---|
输入/输出 | 从PCD文件中读取点云数据 |
1 | from PIL import Image |
CH3 图像到图像的映射
- 设计用于估计单应性矩阵的算法
- 使用仿射变换进行图像扭曲
- 使用相似变换进行图像配准
- 使用完全投影变换进行创建全景图像
单应性变换
单应性
单应性变换:将一个平面内的点,映射到另一个平面内的二维投影变换
(平面,指图像或者三维中的平面表面)
单应性变换常用于:图像配准、图像纠正、纹理扭曲、创建全景图像
本质上,单应性变换,按照下面的方程映射二维中的点(齐次坐标意义下):
对于二维点、三维点,齐次坐标是非常有用的表示方式
点的齐次坐标是依赖于其尺度定义的,故都表示同一个二维点
因此,单应性矩阵也仅依赖尺度定义,具有8个独立的自由度
通常使用来归一化点,故点具有唯一的图像坐标x和y,额外的坐标使得可以简单地使用一个矩阵来表示变换
存储点:
行/列存储 | 操作 | 备注 |
---|---|---|
列优先 | 点的变换 | n个二维点集存储为齐次坐标意义下的一个3*n数组,便于矩阵乘法 |
行优先 | 聚类、分类 |
变换
投影变换中的重要变换:
变换 | 操作 | 应用 |
---|---|---|
仿射变换 | ,不具有投影变换所具有的强大变形能力 包含可逆矩阵和平移向量 |
图像扭曲 |
相似变换 | 包含尺度变化的二维刚体变换,指定了变换的尺度,是角度为θ的旋转矩阵,是平移向量 时变换能保持距离不变,为刚体变换 |
图像配准 |
仿射变换:
相似变换:
直接线性变换算法
DLT公式
单应性矩阵可由两幅图像(或者平面)中对应点对计算出来
一个完全投影变换具有8个自由度。根据对应点约束,每个对应点对可以写出两个方程,分别对应于x和y坐标。故计算单应性矩阵需要4个对应点对。
DLT(Direct Linear Transformation,直接线性变换)是给定4个或者更多对应点对矩阵,来计算单应性矩阵的算法。
A是具有对应点对二倍数量行数的矩阵
可使用SVD(Singular Value Decomposition,奇异值分解)找到H的最小二乘解
注意:
预处理和去处理:对这些点进行归一化操作,使其均值为0,方差为1
因为算法的稳定性取决于坐标的表示情况和部分数值计算的问题,所以归一化操作非常重要
DLT公式推导
点集、,单应性矩阵(8个自由度)
将上式展开,前2行分别被第3行相除:
整理成矩阵的形式,可得:
其中:
仿射变换
仿射变换具有6个自由度,需要3个对应点对来估计矩阵
通过将最后两个元素设置为0,即,仿射变换可以用上面的DLT算法估计得出
这里使用不同的方法来计算单应性矩阵,详细描述见文献[13]
图像扭曲
图像扭曲/仿射扭曲:对图像块应用仿射变换
例子:将图像或者图像的一部分放置在另一幅图像中,使得它们能够和指定的区域或者标记物对齐
1 | from scipy import ndimage |
图像中的图像
分段仿射扭曲
狄洛克三角剖分
图像配准
图像配准:对图像进行变换,