[机器视觉]Python计算机视觉学习笔记

本书概要

《Python计算机视觉编程》的出版日期 2014.7
py2.6

实例索引

主题 内容 备注
输入/输出 从PCD文件中读取点云数据
1
2
3
4
5
6
7
8
9
10
11
from PIL import Image
import os

infile = 'img.jpg'
outfile = os.path.splitext(infile)[0] + ".png" # 分离文件名与扩展名
try:
pil_im = Image.open(infile) # 打开图像
pil_im = pil_im.convert('L') # 转换为灰度图像
pil_im.save(outfile) # 保存图像
except IOError:
print("cannot convert", infile)

CH3 图像到图像的映射

  1. 设计用于估计单应性矩阵的算法
  2. 使用仿射变换进行图像扭曲
  3. 使用相似变换进行图像配准
  4. 使用完全投影变换进行创建全景图像

单应性变换

单应性

单应性变换:将一个平面内的点,映射到另一个平面内的二维投影变换
(平面,指图像或者三维中的平面表面)
单应性变换常用于:图像配准、图像纠正、纹理扭曲、创建全景图像

本质上,单应性变换,按照下面的方程映射二维中的点(齐次坐标意义下):

对于二维点、三维点,齐次坐标是非常有用的表示方式
点的齐次坐标是依赖于其尺度定义的,故都表示同一个二维点
因此,单应性矩阵也仅依赖尺度定义,具有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
2
3
from scipy import ndimage

transformed_im = ndimage.affine_transform(im, A, b, size)

图像中的图像

分段仿射扭曲

狄洛克三角剖分

图像配准

图像配准:对图像进行变换,

创建全景图

CH4 照相机模型与增强现实

针孔照相机模型

照相机标定

以平面和标记物进行姿态估计

增强现实

CH5 多视图几何

对极几何

照相机和三维结构的计算

多视图重建

立体图像