Main Content

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

imwarp

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

説明

B = imwarp(A,tform) は、幾何学的変換 tform に従って数値イメージ、論理イメージ、または categorical イメージ A を変換します。関数は変換されたイメージを B に返します。

B = imwarp(A,D) は、変位場 D に従ってイメージ A を変換します。

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

[___] = imwarp(___,interp) は、使用する内挿のタイプを指定します。

[___] =imwarp(___,Name,Value) は、幾何学的変換のさまざまな特性を制御する名前と値のペアの引数を指定します。

ヒント

入力の変換 tform でフォワード変換を定義しない場合は、名前と値のペアの引数 OutputView を使用して変換を高速化します。

すべて折りたたむ

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

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

イメージを読み取って表示します。イメージの空間範囲を確認するには、座標軸を表示します。

A = imread('kobi.png');
iptsetpref('ImshowAxesVisible','on')
imshow(A)

2 次元アフィン変換を作成します。この例では、範囲 [1.2, 2.4] の係数でのスケーリング、範囲 [-45, 45] 度の角度での回転、範囲 [100, 200] ピクセルの距離での水平方向の平行移動で構成されるランダムな変換を作成します。

tform = randomAffine2d('Scale',[1.2,2.4],'XTranslation',[100 200],'Rotation',[-45,45]);

イメージと変換について 3 つの異なる出力表示を作成します。

centerOutput = affineOutputView(size(A),tform,'BoundsStyle','CenterOutput');
followOutput = affineOutputView(size(A),tform,'BoundsStyle','FollowOutput');
sameAsInput = affineOutputView(size(A),tform,'BoundsStyle','SameAsInput');

異なる出力表示スタイルをそれぞれ使用して、入力イメージに変換を適用します。

BCenterOutput = imwarp(A,tform,'OutputView',centerOutput);
BFollowOutput = imwarp(A,tform,'OutputView',followOutput);
BSameAsInput = imwarp(A,tform,'OutputView',sameAsInput);

結果のイメージを表示します。

imshow(BCenterOutput)
title('CenterOutput Bounds Style');

imshow(BFollowOutput)
title('FollowOutput Bounds Style');

imshow(BSameAsInput)
title('SameAsInput Bounds Style');

iptsetpref('ImshowAxesVisible','off')

入力引数

すべて折りたたむ

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

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

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

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

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

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

  • A が 2 次元イメージの場合、D は m x n x 2 の配列です。変位場の 1 番目の平面 D(:,:,1) は、加算される変位の x 成分を表しています。imwarp はこれらの値を D の行と列の位置に加算し、A における再マップ後の位置を生成します。変位場の 2 番目の平面 D(:,:,2) が、加算される変位値の y 成分を表しています。カラー チャネルが複数ある 2 次元カラー イメージまたはマルチスペクトル イメージの場合、imwarp は各チャネルに同じ m x n x 2 の変位場を適用します。

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

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

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

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

内挿法説明
'nearest'

最近傍内挿。出力ピクセルには、対象の点が含まれるピクセルの値が代入されます。周りの他のピクセルは、考慮に入れません。

最近傍内挿は、categorical イメージでサポートされている唯一のメソッドであり、このタイプのイメージに対する既定のメソッドです。

'linear'線形内挿。これは、数値イメージと論理イメージに対する既定の内挿法です。
'cubic'3 次内挿

データ型: char | string

名前と値のペアの引数

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

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

ワールド座標系における出力イメージのサイズと位置。'OutputView' と空間参照オブジェクト imref2d または imref3d で構成されるコンマ区切りのペアとして指定します。このオブジェクトには、ワールド座標系における出力イメージのサイズと位置を定義するプロパティがあります。

関数 affineOutputView を使用することで、出力表示を作成できます。imwarp で計算される既定の出力表示を再現するには、affineOutputView の既定の境界のスタイル ('CenterOutput') を使用します。

入力の変位場 D を指定する場合、OutputView は指定できません。

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

数値イメージと論理イメージの既定の塗りつぶしの値は 0 です。categorical イメージの既定の塗りつぶしの値は missing です。<undefined> カテゴリに対応します。

イメージ タイプ

変換の次元

塗りつぶしの値の形式

2 次元グレースケール イメージまたは論理イメージ2 次元
  • 数値スカラー

2 次元カラー イメージまたは 2 次元マルチスペクトル イメージ2 次元
  • 数値スカラー

  • c 要素の数値ベクトル。c チャネルのそれぞれに塗りつぶしの値を指定します。カラー イメージの場合、チャネル数 c は 3 です。

一連の p 2 次元イメージ2 次元

  • 数値スカラー

  • c 行 p 列の数値行列。チャネル数 c は、グレースケール イメージの場合は 1 になり、カラー イメージの場合は 3 になります。

N 次元イメージ2 次元
  • 数値スカラー

  • 入力イメージ A の 3 ~ N 次元に一致するサイズの数値配列。たとえば、A が 200 x 200 x 10 x 3 である場合、FillValues は 10 行 3 列の配列となります。

3 次元グレースケール イメージまたは論理イメージ3 次元
  • 数値スカラー

categorical イメージ2 次元または 3 次元
  • イメージ内の有効なカテゴリ。string スカラーまたは文字ベクトルとして指定します。

  • missing<undefined> カテゴリに対応します。詳細については、missing を参照してください。

例: 255 にすると、uint8 イメージを白のピクセルで塗りつぶします

例: 1 にすると、double イメージを白のピクセルで塗りつぶします

例: [0 1 0] にすると、double カラー イメージを緑のピクセルで塗りつぶします

例: [0 1 0; 0 1 1]' にすると、2 つの double カラー イメージから成るセットの場合、1 番目のイメージを緑のピクセルで、2 番目のイメージをシアンのピクセルで塗りつぶします

例: "vehicle" にすると、categorical イメージを "vehicle" カテゴリで塗りつぶします

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

出力引数

すべて折りたたむ

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

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

アルゴリズム

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

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

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

拡張機能

R2013a で導入