我有一个关于用 C++ 实现图像插值(双三次和双线性方法)的问题。我主要关心的是速度。根据我对问题的理解,为了让插值程序快速高效,可以采用以下策略:
使用流式 SIMD 扩展 (SSE) 的快速图像插值
使用多线程或 GPU 进行图像解释
快速图像插值算法
C++ 实现技巧
在这里,我对最后一个策略更感兴趣。我设置了一个插值类:
/**
* This class is used to perform interpretaion for a certain poin in
* the image grid.
*/
class Sampling
{
public:
// samples[0] *-------------* samples[1]
// --------------
// --------------
// samples[2] *-------------*samples[3]
inline void sampling_linear(unsigned char *samples, unsigned char &res)
{
unsigned char res_temp[2];
sampling_linear_1D(samples,res_temp[0]);
sampling_linear_1D(samples+2,res_temp[1]);
sampling_linear_1D(res_temp,res);
}
private:
inline void sampling_linear_1D(unsigned char *samples, unsigned char &res)
{
}
}
这里我只举一个双线性插值的例子。为了使程序运行得更快,使用了内联函数。我的问题是这种实施方案是否有效。此外,在解释过程中,如果我让用户选择在不同的插值方法之间进行选择。然后我有两个选择:
- 根据插值方法,调用函数对整个图像执行插值。
- 对于每个输出图像像素,首先确定其在输入图像中的位置,然后根据插值方法设置,确定插值函数。
第一种方法意味着程序中的代码更多,而第二种方法可能导致效率低下。那么,我该如何在这两种方案之间进行选择呢?谢谢!