【问题标题】:What is this technique, if not bilinear interpolation?如果不是双线性插值,这种技术是什么?
【发布时间】:2014-07-24 01:22:04
【问题描述】:

总结:我在下面描述的技术有名称吗?

this question 中,我描述了一种情况,即我有四个非轴对齐的二维输入点映射到输出向量,并且希望将任意输入点映射到新的输出向量。

(-19,-7) -> (-150,-100)
( 10,-8) -> ( 150,-100)
(-11, 4) -> (-150, 100)
(  9, 7) -> ( 150, 100)
(-4.2,1) -> (  ??,  ??)

                       

基于one answer 我想出了我的own algorithm,如上图绿色和橙色的计算所示。有关详细信息,请参阅答案,但简而言之:在顶部和底部线上找到 X 截距,将输出值调整到那些“北”/“南”位置,然后根据输入点的位置在这些输出之间调整行。

对我的回答的评论表明我正在做的事情不能被称为“双线性插值”。我相信这是因为我正在计算顶部和底部边缘的不同百分比,而我这样做的方式可能会导致四边形内的某些输入点导致输出值超出角落输出点的最小值/最大值.

  • 例如,在我的方案中输入 (-19,0) 会导致沿底边的点为 -40%,因此输出值为 ~(-236,43),远小于-150的minX。

如果不是“双线性插值”,这个算法是什么?而且,如果你允许第二个问题,你将如何像我一样在输入的非平行四边形上使用双线性插值这里?这可能吗?

可以在on my website找到我的算法的漂亮视觉测试。

【问题讨论】:

  • 如果目标是将梯形映射到矩形,那么您的算法会扭曲图像,因为在截取阶段使用了完全垂直的线。如果任意输入是...(-15,-6),则可以清楚地证明这一点。这显然在梯形内,但我不确定您的算法是否会将其放在矩形内。
  • 我可能会采用从点到每个角的距离,并使用这些比率,尽管它的数学强度要高得多。
  • 谢谢@MooingDuck,帮了大忙。我现在意识到,鉴于我有一个输入和一个输出四边形,我真正想做的是在输入四边形上执行 inverse bilinear interpolation 以找到输入点的 UV 坐标,然后在输出上执行正常的双线性插值使用这些 UV 坐标的四边形(在本例中是一个简单的矩形)。

标签: algorithm terminology interpolation


【解决方案1】:

我不知道这种算法是否有名称,但您似乎正在尝试将地图反转,将 4 点多边形的坐标转换为矩形。 此代码上使用了类似的东西http://www.vcskicks.com/image-distortion.php 如果你想更好地解释 out is works,你可以在这里找到它http://ryoushin.com/cmerighi/en-US/2006-09-30_21/Quadrilateral_Distortion_Algorithm。 但请记住,这些几何算法很慢,并且不适用于凹形..(您可能在测试中也注意到了这一点)..

这就是为什么我开发了一种不同的技术http://www.codeproject.com/Articles/247214/Quadrilateral-Distortion,它在凹面多边形上更快、更有效。

但是,如果您想要达到的效果类似于您的样本...... 比点映射..也许你可以枚举画布中的所有点并根据“锚”点的距离选择它的颜色..我可能会更快..并且不会有那些凹面故障..

【讨论】:

  • 感谢您的意见和分享您不同的技术。
【解决方案2】:

嗯。将其称为双线性插值的变体在技术上是合理的,其中每个顶部端点首先沿顶部线外插,以沿 X 轴与相应的底部点对齐。也就是说,首先将任意四边形变成梯形,然后在该梯形上进行双线性插值。

在一般情况下不太可能产生有用的结果。

至于如何使用双线性插值,它基本上归结为求解方程组。有 some (u,v) 对,如果你用它们执行双线性插值,你会得到你的输入坐标。你找到那对是什么,然后你用它来产生你的输出值。

【讨论】:

    猜你喜欢
    • 2017-01-15
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多