• 締切済み

MATLABの射影変換についての質問です。

MATLABの射影変換についての質問です。 1枚の画像に3×3の行列をかけて画像変換するつもりです。しかし、その画像自体は3×3ではないので、直接かけることができません。 そこで、3×3以外の画像行列に、3×3行列をかけて、変換された画像を表示する方法をお聞きしたいです。 どうぞ宜しくお願いします。

みんなの回答

  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.1

1枚の2次元画像に3x3行列をかけるというのは、 ある点(x,y)の値を読んで、座標変換された別な点(x',y')に書き込むという処理を行なうことだと思います。 座標変換は行列にベクトルをかける形で次のように書かれます(崩れて見にくいですが)。 (x') (a b c)(x) (y')=(d e f)(y) (w ) (g h i)(1) wを無視して実質はアフィン変換です。これをやろうとしてるのではないでしょうか。 つまり x'=ax+by+c y'=dx+ey+f 実際には、画像の座標は整数なのに、変換後の座標が実数になってしまうので、 逆変換で考えた上で線形補完したりします。 点(x',y')の値は逆変換した実数値座標の点(x,y)近傍の整数座標の4点に、 座標のずれに応じた重みをかけて平均化した値とするのがbilinear法と呼ばれています。 何も補完しないで一番近い点の値で代表させるのはNearest neighbor法と呼ばれています。 最初は補完なしで組んでみてはいかがでしょうか。 私はMATLABは使ったことがないので、具体的なプログラミングについては説明できませんが、 画像の中の1点の値を読む関数と、画像の中の1点に値を書き込む関数がわかれば、 あとは初等演算とループだけで組めるはずです。

supreeeem
質問者

お礼

分かりやすいご説明ありがとうございます!やってみます!!

関連するQ&A