我读过一些使用GL_LINEAR引入快速三阶插值的文章。
因为[1]包含大量的勘误表,如果你想要了解形式主义,我建议阅读[2]。
他们都提到了这种方法的限制。对于使用GL_LINEAR的过滤纹理,仅当0< = b /(a + b)< = 1
时,下一个关系才会保持a * f(i,j)+ b * f(i + 1,j)= F(i + b /(a + b),j)
其中f是原始图像数据,F是OpenGL的线性插值纹理。
这是问题所在。 [1]提到这种方法也可以应用于Catmull-Rom双三次方。
然而,显而易见的是,对于包含负部分的Catmull-Rom加权函数,条件(0 <= b /(a + b)<= 1)不能被完全填充。事实上,我试图用相同的逻辑实现Catmull-Rom,它只产生模糊的图像。该方法还可以适用于内插滤波器,如Catmull-Rom样条
是否有一种特殊的方法将[1]和[2]中的方法应用于Catmull-Rom插值? 或者我是否必须为Catmull-Rom获取所有16个纹素?
答案 0 :(得分:1)
我认为Sigg和Hadwiger的论文是正确的。
Catmull-Rom多项式p(t)
可写为
p(t) = 0.5 [ w0(t) * p0 + w1(t) * p1 + w2(t) * p2 + w3(t) * p3]
,其中
w0(t) = -t + 2*t^2 - t^3;
w1(t) = 2 - 5*t^2 + 3*t^3;
w2(t) = t + 4*t^2 - 3*t^3;
w3(t) = -t^2 + t^3;
和p0
,p1
,p2
,p3
是采样函数值。
对于B样条,您将前两个术语(w0(t) * p0
和w1(t) * p1
以及后两个术语(w2(t) * p2
和w3(t) * p3
组合在一起。对于Catmull-Rom样条曲线,您可以将w0(t) * p0
和w3(t) * p3
以及w1(t) * p1
和w2(t) * p2
组合在一起。即使通过Matlab绘图,也很容易验证条件b/(a+b)
是否满足此选择。因此,这个想法也可以用于Catmull-Rom插值。但是,对于Catmull-Rom案例,在我看来,最后一步没有可能的扩展,因为(w0(t) + w3(t))/(w0(t) + w1(t) + w2(t) + w3(t))
和(w1(t) + w2(t))/(w0(t) + w1(t) + w2(t) + w3(t))
都不符合您指定的条件。