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)
{
}
}
ここでは、双一次補間の例のみを示します。プログラムを高速に実行するために、インライン関数が採用されています。私の質問は、この実装スキームが効率的かどうかです。さらに、解釈手順中に、異なる補間方法を選択するオプションを使用する場合。次に、2 つの選択肢があります。
- 補間方法に応じて、画像全体の補間を実行する関数を呼び出します。
- 各出力イメージ ピクセルについて、最初に入力イメージ内の位置を決定し、次に補間方法の設定に従って補間関数を決定します。
最初の方法はプログラム内のコードが増えることを意味しますが、2 番目の方法は非効率につながる可能性があります。では、これら 2 つのスキームのどちらかを選択するにはどうすればよいでしょうか。ありがとう!