#interpolation #scatter #rbf

rbf-interp

径向基函数多维插值的实现

4 个版本

0.1.3 2019年9月7日
0.1.2 2019年9月4日
0.1.1 2019年6月6日
0.1.0 2019年6月6日

科学 中排名 411

MIT/Apache

160KB
105 代码行

rbf-interp

此包包含径向基函数多维插值的实现。有关该主题的优秀介绍,请参阅SIGGRAPH 2014 课程笔记

输入是一组数据点,每个数据点在某个多维空间中有坐标和一个值,这些值也作为向量提供。例如,对于下面的彩色场图像,坐标是二维的,值是一个3向量,分别代表红色、绿色和蓝色。结果是可以在任何坐标处评估的 Scatter 结构。其思想是值随坐标平滑变化,但在每个提供的数据点上都与输入值相同。

多维插值有多种方法,但本包的重点是径向基函数家族。这些包括多项式样条(薄板样条是其中之一)、高斯径向基函数以及其他(多二次型和逆多二次型)。高斯和多二次型变体还具有可调整的大小参数。

此外,还有一个“阶数”参数,用于控制低阶多项式项。阶数为0表示没有额外项,只有基函数。阶数为1表示常数项,阶数为2表示线性项。使用这些额外项,可以得到输入的“最佳拟合”常数或线性近似,并且基函数是分层的。(对于更精确的描述,请参阅 SIGGRAPH 笔记的3.1节)。请注意,二次和更高阶的多项式也是有意义的,但目前尚未实现。

以下图形使用高斯基函数制作,故意使用过小的大小参数(0.05),以更清楚地显示多项式项的影响

Gaussian order 0 Gaussian order 1 Gaussian order 2

使用合理的值(1.0),结果非常准确

Gaussian with properly tuned width

以下是与其他两种基函数(薄板和三谐波)的比较

Thin plate Triharmonic

请注意,插值效果很好,但外推(这些图中的1.8到2.0区域)较弱。

彩色场结果

本库的主要动机是为可变字体计算更平滑的插值。这个领域的早期工作是MutatorMath,它使用双线性插值来完成这项任务。项目页面有一个“色彩场”来展示他们的插值技术,该技术在二维坐标系中的每个点放置一个(r, g, b)颜色。请注意,对于字体通常输出是一个二维坐标,输入是任意数量的变化轴(可能是重量和宽度最为常见),但色彩场是可视化插值方案行为的一个好方法。

以下是从MutatorMath(缩小后)的图片和半径为4.5的Gaussian bump和薄板样条的结果。

MutatorMath Gaussian radius 4.5 Thin plate spline

半径调整参数对结果有相当大的影响。这在多维插值的多项应用领域是一个缺点,但也许对于可变字体来说是一个好事,因为它可以在平滑度(可能伴有超调)和局部控制之间提供选择。鼓励好奇的人尝试在examples目录中的mutator示例。

要从Unix shell运行示例

cargo run --example mutator > image.ppm

其他资源

以下文章很有趣

感谢Jacob Rus的讨论和资源,以及LGM 2019提供了激发这些想法的环境。

依赖关系

~4MB
~73K SLoC