金子邦彦研究室プログラミングOctave の活用Octave の interp2 で補間するとき入力として uint8 を与えると誤りを生じる

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