Octave の interp2 で補間するとき入力として uint8 を与えると誤りを生じる
interp2に与える入力をuint8にすると、計算結果に誤りが生じます.また、計算結果は切り上げが行われるようです.
画像データのように uint8 の配列になっているようなデータを補間したいときは, 明示的にdoubleに変更し、interp2 の評価結果を四捨五入(C言語 の仕様と合わせるため)して uint8 に変換するという手順を踏むことになる.
実行結果の例(OctaveのバージョンはWindows の3.2.3)
* 入力がdoubleの場合(正しい結果)
interp2([1 2 3;1 2 3;1 2 3],[1 1 1;2 2 2;3 3 3],[4 4 4;4 25 4; 4 4 4],[1.5 2 2.5;1 2 3;1.5 2 2.5],[1.5 1 1.5;2 2 2;2.5 3 2.5])
9.2500 4.0000 9.2500
4.0000 25.0000 4.0000
9.2500 4.0000 9.2500
* 入力がuint8の場合(誤った結果)
interp2([1 2 3;1 2 3;1 2 3],[1 1 1;2 2 2;3 3 3],uint8([4 4 4;4 25 4; 4 4 4]),[1.5 2 2.5;1 2 3;1.5 2 2.5],[1.5 1 1.5;2 2 2;2.5 3 2.5])
10 4 15
4 25 25
15 25 25