Skip to content

Lec06 | Image Stitching#

Image Warping#

与lec3介绍的image filtering相比较,filtering改变的是图像的像素值(intensity),而warping改变的是图像的形状(shape)

Parametric global warping#

我们关注的是参数化全局变形,即图像的每一个坐标都遵循同一个变换函数。

Projective Transformation(Homography)#

回顾仿射变换的齐次坐标表示:

$$ \begin{pmatrix}x^{'}\ y^{'}\ 1\end{pmatrix}=\begin{pmatrix}a&b&t_x\ c&d&t_y\ 0&0&1\end{pmatrix}\begin{pmatrix}x\ y\ 1\end{pmatrix} $$ 对于仿射投影(or 单应变换), 矩阵的\(a_{31},a_{32}\)不一定为零:

  • 单应性矩阵的自由度为8,因为我们可以同时除以\(h_{22}\)使得矩阵的\(H_{33}\)为1,结果是保持不变的。
  • 在处理上,我们通常做的限制是使向量\([h_{00},h_{01},\cdots,h_{22}]\)的长度为1

下图是一个单应性变化的例子

需要注意的是, 由于单应性变化两张图片的坐标是一一对应的,所以只有当相机中心保持不变时两张图片才符合单应变化。

  • Camera rotated with its center unmoved
  • Camera center moved and the scene is a plane

Summary of 2D transformations#

Implementing image warping#

或许我们会想,实现warping不是很容易吗,只要把当前图片的坐标值根据变化函数映射到另一个坐标上就行了。 但是考虑一个问题:当前的像素坐标映射后处于两个像素中间(可以理解为像素值是存放在格点上的,映射后的像素位置不一定在格点上)

所以这里我们采取逆变换, 即对于每一个需要找的像素点,去找变换前的坐标,如果坐标不在像素点上就使用周围的像素进行插值。

Image Stitching#

现在我们的问题就是给定两张图片, 如何计算出变换矩阵?

可以采用如下的方法(DLT)

所以我们可以通过求解优化问题: $$ min\Vert Ah-0\Vert ^2 $$ 可以得到\(h\)就是\(A^TA\)对应最小特征值的特征向量,推导过程

RANSAC for Translation#

Recap the Idea:

  • All the inliers will agree with each other on the translation vector;
  • The outliers will disagree with each other( RANSAC only has guarantees if there are <50% outliers)

All good matches are alike; every bad match is bad in its own way.

——Tolstoy via Alyosha Efros

每次随机选一组对应点,计算票数,最后要将票数最高的\(H\)对应的所有点拿出来做一次最小二乘。

Summary for image stitching

  • Input images
  • Feature matching
  • Compute transformation matrix with RANSAC
  • Fix image 1 and warp image 2.

Panoramas#

对于全景,我们处理的是多张图片的拼接。

最朴素的方法就是取最中间的图片作为参考,其它所有的图片与中间那张对齐

但这种方法会使得边缘图像的形变很明显。

Cylindrical Projection#

所以我们使用柱形投影 (cylindrical projection)的方法

柱形投影使得变化变简单了: 相机的旋转在圆柱上是平移

Assembling the panorama#

在柱形投影的基础上还是会出现问题,就是误差的积累,导致漂移。

我们希望整体误差的和为0,一个解决办法就是将最后一张图和第一张图之间也进行个约束。


Last update: 2024年11月9日 17:03:32
Created: 2024年8月11日 11:55:40