CUDA 和 C 中的双三次插值 / 双三次插值如何应用于整个图像?

Bicubic Interpolation in CUDA and C / How is bicubic interpolation applied to an entire image?

我目前正在用 C 为 Matlab 编写一个 MEX 文件,以首先旋转图像,然后对其进行双三次插值。在研究过程中,我在 https://www.paulinternet.nl/?page=bicubic 上发现了 C++ 中双三次插值的部分实现。但是,那里的代码只插入一个 4 x 4 的区域,returns 只有一个插值,而不是足够的值来填充初始区域。

谁能告诉我如何将双三次插值应用于整个图像?图像是否分为 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);
}

我试图从这个 post“

感谢您的帮助。

好的,我想我找到了解决办法。在旋转过程中,像素的原始坐标存储为浮点数。然后将这些坐标提供给双三次插值算法。该算法对周围的 4x4 正方形进行采样以计算像素的颜色或值。然后将该值返回给旋转算法并存储在像素的新坐标处。分数或在本例中为“x”是原始行或列的底值。