Jinc函数插值是一种传统的图像插值算法,可以用来进行图像缩放(即Jinc Resize)。在传统的非机器学习图像超分辨率/放大算法中,Jinc Resize是效果较为出众的算法。虽然在传统神经网络和深度学习的席卷之下,Jinc函数插值的效果优势乃至速度优势都不复存在,但仍值得学习一下。
Jinc函数基于第一类贝塞尔函数(Bessel function of the first kind)得到,本文将围绕Jinc函数介绍相关数学概念和算法实现过程,并简单介绍一些应用。
由于知乎LaTex排版的原因,建议在PC端阅读,在移动端公式会被缩小。
贝塞尔函数与Jinc函数
贝塞尔函数的相关推导
贝塞尔函数(Bessel functions)是一类函数的总称,基于下述常微分方程得到。
该方程的通解无法用初等函数表示,一种典型的解形式如下。
其中,
为第一类贝塞尔函数,
为第二类贝塞尔函数(Bessel function of the second kind)
[1]。
对于第一类贝塞尔函数,当
为整数时,在
进行泰勒展开,可得
[1]
当
时,得到第一类一阶贝塞尔函数
在C++中,有专门计算第一类一阶贝塞尔函数的 j1(double x);在C++17标准中,引入了新版函数 std::cyl_bessel_j(double n, double x),其中n表示阶数,函数声明于头文件cmath[2]。
Jinc函数
Jinc函数在第一类一阶贝塞尔函数
的基础上得到,表达式如下
[3]。
这里有必要额外说一下sinc函数,我们在稍后还会提到。Jinc函数的图像类似sinc函数,sinc函数表达式如下[4]。
二者函数图像如下[5]。