C++ 对轮廓点处的值进行插值

C++ 对轮廓点处的值进行插值,c++,opencv,interpolation,C++,Opencv,Interpolation,给定:表示闭合轮廓的有序点列表(2D) 当前状态:对轮廓上的点进行采样(均匀或任意),并为每个点计算某些值(例如某种描述符) 任务:我想将在采样点计算的值插值到不在采样点中的点。也许我可以按顺序取3个采样点,并将它们的值插值到位于所选3个点的两个极值点之间的非采样点。我读了一大堆论文,但对该做什么感到非常困惑:插值曲线(例如Catmul Rom)或曲面。也许有些C++库可以做我想做的或者一些想法。 为了进一步澄清: 轮廓中的2d点集(最后一个点连接回第一个点),si=(xi,yi) 采样点 s0

给定:表示闭合轮廓的有序点列表(2D) 当前状态:对轮廓上的点进行采样(均匀或任意),并为每个点计算某些值(例如某种描述符)

任务:我想将在采样点计算的值插值到不在采样点中的点。也许我可以按顺序取3个采样点,并将它们的值插值到位于所选3个点的两个极值点之间的非采样点。我读了一大堆论文,但对该做什么感到非常困惑:插值曲线(例如Catmul Rom)或曲面。也许有些C++库可以做我想做的或者一些想法。 为了进一步澄清:

轮廓中的2d点集(最后一个点连接回第一个点),si=(xi,yi)

采样点

s0          s3          s6          s9             s12             s15
在这些采样点计算一些值

f(s0)     f(s3)       f(s6)       f(s9)          f(s12)           f(s15)
现在的目标是找到其他点的插值

     s1 s2     s4 s5       s7 s8        s10  s11       s13  s14

你可以做一些简单的加权平均。 例如,假设你在a和B之间有一个点X,距离函数d和一个属性p,你可以得到

p(X) = ( p(A) * d(X, A) + p(B) * d(X,B) ) / (d(X,A) + d(X,B))
如果你想得到更多的曲线结果(上面的例子是线性的),你可以用3个点(A,B和C)做同样的事情


除非您对原始曲线了解更多,否则这些近似值应该可以。如果你对原始曲线一无所知,就无法完美地预测值。

如果你的点位于平面(2D)上,并且你试图获得轮廓线(1D),为什么你要插值曲面(通常是3D空间中的2D物体)?我会选择@tobi303,我已经编辑了这个问题以进一步澄清。
p(X) = ( p(A) * d(X, A) + p(B) * d(X,B) ) / (d(X,A) + d(X,B))