ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

imwarp

イメージへの幾何学的変換の適用

構文

  • B = imwarp(A,tform)
  • B = imwarp(A,D)
  • [B,RB] = imwarp(A,RA,tform)
  • B = imwarp(___,Interp)
  • [B,RB] = imwarp(___,Name,Value)

説明

B = imwarp(A,tform) は、幾何学的変換オブジェクト tform によって定義される幾何学的変換に従って、イメージ A を変換します。B は変換されたイメージです。

B = imwarp(A,D)D で定義された変位場に従って入力イメージ A を変換します。

[B,RB] = imwarp(A,RA,tform) は、イメージ データ A およびこれに関連付けられた空間参照オブジェクト RA によって指定される空間参照イメージを変換します。出力は、イメージ データ B およびこれに関連付けられた空間参照オブジェクト RB によって指定される空間参照イメージです。

B = imwarp(___,Interp) は、使用する内挿の形式を指定します。

[B,RB] = imwarp(___,Name,Value) は、幾何学的変換のさまざまな特性を制御するパラメーターを指定します。パラメーター名は省略形でも構いません。大文字と小文字は区別されません。

コード生成 サポート: あり。

MATLAB Function ブロック サポート: あり。

すべて折りたたむ

グレースケール イメージをワークスペースに読み取って表示します。

I = imread('cameraman.tif');
imshow(I)

2 次元幾何学的変換オブジェクトを作成します。

tform = affine2d([1 0 0; .5 1 0; 0 0 1])
tform = 

  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

変換をイメージに適用します。

J = imwarp(I,tform);
figure
imshow(J)

MRI データをワークスペースに読み取り、それを可視化します。

s = load('mri');
mriVolume = squeeze(s.D);
sizeIn = size(mriVolume);
hFigOriginal = figure;
hAxOriginal  = axes;
slice(double(mriVolume),sizeIn(2)/2,sizeIn(1)/2,sizeIn(3)/2);
grid on, shading interp, colormap gray

3 次元幾何学的変換オブジェクトを作成します。まず、Y 軸に対してイメージを回転した変換行列を作成します。次に、行列を関数 affine3d に渡します。

 theta = pi/8;
 t = [cos(theta)  0      -sin(theta)   0
     0             1              0     0
     sin(theta)    0       cos(theta)   0
     0             0              0     1]

tform = affine3d(t)
t =

    0.9239         0   -0.3827         0
         0    1.0000         0         0
    0.3827         0    0.9239         0
         0         0         0    1.0000


tform = 

  affine3d with properties:

                 T: [4x4 double]
    Dimensionality: 3

変換をイメージに適用します。

mriVolumeRotated = imwarp(mriVolume,tform);

変換されたボリュームの中心を通る 3 つのスライス平面を可視化します。

sizeOut = size(mriVolumeRotated);
hFigRotated = figure;
hAxRotated  = axes;
slice(double(mriVolumeRotated),sizeOut(2)/2,sizeOut(1)/2,sizeOut(3)/2);
grid on, shading interp, colormap gray

両方の軸のビューをリンクさせます。

linkprop([hAxOriginal,hAxRotated],'View');

回転の効果を確認するためのビューを設定します。

set(hAxRotated,'View',[-3.5 20.0])

入力引数

すべて折りたたむ

変換されるイメージであり、任意の数値クラスの非スパース実数値配列または論理値として指定されます。

実行される 2 次元または 3 次元の幾何学的変換であり、幾何学的変換オブジェクトとして指定されます。

  • tform が 2 次元で、ndims(A) > 2 である場合 (たとえば、RGB イメージなど)、imwarp は同じ 2 次元変換を、より高い次元に沿ってすべての 2 次元平面に適用します。

  • tform が 3 次元の場合、A は 3 次元イメージ ボリュームでなければなりません。

変位場。非スパースの数値行列として指定します。

A が 2 次元の場合には、D は m × n × 2 の数値配列になります。変位場の最初の平面 D(:,:,1) は、D の行と列の位置に加算される変位の X 成分を表しています。変位が加算されることで、 A における再マップ後の位置が得られます。同様に D(:,:,2) が、加算される変位の Y 成分を表しています。

A が 3 次元の場合には、D は m × n × p × 3 の数値配列になります。3 次元の場合、D(:,:,:,1) には x 軸方向の変位が格納され、D(:,:,:,2) には y 軸方向の変位が格納され、D(:,:,:,3) には z 軸方向の変位が格納されます。D の変位値の単位はピクセルです。A が m × n × p で D が m × n × 2 の場合、 imwarp は 1 平面ずつ変位場を適用します。imwarp は、D が既定の固有座標系をの基準とすると仮定します。

