このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
imtransform
(非推奨) イメージへの 2 次元空間変換の適用
imtransform
は推奨されません。2 次元および 3 次元の変換では、代わりに imwarp
を使用します。高次元の変換では、tformarray
を使用します。
構文
説明
は、空間変換のさまざまな特性を制御する名前と値のペアを使用します。B
= imtransform(___,Name,Value
)
例
単純な変換
グレースケール イメージに水平的なせん断を適用します。
I = imread('cameraman.tif'); tform = maketform('affine',[1 0 0; .5 1 0; 0 0 1]); J = imtransform(I,tform); imshow(J)
射影変換
射影変換によって、正方形を四辺形にマッピングします。入力イメージが、頂点 (0 0)、(1 0)、(1 1)、(0 1) を持つ単位正方形を塗りつぶすように、入力座標系を設定します。
I = imread('cameraman.tif');
udata = [0 1]; vdata = [0 1];
頂点 (-4 2)、(-8 3)、(-3 -5)、(6 3) を持つ四辺形に変換します。
tform = maketform('projective',[ 0 0; 1 0; 1 1; 0 1],... [-4 2; -8 -3; -3 -5; 6 3]);
灰色に塗りつぶして、双三次内挿を使用します。出力サイズを入力サイズと同じにします。
[B,xdata,ydata] = imtransform(I,tform,'bicubic', ... 'udata',udata,... 'vdata',vdata,... 'size',size(I),... 'fill',128); subplot(1,2,1); imshow(I,'XData',udata,'YData',vdata) subplot(1,2,2); imshow(B,'XData',xdata,'YData',ydata)
イメージのレジストレーション
航空写真を MATLAB® ワークスペースに読み取って表示します。
unregistered = imread('westconcordaerial.png');
figure
imshow(unregistered)
正射写真を MATLAB ワークスペースに読み取って表示します。
figure
imshow('westconcordorthophoto.png')
以前に選択したコントロール ポイントを読み込みます。
load westconcordpoints
ポイントを使用して、射影変換の変換構造体を作成します。
t_concord = cp2tform(movingPoints,fixedPoints,'projective');
正射写真の幅と高さを取得し、変換を実行して、結果を表示します。
info = imfinfo('westconcordorthophoto.png'); registered = imtransform(unregistered,t_concord,... 'XData',[1 info.Width],'YData',[1 info.Height]); figure imshow(registered)
入力引数
出力引数
ヒント
"イメージのレジストレーション"。関数
imtransform
は、出力イメージの原点を自動的にシフトして、変換されたイメージをできるだけ見やすくします。imtransform
を使用してイメージのレジストレーションを実行すると、構文B = imtransform(A,tform)
では、予想どおりの結果が得られない場合があります。出力イメージの空間的な位置を制御するには、XData
とYData
を明示的に設定します。"平行移動のみ"。純粋に平行移動のみを行う変換によって関数
imtransform
を呼び出すと、imtransform
の呼び出し時にXData
値とYData
値を指定していない場合、入力イメージとまったく同じ出力イメージが生成されます。たとえば、入力イメージに関連する平行移動を示し、出力と入力のサイズを同じ大きさにする場合、次の構文に示すようにimtransform
を呼び出します。B = imtransform(A,T,'XData',[1 size(A,2)],... 'YData',[1 size(A,1)])
このトピックの詳細については、シンプルな 2 次元平行移動変換の実行を参照してください。
"変換速度"。
XData
とYData
を使用して、B
に対する出力空間の位置を設定していない場合、imtransform
は、関数findbounds
を使用して、自動的に位置を決定します。アフィン変換や射影変換など、いくつかの一般的に使われる変換に対して、高速フォワード マッピングのオプションとしてfindbounds
を使用できます。フォワード マッピングを行わない変換、たとえば、fitgeotrans
で計算される多項式変換に対して、findbounds
はかなりの時間を要します。このような変換に対してXData
とYData
を直接指定できる場合、imtransform
は、かなり高速になります。"クリッピング"。
findbounds
を使用したXData
とYData
の自動推定によって、出力イメージがクリッピングされる場合があります。クリッピングを防止するには、XData
とYData
を直接設定します。