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

imwarp

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

説明

B = imwarp(A,tform) は、幾何学的変換 tform に従ってイメージ A を変換します。入力イメージ A には、数値配列、logical 配列、または categorical 配列を指定できます。tform は幾何学的変換オブジェクトです。関数は、入力イメージと同じクラスの変換されたイメージを 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) は、幾何学的変換のさまざまな特性を制御する名前と値のペアの引数を指定します。

すべて折りたたむ

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

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

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

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

    Dimensionality: 2
                 T: [3x3 double]

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

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

3 次元 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)
tform = 
  affine3d with properties:

    Dimensionality: 3
                 T: [4x4 double]

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

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])

入力引数

すべて折りたたむ

変換されるイメージ。任意の次元の数値配列、logical 配列、または categorical 配列として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | 論理値 | categorical

実行する幾何学的変換。affine2dprojective2d、または affine3d オブジェクトとして指定します。

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

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

変位場。数値配列として指定します。変位場は出力イメージのグリッド サイズと位置を定義します。変位値の単位はピクセルです。imwarp では、D は既定の固有座標系を基準とすると仮定しています。変位場の推定には、imregdemons を使用します。

  • A が m 行 n の 2 次元グレースケール イメージの場合、D は m x n x 2 です。変位場の 1 番目の平面 D(:,:,1) は、加算される変位の x 成分を表しています。imwarp はこれらの値を D の行と列の位置に加算し、A における再マップ後の位置を生成します。同様に、変位場の 2 番目の平面 D(:,:,2) が、加算される変位値の y 成分を表しています。

  • A が 2 次元 RGB イメージまたは m x n x p の 3 次元グレースケール イメージの場合、D は以下です。

    • m x n x p x 3。D(:,:,:,1) には x 軸方向の変位、D(:,:,:,2) には y 軸方向の変位、D(:,:,:,3) には z 軸方向の変位が格納されます。

    • m x n x 2。この場合、imwarp は一度に 1 平面に対して変位場を適用します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

変換されるイメージの空間参照情報。2 次元変換の imref2d オブジェクトまたは 3 次元変換の imref3d オブジェクトとして指定されます。

使用される内挿のタイプ。以下のいずれかの値を指定します。

内挿法説明
'linear'線形内挿。これは、数値配列と logical 配列に対する既定の内挿法です。
'nearest'最近傍内挿 — 出力ピクセルには、対象の点が含まれるピクセルの値が代入されます。周りの他のピクセルは、考慮に入れません。これは、categorical 配列に対する唯一かつ既定の内挿法です。
'cubic'3 次内挿

データ型: char | string

名前と値のペアの引数

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

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

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

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

  • 入力イメージが 2 次元であり、変換が 2 次元である場合、塗りつぶしの値はスカラーでなければなりません。

  • 入力イメージが 3 次元であり、変換が 3 次元である場合、塗りつぶしの値はスカラーでなければなりません。

  • 入力イメージが N 次元で、変換が 2 次元である場合、塗りつぶしの値には、スカラーか、サイズが入力イメージの上位次元 (3 番目から N 番目の次元) に一致する配列を指定できます。たとえば、A が 200 x 200 x 3 の RGB イメージの場合、塗りつぶしの値にはスカラーまたは 3 行 1 列の配列を指定できます。黒の塗りつぶしの値を指定するには、0 または [0;0;0] を指定できます。別の例として、A が 4 次元で、サイズが 200 x 200 x 3 x 10 である場合、塗りつぶしの値はスカラーまたは 3 行 10 列の配列となります。

  • 入力イメージが categorical 配列の場合、MATLAB 関数 missing を使用して塗りつぶしの値を指定します。categorical データの場合、missing<undefined> と同等です。

例: 128 は、データ型 uint8 のイメージに対して中程度の灰色の塗りつぶしの値を指定します。

例: 0.5 は、データ型 double のイメージに対して中程度の灰色の塗りつぶしの値を指定します。

例: [255 255 0] は、データ型 uint8 の 2 次元 RGB イメージに対して黄色の塗りつぶし色を指定します。

例: [1 1 0] は、データ型 double の 2 次元 RGB イメージに対して黄色の塗りつぶし色を指定します。

例: [0 1 0;1 1 0]' は、データ型 double の 2 つの RGB イメージのセットに対して緑色と黄色の塗りつぶし色を指定します。

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

出力引数

すべて折りたたむ

変換されたイメージ。入力イメージ A と同じサイズおよびデータ型の数値配列、logical 配列、または categorical 配列として返されます。

変換されたイメージの空間参照情報。imref2d または imref3d の空間参照オブジェクトとして返されます。

アルゴリズム

imwarp は、出力イメージの位置を入力イメージの対応する位置に逆マッピングして、出力イメージのピクセルの値を決定します。imwarp は入力イメージ内で内挿して出力ピクセル値を算出します。

次の図は平行移動変換を示しています。規則により、入力空間の軸には u および v、出力空間の軸には x および y のラベルが付けられます。入力イメージのピクセルの位置を定義する空間座標が imwarp によってどのように変更されるかを、この図で確認してください。(1,1) のピクセルが (41,41) に配置されました。このチェッカーボードのイメージでは、黒、白、グレーの四角はそれぞれが高さ 10 ピクセル、幅 10 ピクセルです。空間座標とピクセル座標の違いの詳細は、イメージの座標系を参照してください。

平行移動した入力イメージ

拡張機能

R2013a で導入