変換されるイメージに関連付けられている空間参照情報であり、空間参照オブジェクトとして指定されます。

  • tform が 2 次元幾何学的変換の場合、RA は 2 次元空間参照オブジェクト (imref2d) でなければなりません。

  • tform が 3 次元幾何学的変換の場合、RA は 3 次元空間参照オブジェクト (imref3d) でなければなりません。

使用される内挿の形式であり、以下のいずれかの文字列として指定されます。

内挿法説明
'linear’線形内挿
'nearest'最近傍内挿 — 出力ピクセルには、対象の点が含まれるピクセルの値が代入されます。周りの他のピクセルは、考慮に入れません。
'cubic'3 次内挿

データ型: char

名前/値のペアの引数

オプションの Name,Value 引数のペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

例: J = imwarp(I,tform,'FillValues',255) は塗りつぶしの値に白のピクセルを使用します。

すべて折りたたむ

ワールド座標系における出力イメージのサイズと位置。'OutputView' および空間参照オブジェクト imref2d または imref3d で構成されるコンマ区切りのペアとして指定します。指定した空間参照オブジェクトの ImageSizeXWorldLimits および YWorldLimits の各プロパティによって、出力イメージのサイズとワールド座標系における出力イメージの位置が定義されます。変位場を適用する場合、'OutputView' は使用できません。

入力イメージの境界外にある出力ピクセルに使用する値。'FillValues' および数値配列で構成されるコンマ区切りペアとして指定します。塗りつぶしの値は、入力イメージにおける対応する逆変換後の位置が完全に入力イメージの境界外である場合に、出力ピクセルに使用されます。

  • 入力イメージが 2 次元である場合、FillValues はスカラーでなければなりません。

  • 入力イメージが 3 次元であり、幾何学的変換が 3 次元である場合、FillValues はスカラーでなければなりません。

  • 入力イメージが N 次元であり、幾何学的変換が 2 次元である場合、FillValues はスカラーか、サイズが入力イメージの 3 次元から N 次元に一致する配列となります。

    たとえば、入力イメージが 200 x 200 x 3 の uint8 RGB イメージである場合、FillValues はスカラーか 3 行 1 列の配列となります。この RGB イメージの例において、FillValues は以下のいずれかとなる可能性があります。

    FillValue効果
    0黒で塗りつぶす
    [0;0;0]黒で塗りつぶす
    255白で塗りつぶす
    [255;255;255]白で塗りつぶす
    [0;0;255]青で塗りつぶす
    [255;255;0]黄色で塗りつぶす

  • 入力イメージが 4 次元で、サイズが 200 x 200 x 3 x 10 である場合、FillValues はスカラーであるか、3 行 10 列の配列となります。

滑らかなエッジを作成するためのイメージのパディング。論理値 true または false として指定します。true に設定すると、imwarp は入力イメージをパディングし (FillValues で指定された値を使用)、滑らかなエッジを出力イメージに作成します。false に設定すると、imwarp はイメージをパディングしません。入力イメージをパディングしなければ、出力イメージには鋭いエッジが発生しますが、2 つのイメージを並べてレジストレーションする場合に継ぎ目の歪みを最小化するのに役立ちます。

出力引数

すべて折りたたむ

変換されたイメージ。任意の数値クラスの非スパース実数値配列または論理値として返されます。

変換後のイメージに関連付けられている空間参照情報。空間参照オブジェクトとして返されます。

詳細

すべて折りたたむ

コード生成

この関数では MATLAB® Coder™ を使用した C コードの生成がサポートされています。汎用の MATLAB Host Computer ターゲット プラットフォームを選択した場合、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用するコードが、この関数によって生成されます。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細は、「Image Processing Toolbox のコード生成について」を参照してください。

コード生成時には、以下に注意してください。

  • 幾何学的変換オブジェクト入力 tformaffine2d または projective2d オブジェクトでなければなりません。

  • 内挿法とオプションのパラメーター名は文字列定数でなければなりません。

MATLAB Function ブロック

この関数は Simulink の MATLAB Function ブロックで使用できます。

入力引数 TFORM はコンパイル時の定数でなければなりません。

R2013a で導入

この情報は役に立ちましたか?