美文网首页
图像变换、平面坐标系和单应性变换

图像变换、平面坐标系和单应性变换

作者: miniminiming | 来源:发表于2022-04-22 16:37 被阅读0次

    摘自知乎:https://zhuanlan.zhihu.com/p/74597564

    一 图像变换与平面坐标系的关系

    • 旋转:

    将图形围绕原点 逆时针方向旋转一定角度,用解析式表示为:


    image.png
    image.png

    写成矩阵乘法形式:

    image.png
    • 平移:
    image.png 平移 image.png

    但是现在遇到困难了,平移无法写成和上面旋转一样的矩阵乘法形式。所以引入齐次坐标 ,再写成矩阵形式:

    image.png

    其中I2x2表示单位矩阵,而 T2x1表示平移向量。

    那么就可以把把旋转平移统一写在一个矩阵乘法公式中,即刚体变换

    image.png

    而旋转矩阵R2x2是正交矩阵。

    刚体变换:旋转+平移(正方形-正方形)
    • 仿射变换
    image.png

    其中A2x2可以是任意2x2矩阵(与R一定是正交矩阵不同)。

    image.png

    可以看到,相比刚体变换(旋转和平移),仿射变换除了改变目标位置,还改变目标的形状,但是会保持物体的“平直性(如图形中平行的两条线变换后依然平行)”。

    不同A 和T 矩阵对应的各种基本仿射变换:

    image.png
    • 投影变换(单应性变换)
    image.png 投影变换(正方形-任意四边形)

    简单说,投影变换彻底改变目标的形状。

    总结一下:

    1. 刚体变换:平移+旋转,只改变物体位置,不改变物体形状
    2. 仿射变换:改变物体位置和形状,但是保持“平直性”(原来平行的边依然平行)
    3. 投影变换:彻底改变物体位置和形状


      注:上图“投影变换”应该是“任意四边形”

    我们来看看完整投影变换矩阵各个参数的物理含义:

    image.png

    其中A2x2代表仿射变换参数,T2x1代表平移变换参数。

    而VT 表示一种“变换后边缘交点“关系,如:

    image.png

    至于s则是一个与VT = [v1, v2]相关的缩放因子。

    image.png

    一般情况下都会通过归一化使得s = 1
    (原因见下文)。

    二 平面坐标系与齐次坐标系

    问题来了,齐次坐标到底是什么?
    齐次坐标是计算机图形学中非常有用的基础概念,比如将3D场景投影到2D平面上。

    实际上这个就是之前在片元着色器中使用的w分量。片元着色器是中的纹理是在二维坐标系中展示画面的,而物体从三维投影到二维,如何表示远近呢?其实就是这个w分量,远的物体,也就是深度较深的物体,w值应该较小,对应的在屏幕上的投影就较小,近的物体则较大。 所以,齐次坐标系的其中一个功能是在二维坐标系上投影展示三维的数据。

    利用齐次坐标系可以表示无限远处的点
    例如: 笛卡尔坐标系下(1, 2) 齐次坐标可以表示为 (1, 2, 1) ,如果点 (1, 2) 移动到无限远处,在笛卡尔坐标下它变为 (∞, ∞) ,然后它的齐次坐标表示为 (1, 2, 0) ,因为(1/0, 2/0) = (∞, ∞) 。 注意这样的话,我们可以不用 ” ∞ " 来表示一个无穷远处的点了

    齐次坐标系与常见的三维空间坐标系 不同,只有两个自由度:

    image.png

    而 w (其中w>0 )对应坐标x 和y 的缩放尺度。当 w=1 时:

    image.png

    特别的当w=0 时,对应无穷远:


    image.png

    从二维平面上看,(x, y, w) 随 w 的变化在从原点到 (x, y)的蓝虚线示意的射线上滑动:

    image.png

    三 单应性变换

    • 单应性是什么?

    此处给出单应性不严谨的定义:用 **[无镜头畸变] **的相机从不同位置拍摄 **[同一平面物体] **的图像之间存在单应性,可以用 **[投影变换] **表示 。

    注意:
    单应性的严格定义与成立条件非常复杂,超出本文范围。
    有需要的朋友请自行查阅《Multiple View Geometry in Computer Vision》书中相关内容。
    
    image.png

    简单说就是:

    image.png

    其中 (xl,yl是Left view图片上的点,(xr, yr) 是Right view图片上对应的点。

    • **那么这个H3x3

      单应性矩阵如何求解呢?**

    从更一般的情况分析,每一组匹配点 (xi, yi)——>(xi', yi')有等式(15)成立:

    image.png

    由平面坐标与齐次坐标对应关系(x/w, y/w) = (x, y, w) ,上式可以表示为:

    image.png

    进一步变换为:

    image.png

    写成矩阵AX = 0 形式:

    image.png

    也就是说一组匹配点 (xi, yi)——>(xi', yi') 可以获得2组方程。

    • 单应性矩阵8自由度

    注意观察:单应性矩阵H 与 aH 其实完全一样(其中 a ≠ 0),例如:

    image.png

    即点(xi, yi) 无论经过 H 还是 aH 映射,变化后都是 (xi', yi') 。

    如果使a = 1/h33 ,那么有:

    image.png

    所以单应性矩阵H 虽然有9个未知数,但只有8个自由度。

    在求H 时一般添加约束h33 = 1,所以还有h11 ~ h32 共8个未知数。由于一组匹配点 (xi, yi)——>(xi', yi') 对应2组方程,那么只需要n=4 组不共线的匹配点即可求解H 的唯一解。

    XIAOMI9拍摄,有镜头畸变

    OpenCV已经提供了相关API,代码和变换结果如下。

    import cv2
    import numpy as np
    
    im1 = cv2.imread('left.jpg')
    im2 = cv2.imread('right.jpg')
    
    src_points = np.array([[581, 297], [1053, 173], [1041, 895], [558, 827]])
    dst_points = np.array([[571, 257], [963, 333], [965, 801], [557, 827]])
    
    H, _ = cv2.findHomography(src_points, dst_points)
    
    h, w = im2.shape[:2]
    
    im2_warp = cv2.warpPerspective(im2, H, (w, h))
    
    image.png

    可以看到:

    1. 红框所在平面上内容基本对齐,但受到镜头畸变影响无法完全对齐;
    2. 平面外背景物体不符合单应性原理,偏离很大,完全无法对齐。
    • 传统方法估计单应性矩阵

    一般传统方法估计单应性变换矩阵,需要经过以下4个步骤:

    1. 提取每张图SIFT/SURF/FAST/ORB等特征点
    2. 提取每个特征点对应的描述子
    3. 通过匹配特征点描述子,找到两张图中匹配的特征点对(这里可能存在错误匹配)
    4. 使用RANSAC算法剔除错误匹配
    5. 求解方程组,计算Homograph单应性变换矩阵

    相关文章

      网友评论

          本文标题:图像变换、平面坐标系和单应性变换

          本文链接:https://www.haomeiwen.com/subject/jvagertx.html