RK VR一体机透镜畸变矫正算法为catmull-rom样条插值算法,K1到K10为其控制点系数。
image.png传统反畸变算法为r’=r*(1+K1*r^2+K2*r^4+K3*r^6)
故推测RK的bk1到bk10为代替1+K1r^2+K2r4+K3*r6曲线的10个控制点
Catmull-Rom Spline Interpolating
当存在一些点的时候,我们往往会根据这些点来绘制一条样条线,而这条样条线需要平滑的穿过这些点。如果你是想要这么做的,那么你可以看一下Catmull-Rom样条线。
我们可以认为,Catmull-Rom样条线,是一根比较特殊的Bezier曲线,而这条Bezier曲线能够保证它会穿过从控制点的第二个点到控制点的倒数第二点之间的所有点。所以说,Catmull-Rom样条线最少需要4个控制点来进行控制。
image.png下面的公式给出了,如何计算某两个指定点之间的点:
Output_point = P0 * (-0.5*t*t*t + t*t – 0.5*t) +
P1 * (1.5*t*t*t – 2.5*t*t + 1.0) +
P2 * (-1.5*t*t*t + 2.0*t*t + 0.5*t) +
P3 * (0.5*t*t*t – 0.5*t*t);
这里的P0,P1,P2,P3都是曲线上的点,但是要知道,上面公式只能够计算出从点P1到点P2之间的点。
image.png公式中的t取值范围为[0,1],当t从0到1线性变化的时候,曲线就会从点P1(此时t=0),慢慢移动到P2(此时t=1)。这个曲线另外一个特点就是,我们计算出来的点P的切向量和这个点的周围两个起点和终点的切向量是平行的。
如果你想要处理更多的点,那么只有用前面的点,当前的点和接下来的两个点来构造这条曲线就可以了。举例来说,如果你现在有5个点,分别为P1,P2,P3,P4,P5,那么我们就可以构造两条不同的曲线,他们的控制点分别为[P1,P2,P3,P4]和[P2,P3,P4,P5]。当我们使用这两条曲线去分别从t=[0,1]上去绘制,将得到P2-P3,P3-P4这两条曲线。
一、算法核心思想
1、每次插值需要四个基础点(暂假设为A、B、C、D)。
2、根据已知的四个基础点,插值算法每次只能实现在中间两个点间画出光滑的曲线(此处就是B点和C点)。
细心的读者可能发现了,我们的控制点虽然有4个,但是绘制的曲线却只能够通过中间的两个点。这就导致了,如果我想曲线同时过这四个点,该怎么处理了。其实处理的方法,十分的简单,我们只要人为的构造一个起点和终点来构成四个控制点即可。比如现在有P0,P1,P2,P3,如果用[P0,P1,P2,P3]构造曲线,曲线将只能够通过P1-P2,为了让曲线能够通过P0和P3,我们可以人为的构造出如下的控制点[2P0 - P1, P0, P1, P2],以及[P1,P2,P3,2P3 - P2]。通过这样的方法,就能够绘制一条经过所有控制点的曲线了。
网友评论