アプリ版:「スタンプのみでお礼する」機能のリリースについて

MATLABの射影変換についての質問です。
1枚の画像に3×3の行列をかけて画像変換するつもりです。しかし、その画像自体は3×3ではないので、直接かけることができません。

そこで、3×3以外の画像行列に、3×3行列をかけて、変換された画像を表示する方法をお聞きしたいです。
どうぞ宜しくお願いします。

A 回答 (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点に値を書き込む関数がわかれば、
あとは初等演算とループだけで組めるはずです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/09/10 17:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!