- 締切済み
【MATLAB】図の重ね合わせと拡大・縮小・回転
MATLABで、大きさと角度の違う2枚の画像を重ね合わせて比較をしたいのですが、 やり方が飲み込めません。 MATLABの「イメージのレジストレーション」を参考にしようとしたのですが、ちんぷんかんぷんで・・・ 画像を(手動で)2枚読み込んで、1枚を半透明にして重ねる までは出来たのですが、大きさや傾きを合わせられません。 >> uiopen('C:\Documents and Settings\xxx\aaa\C.jpg',1) %%画像C読み込み >> uiopen('C:\Documents and Settings\xxx\aaa\B.jpg',1) %%画像B読み込み >> imshow(C); %%画像C表示 >> hold on >> h = imshow(B); %%画像B表示 >> set(h,'AlphaData',0.5) 今のところこんな感じです; 1枚をベース画像の大きさに合わせて、傾きをそろえてから重ねあわせたいのです。 分かる方、ご回答お願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Kules
- ベストアンサー率47% (292/619)
「イメージのレジストレーション」って結構複雑なことしてるみたいですね…Image Processing Toolboxを購入して使うというのは選択肢に入れるわけにはいかないんですかね?というかimshowが使えているということはToolbox持ってるのでは? 私自身もImage Processing Toolboxを使ったことはないですし、このToolboxで行っている歪み補正などはどうやってるのか全くわかりません。 ただ、「図形の縮尺・拡大」と「図形の回転」は何とかなりそうですね。 「図形を何倍にするか」と「図形を何度傾けるか」については答えが出ているものとします。 imshowだとXData,YDataをそれぞれ2要素で与えられるので、片方に与える要素を定数倍してやればよいですね。 (例えば片方をimshow(C,'Xdata',[0,1]);として、もう片方をimshow(B,'XData',[0,2]);とすれば、BだけX軸方向に2倍に引き延ばされた画像になりますね) で、回転に関してはimshowだとちと厳しそうです。というのも、XData,YDataには2要素しか与えられないということは、画像の各辺がX軸、Y軸に平行な長方形であるという前提が入っていることになるので、「傾いた長方形」ってのは表現できなさそうです。 (http://www.mathworks.co.jp/help/ja_JP/toolbox/images/f12-23518.htmlを見た感じの推測ですが、imtransformで出てきた傾いた長方形の画像は、長方形になるように周りに白、または無色の画像を足していると思われます。パラメータFillValues→255がそれではないかと) imtransformを使えばもちろんできるんでしょうが、それを使わないのであれば別の手立てを考える必要があります。 現実的な方法としては、 1.画像を傾けて、長方形にならない部分は頑張って白で埋めて、imshow 2.傾いた長方形だけ作ってpcolor あたりでしょうか。 1にせよ2にせよ画像を傾けなければ話になりませんが、これはもともとのX座標、Y座標を指定の角度だけ回転させるということなので、回転行列による回転がそのまま使えます。 画像に対応してX座標、Y座標を回転させた後のX座標、Y座標をX1,Y1とするならば、 そのまま使うならpcolorに突っ込めばそれらしい絵が描けます。ただし、画像の全てのピクセルは傾いたままです。 ピクセルが傾いているのはよくない、ということであれば、別の大きな(X1,Y1を全て含む範囲で)真っ白いキャンバスを用意して、そこに1点ずつ色を乗せていく感じでしょうか。 あまりスマートな方法ではありませんが… ToolBoxを使わずに、となると正直このくらいしか私には思いつかないです。 参考になれば幸いです。