我目前正在用 C 语言为 Matlab 编写一个 MEX 文件,以首先旋转图像,然后对其进行双三次插值。在研究时,我在https://www.paulinternet.nl/?page=bicubic上发现了 C++ 中双三次插值的部分实现。但是,那里的代码只插入一个 4 x 4 的区域,并且只返回一个插值而不是足够的值来填充初始区域。
谁能告诉我如何将双三次插值应用于整个图像?图像是否被分成 4x4 块,然后进行插值?如何获取图像整个区域的值?另外,函数“bicubicInterpolate”中的“x”和“y”到底是什么?
double cubicInterpolate (double p[4], double x) {
return p[1] + 0.5 * x*(p[2] - p[0] + x*(2.0*p[0] - 5.0*p[1] + 4.0*p[2] - p[3] + x*(3.0*(p[1] - p[2]) + p[3] - p[0])));
}
double bicubicInterpolate (double p[4][4], double x, double y) {
double arr[4];
arr[0] = cubicInterpolate(p[0], y);
arr[1] = cubicInterpolate(p[1], y);
arr[2] = cubicInterpolate(p[2], y);
arr[3] = cubicInterpolate(p[3], y);
return cubicInterpolate(arr, x);
}
我试图从这篇文章“https://stackoverflow.com/questions/20923956/bicubic-interpolation”的代码中看出这一点,但我不明白分数是如何计算的。
感谢您的帮助。