You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于4个采样点的透视变换任意点求值方法探讨

基于4个采样点的透视变换任意点求值方法探讨

咱们来聊聊这个透视变换的问题哈。假设我们有一个透视变换函数 $F:\mathbb{R}^2 \to \mathbb{R}^2$,它的定义是这样的:存在实数参数 $a,b,c,d,e,f,g,h,i$,对任意 $(x,y)$ 都满足:
$$
F((x,y)) = \frac{(ax + by + c,\ dx + ey + f)}{gx + hy + i}
$$

现在我们不知道参数 $a,...,i$,但知道单位正方形四个顶点经过变换后的结果:
$$
F((0,0)) = p_{00} \
F((1,0)) = p_{10} \
F((0,1)) = p_{01} \
F((1,1)) = p_{11}
$$
而且已知 $p_{00},p_{10},p_{11},p_{01}$ 构成一个凸四边形。那问题来了:我们能不能直接计算任意输入点 $(x,y)$ 的变换结果 $F((x,y))$ 呢?

常规解法

最直接的思路就是求解这9个参数,不过要注意,透视变换的参数其实只有8个自由度——因为把所有参数乘以同一个非零标量,得到的还是同一个变换。而我们刚好有8个标量方程(四个点的x、y坐标各对应一个方程),所以这是一个适定的方程组,解出来之后代入公式就能计算任意点的结果了。

不过这种方法总觉得有点“硬算”的味道,有没有更简洁、更几何直观的方法呢?

两个特殊情况的直观结论

这里有两个观察结论,能帮我们快速处理一些特殊场景:

  • 观察1:正方形中心的变换结果
    因为透视变换是保直线的,所以单位正方形的中心 $(0.5, 0.5)$ 经过变换后,必然是目标凸四边形两条对角线的交点,它可以用面积加权的方式表示:
    $$
    F((0.5, 0.5)) = \frac{\mathrm{Area}(p_{00},p_{10},p_{01})p_{11} + \mathrm{Area}(p_{11},p_{01},p_{10})p_{00}} {\mathrm{Area}(p_{00},p_{10},p_{11},p_{01})}
    $$

  • 观察2:目标是平行四边形的情况
    如果 $p_{00},p_{10},p_{11},p_{01}$ 刚好构成平行四边形,那这个透视变换其实退化成了仿射变换,这时候我们直接用双线性插值就能计算任意点的结果:
    $$
    F((x,y)) = (1-x)(1-y)p_{00} + x(1-y)p_{10} + (1-x)y ; p_{01} + x ; y ; p_{11}
    $$

一般情况的猜想

回到一般的凸四边形情况,我推测应该存在一个和上面两个特例风格一致的对称公式:它是 $p_{00},p_{10},p_{01},p_{11}$ 的仿射组合,组合系数是包含 $x$、$y$,以及这四个点构成的三角形面积或者交比的表达式。特别是当 $x,y \in [0,1]$ 时,这个组合应该是凸组合,结果自然落在目标凸四边形内部,完全符合透视变换的几何特性。


备注:内容来源于stack exchange,提问作者Don Hatch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:53:17