Main Content

randomAffine3d

ランダムな 3 次元アフィン変換の作成

説明

tform = randomAffine3d は、恒等変換を実行する affinetform3d オブジェクトを作成します。

tform = randomAffine3d(Name,Value) は、名前と値の引数を使用して、アフィン変換のタイプを指定します。

すべて折りたたむ

サンプル ボリュームを作成します。

volumeCube = 0.5*ones(100,100,100);

シーンの外観を制御する 3 次元ビューアーを作成します。シーンのカメラ位置を設定して、ボリュームの可視状態を改良します。

viewer = viewer3d(CameraPosition=[700 -250 650],CameraTarget=[50 50 50]);

シーン内でボリュームを表示します。

volshow(volumeCube,Parent=viewer);

3 次元ボリュームをせん断する 3 次元アフィン変換を作成します。関数 randomAffine3d は、区間 [40, 60] 度内の連続一様分布からせん断量をランダムに選択します。randomAffine3d は、xy、または z 軸に一致するせん断方向をランダムに選択します。

tform1 = randomAffine3d(Shear=[40 60]);
J1 = imwarp(volumeCube,tform1);

せん断されたボリュームを、新しいシーンに同じカメラ位置で表示します。

viewer1 = viewer3d(CameraPosition=[700 -250 650],CameraTarget=[50 50 50]);
volshow(J1,Parent=viewer1);

ランダムに選択された異なる量だけボリュームをせん断するには、新しい 3 次元アフィン変換を作成します。せん断方向の違いに注目してください。

tform2 = randomAffine3d(Shear=[40 60]);
J2 = imwarp(volumeCube,tform2);

せん断されたボリュームを、新しいシーンに同じカメラ位置で表示します。

viewer2 = viewer3d(CameraPosition=[700 -250 650],CameraTarget=[50 50 50]);
volshow(J2,Parent=viewer2);

入力引数

すべて折りたたむ

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: tform = randomAffine3d(XReflection=true)

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: tform = randomAffine3d("XReflection",true)

水平方向のランダムな反転。false または true として指定します。XReflectiontrue (1) の場合、変換 tform は 50% の確率でイメージを水平方向に反転します。既定では、この変換はイメージを水平方向に反転しません。

垂直方向のランダムな反転。false または true として指定します。YReflectiontrue (1) の場合、変換 tform は 50% の確率でイメージを垂直方向に反転します。既定では、この変換はイメージを垂直方向に反転しません。

奥行方向のランダムな反転。false または true として指定します。ZReflectiontrue (1) の場合、変換 tform は 50% の確率でイメージを奥行方向に反転します。既定では、この変換はイメージを奥行方向に反転しません。

入力イメージに適用される回転の範囲。次のいずれかに指定します。回転は度単位で測定します。

  • 2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。randomAffine3d は、指定区間内の連続一様分布から回転角度をランダムに選択します。randomAffine3d は単位球体から回転軸をランダムに選択します。

  • 次の形式の関数ハンドル

    [rotationAxis,theta] = selectRotation
    関数 selectRotation は入力引数を受け入れてはなりません。この関数は 2 つの出力引数 rotationAxis (回転軸を定義する 3 要素ベクトル) と theta (度単位の回転角度) を返さなければなりません。

    関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して回転角度を選択します。関数ハンドルを使用して回転軸を指定することもできます。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では、変換 tform はイメージを回転しません。

例: [-45 45]

入力イメージに適用される一様 (等方性) スケーリングの範囲。次のいずれかに指定します。

  • 2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。スケール係数は、指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、スケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用してスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では、変換 tform はイメージをスケーリングしません。

例: [0.5 4]

入力イメージに適用されるせん断の範囲。次のいずれかに指定します。せん断は角度として度単位で測定され、範囲は (–90, 90) になります。

  • 2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。せん断角度は、指定区間内の連続一様分布からランダムに選択されます。randomAffine3d は、可能な 2 つの直交方向に対する主 x、y、および z 方向のいずれかの一様ランダム性を使用してせん断を適用します。

  • 関数ハンドル。関数は入力引数を受け入れず、せん断角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用してせん断角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では、変換 tform はイメージを水平方向にせん断しません。

例: [0 45]

入力イメージに適用される水平方向の平行移動の範囲。次のいずれかに指定します。平行移動距離はピクセル単位で測定します。

  • 2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。平行移動距離は、指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、平行移動距離を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して平行移動距離を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では、変換 tform はイメージを水平方向に平行移動しません。

例: [-5 5]

入力イメージに適用される垂直方向の平行移動の範囲。次のいずれかに指定します。平行移動距離はピクセル単位で測定します。

  • 2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。平行移動距離は、指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、平行移動距離を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して平行移動距離を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では、変換 tform はイメージを垂直方向に平行移動しません。

例: [-5 5]

入力イメージに適用される奥行方向の平行移動の範囲。次のいずれかとして指定します。平行移動距離はピクセル単位で測定します。

  • 2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。平行移動距離は、指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、平行移動距離を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して平行移動距離を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では、変換 tform はイメージを奥行方向に平行移動しません。

例: [-5 5]

出力引数

すべて折りたたむ

アフィン変換。affinetform3d オブジェクトとして返されます。

バージョン履歴

R2019b で導入

すべて展開する