opencv 未知函数记录-findHomography
1️⃣ 为什么 keystone 一定要用 findHomography
Keystone 的本质
-
投影面 不与成像面平行
-
产生 透视变换(projective transform)
数学上:
[x′y′w′]=[h11h12h13h21h22h23h31h321][xy1]\begin{bmatrix} x' \\ y' \\ w' \end{bmatrix} = \begin{bmatrix} h_{11}&h_{12}&h_{13}\\ h_{21}&h_{22}&h_{23}\\ h_{31}&h_{32}&1 \end{bmatrix} \begin{bmatrix} x\\y\\1 \end{bmatrix}x′y′w′=h11h21h31h12h22h32h13h231xy1
✔ 8 自由度
❌ 仿射(6 DOF)/ 相似(4 DOF)都不够
👉 所以:
-
estimateAffinePartial2D❌ -
estimateAffine2D❌ -
findHomography✔
6️⃣ 如何判断“是否真的需要 Homography”⚠️
👉 判定技巧(非常实用)
1️⃣ 用 estimateAffine2D 拟合
2️⃣ 看残差分布:
-
边缘残差呈方向性梯度 → 透视存在
-
整体随机小误差 → 仿射够用
或:
|h31| + |h32| ≈ 0 → 非透视 |h31| + |h32| > 1e-4 → 透视显著
7️⃣ 从 H 中读出“物理意义”(进阶)
虽然 homography 不直接给角度,但可以:
① 平面姿态恢复(需内参 K)
cv::Mat K; // 相机内参 std::vector<cv::Mat> Rs, Ts, Ns; cv::decomposeHomographyMat(H, K, Rs, Ts, Ns);
👉 可得到:
-
投影平面相对于相机的 倾角
-
法向量
-
平移方向
这一步在你做 投影光学 / 显示模组装调 时非常关键。
原文地址:https://blog.csdn.net/qq_32180363/article/details/156643197
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!
