このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
imwarp
イメージへの幾何学的変換の適用
構文
説明
[___] = 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: T: [3x3 double] Dimensionality: 2
変換をイメージに適用します。
J = imwarp(I,tform); figure imshow(J)
3 次元 MRI データセットへの回転変換の適用
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: 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])
さまざまな出力表示スタイルを使用したイメージのワープ
イメージを読み取って表示します。イメージの空間範囲を確認するには、座標軸を表示します。
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')
入力引数
A
— 変換されるイメージ
数値配列 | logical 配列 | categorical 配列
変換されるイメージ。任意の次元の数値配列、logical 配列、または categorical 配列として指定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| categorical
tform
— 幾何学的変換
rigid2d
オブジェクト | affine2d
オブジェクト | projective2d
オブジェクト | rigid3d
オブジェクト | affine3d
オブジェクト
D
— 変位場
数値配列
変位場。数値配列として指定します。変位場は出力イメージのグリッド サイズと位置を定義します。変位値の単位はピクセルです。imwarp
では、D
は既定の固有座標系を基準とすると仮定しています。変位場の推定には、imregdemons
を使用します。
A
が m 行 n 列の 2 次元グレースケール イメージの場合、m x n x 2 の配列として変位場を指定します。D(:,:,1)
には x 軸方向の変位が格納されます。imwarp
は、これらの値をD
の列と行の位置に加算し、A
における再マップ後の位置を生成します。同様に、D(:,:,2)
には y 軸方向の変位が格納されます。A
が m x n x c の 2 次元 RGB イメージまたは 2 次元 マルチスペクトル イメージで、なおかつ m x n x 2 の配列としてD
が指定されている場合、imwarp
は、各 2 次元カラー チャネルに対して個別に処理を行います。D(:,:,1)
には、すべてのカラー チャネルの x 軸方向の変位が格納されます。同様に、D(:,:,2)
には y 軸方向の変位が格納されます。A
が m x n x p の 3 次元グレースケール イメージの場合、m x n x p x 3 の配列として変位場配列を指定します。D(:,:,:,1)
には x 軸方向の変位が格納されます。imwarp
は、これらの値をD
の列、行、および深さの位置に加算し、A
における再マップ後の位置を生成します。同様に、D(:,:,:,2)
とD(:,:,:,3)
には y 軸方向と z 軸方向の変位が格納されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
interp
— 使用される内挿のタイプ
'nearest'
| 'linear'
| 'cubic'
使用される内挿のタイプ。以下のいずれかの値を指定します。
内挿法 | 説明 |
---|---|
'nearest' | 最近傍内挿。出力ピクセルには、対象の点が含まれるピクセルの値が代入されます。周りの他のピクセルは、考慮に入れません。 最近傍内挿は、categorical イメージでサポートされている唯一のメソッドであり、このタイプのイメージに対する既定のメソッドです。 |
'linear' | 線形内挿。これは、数値イメージと論理イメージに対する既定の内挿法です。 |
'cubic' | 3 次内挿 |
データ型: char
| string
名前と値の引数
例: 'FillValues',255
は 255 を塗りつぶしの値として使用します
オプションの引数 Name,Value
のコンマ区切りペアを指定します。Name
は引数名で、Value
は対応する値です。Name
は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN
のように、複数の名前と値のペアの引数を、任意の順番で指定できます。
OutputView
— 出力イメージのサイズと位置
imref2d
オブジェクト | imref3d
オブジェクト
ワールド座標系における出力イメージのサイズと位置。'OutputView'
と空間参照オブジェクト imref2d
または imref3d
で構成されるコンマ区切りのペアとして指定します。このオブジェクトには、ワールド座標系における出力イメージのサイズと位置を定義するプロパティがあります。
関数 affineOutputView
を使用することで、出力表示を作成できます。imwarp
で計算される既定の出力表示を再現するには、affineOutputView
の既定の境界のスタイル ('CenterOutput'
) を使用します。
入力の変位場 D
を指定する場合、OutputView
は指定できません。
FillValues
— 塗りつぶしの値
数値スカラー | 数値配列 | string スカラー | 文字ベクトル | missing
入力イメージの外側にある出力ピクセルに使用する塗りつぶしの値。'FillValues'
と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。imwarp
は、入力イメージにおける対応する逆変換後の位置が完全に入力イメージの境界外である場合に、塗りつぶしの値を出力ピクセルに使用します。
数値イメージと論理イメージの既定の塗りつぶしの値は 0
です。categorical イメージの既定の塗りつぶしの値は missing
です。<undefined>
カテゴリに対応します。
イメージ タイプ | 変換の次元 | 塗りつぶしの値の形式 |
---|---|---|
2 次元グレースケール イメージまたは論理イメージ | 2 次元 |
|
2 次元カラー イメージまたは 2 次元マルチスペクトル イメージ | 2 次元 |
|
一連の p 2 次元イメージ | 2 次元 |
|
N 次元イメージ | 2 次元 |
|
3 次元グレースケール イメージまたは論理イメージ | 3 次元 |
|
categorical イメージ | 2 次元または 3 次元 |
|
例: 255
にすると、uint8
イメージを白のピクセルで塗りつぶします
例: 1
にすると、double
イメージを白のピクセルで塗りつぶします
例: [0 1 0]
にすると、double
カラー イメージを緑のピクセルで塗りつぶします
例: [0 1 0; 0 1 1]'
にすると、2 つの double
カラー イメージから成るセットの場合、1 番目のイメージを緑のピクセルで、2 番目のイメージをシアンのピクセルで塗りつぶします
例: "vehicle"
にすると、categorical イメージを "vehicle" カテゴリで塗りつぶします
SmoothEdges
— 滑らかなエッジを作成するためのイメージのパディング
false
(既定値) | true
滑らかなエッジを作成するためのイメージのパディング。true
または false
を指定します。true
に設定すると、imwarp
は FillValues
で指定された値を使用して入力イメージをパディングすることで、滑らかなエッジを出力イメージに作成します。false
に設定すると、imwarp
はイメージをパディングしません。false
(パディングなし) を選択すると、入力イメージによって出力イメージに鋭いエッジが生成される可能性があります。こうした鋭いエッジは、2 つのイメージを並べてレジストレーションする場合に継ぎ目の歪みを最小化するのに役立ちます。
出力引数
アルゴリズム
imwarp
は、出力イメージの位置を入力イメージの対応する位置に逆マッピングして、出力イメージのピクセルの値を決定します。imwarp
は入力イメージ内で内挿して出力ピクセル値を算出します。
次の図は平行移動変換を示しています。規則により、入力空間の軸には u および v、出力空間の軸には x および y のラベルが付けられます。入力イメージのピクセルの位置を定義する空間座標が imwarp
によってどのように変更されるかを、図で確認してください。(1,1) のピクセルが (41,41) に配置されました。このチェッカーボードのイメージでは、黒、白、グレーの四角はそれぞれが高さ 10 ピクセル、幅 10 ピクセルです。空間座標とピクセル座標の違いの詳細については、イメージの座標系を参照してください。
平行移動した入力イメージ
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
imwarp
では C コードの生成がサポートされています (MATLAB® Coder™ が必要)。汎用のMATLAB Host Computer
ターゲット プラットフォームを選択した場合、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用するコードが、imwarp
によって生成されます。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細については、Image Processing Toolbox でサポートされているコード生成のタイプを参照してください。データ型 categorical の入力イメージはサポートされていません。
幾何学的変換オブジェクト入力
tform
はrigid2d
、affine2d
、またはprojective2d
オブジェクトでなければなりません。内挿法とオプションのパラメーター名は定数でなければなりません。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意および制限:
データ型 categorical の入力イメージはサポートされていません。
幾何学的変換オブジェクト入力
tform
はrigid2d
、affine2d
、またはprojective2d
オブジェクトでなければなりません。内挿法とオプションのパラメーター名は定数でなければなりません。
空間参照情報出力
RB
はサポートされません。
スレッドベースの環境
MATLAB® backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ のThreadPool
を使用してコードを高速化します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、Run MATLAB Functions in Thread-Based Environmentを参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意および制限:
'nearest'
および'linear'
の内挿タイプのみがサポートされます。'SmoothEdges'
パラメーターの値としてサポートされているのはfalse
のみです。
詳細については、GPU でのイメージ処理を参照してください。
バージョン履歴
参考
アプリ
関数
affineOutputView
|imregister
|imregtform
|imregdemons
|imtranslate
|randomWindow2d
|centerCropWindow2d
|missing
オブジェクト
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)