先拖动左图四个控制点贴合纸张边界;当前点对只用于解透视矩阵,再对比透视结果与仿射结果的差别。
当相机斜对着一张纸、路面或墙面拍摄时,原本矩形的平面在图像里会变成梯形或任意凸四边形。如果直接做仿射校正,四个角无法同时对齐,需要引入能描述近大远小的投影变换。
常用的处理办法是先在原图和目标正视图上各标出四个对应角点,用这八组坐标求解一个 3×3 齐次矩阵;得到矩阵后,对输出图像的每个像素反查原图位置并插值采样;也可以和仿射变换对比,体会前三点与四点约束的差别。
拖动左图 A-D 四个控制点,观察透视结果和仿射结果的变化:当四点构成明显梯形时,透视结果能把平面展开成矩形,而仿射结果在第四角会留下残差。
同一平面在不同视角下会形成不同的四边形投影。透视变换用四对对应点建立一个 3×3 齐次矩阵, 把倾斜拍摄的平面重新映射为正视图。它保持直线性,但不保持平行性。
第一步是建立两幅图像的透视变换方程;示例先用四个角点描述同一平面在当前视角下的位置。
四个角同时与目标矩形对齐,更接近文档扫描或平面展开的真实需求。
A、B、C 三点可以重合,但 D 点只能被“预测”,因此难以消除透视汇聚。
左图四个控制点对应拍摄到的平面角点,右侧目标平面固定为一个矩形。每一对点都在说明”同一平面上的同一位置,在两个视角下分别落到哪里”。
透视变换使用四对点,得到 3×3 齐次矩阵;仿射变换只使用前三对点,得到的 3×3 矩阵第三行为 [0,0,1]。 两者都保留直线,但只有透视矩阵能补偿斜拍造成的汇聚关系。
求得矩阵后,图像中的每个像素都按该矩阵重投影。透视校正能让四个角同时对齐,仿射校正只能让前三点准确重合,第四个角会留下残差。
透视变换强调四对点、3×3 矩阵、直线性保留与平行性不保留。
3×3 齐次矩阵共有 9 个元素,但整体只差一个比例因子,因此有效自由度是 8。 一对点给出两个独立方程,四对点正好提供 8 个约束,所以求解过程和 OpenCV 实现都要求使用四对点。
这类任务都近似处理“同一平面”:纸张表面、路面、棋盘格平面都可以看作二维平面。只要找到四个稳定角点,就能把斜拍视角重新拉回到近似正视图。