Main Content

2 次元および 3 次元の幾何学的変換プロセスの概要

2 次元または 3 次元幾何学的変換を実行するには、まず変換に関する情報を格納する幾何学的変換オブジェクトを作成します。次に、変換するイメージと幾何学的変換オブジェクトを関数 imwarp に渡します。オプションで、入力イメージに関する空間参照情報を imwarp に指定できます。

imwarp は、幾何学的変換を使用して、出力イメージの座標を入力イメージの対応する座標にマッピングします (逆マッピング)。次に、imwarp は座標マッピングを使用して入力イメージ内にピクセル値を内挿し、出力ピクセル値を計算します。

幾何学的変換オブジェクトの作成

異なるタイプの幾何学的変換オブジェクトには、変換に関する異なる情報が格納されます。

幾何学的変換オブジェクトを作成するには、いくつかの方法があります。

幾何学的変換の作成方法

transltform2d

transltform3d

rigidtform2d

rigidtform3d

simtform2d

simtform3d

affinetform2d

affinetform3d

projective2d

geometricTransform2d

geometricTransform3d

他の幾何学的変換
平行移動、回転、またはスケーリング パラメーターの指定XX    
変換行列の指定XXXX  
点単位のカスタム マッピング関数の指定    X 
コントロール ポイントのペアからの変換の推定 X (2 次元)X (2 次元)X (2 次元) X
類似性の最適化を使用した変換の推定X (2 次元)X (2 次元)X (2 次元)   
位相相関を使用した変換の推定X (2 次元)X (2 次元)    
ランダムなアフィン変換の生成  X   

平行移動、回転、またはスケーリング パラメーターの指定

平行移動、回転角度、および倍率の量が既知の場合は、これらのパラメーターを指定して変換を作成することができます。

  • 平行移動を指定して、平行移動変換を表す transltform2d オブジェクトおよび transltform3d オブジェクトを作成します。

  • 平行移動、回転角度、またはその両方を指定して、剛体変換を表す rigidtform2d オブジェクトおよび rigidtform3d オブジェクトを作成します。

  • 平行移動、回転、および等方性倍率の組み合わせを指定して、無反射相似変換を表す simtform2d オブジェクトおよび simtform3d オブジェクトを作成します。

次の例では、平行移動および回転角度を定義してから、指定されたパラメーターから rigidtform2d 幾何学的変換オブジェクトを作成します。

theta = 30;
translation = [10 20.5];
tform = rigidtform2d(theta,translation)
tform = 

  rigidtform2d with properties:

    Dimensionality: 2
     RotationAngle: 30
       Translation: [10 20.5000]
                 R: [2×2 double]
                 A: [3×3 double]

変換行列の指定

もっと複雑な線形幾何学的変換の場合は、変換を行列として表すことができます。たとえば、射影変換、あるいは鏡映、異方性スケーリング、せん断、または線形変換の成分を含むアフィン変換に行列表現を使用します。変換行列を指定して、affinetform2daffinetform3d、または projtform2d オブジェクトを作成します。変換行列の作成の詳細については、幾何学的変換の行列表現を参照してください。

次の例では、異方性スケーリングおよび y 軸に関する鏡映の変換行列を定義してから、変換行列から affinetform2d 幾何学的変換オブジェクトを作成します。

scaleX = 0.8;
scaleY = 1.5;
A = [scaleX 0 0; 0 -scaleY 0; 0 0 1];
tform = affinetform2d(A)
tform = 

  affinetform2d with properties:

    Dimensionality: 2
                 A: [3×3 double]

点単位のカスタム マッピング関数の指定

点単位の逆マッピング関数がある場合、geometricTransform2d オブジェクトおよび geometricTransform3d オブジェクトをそれぞれ使用して、カスタムの 2 次元および 3 次元幾何学的変換を作成できます。

次の例では、パックされた (x,y) 形式の 2 次元の点を受け入れ、同じ形式の点を返す逆マッピング関数を指定します。その後、この例では逆マッピング関数から geometricTransform2d 幾何学的変換オブジェクトを作成します。

inversefn = @(c) [c(:,1)+c(:,2),c(:,1).^2]
inversefn = 

  function_handle with value:

    @(c)[c(:,1)+c(:,2),c(:,1).^2]
tform = geometricTransform2d(inversefn)
tform = 

  geometricTransform2d with properties:

        InverseFcn: [function_handle]
        ForwardFcn: []
    Dimensionality: 2

同様に、次の例では、逆マッピング関数を使用して geometricTransform3d 幾何学的変換オブジェクトを作成します。この例では、パックされた (x,y,z) 形式の 3 次元の点を受け入れて返す逆マッピング関数を指定します。

inversefn = @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
inversefn = 

  function_handle with value:

    @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
tform = geometricTransform3d(inversefn)
tform = 

  geometricTransform3d with properties:

        InverseFcn: [function_handle]
        ForwardFcn: []
    Dimensionality: 3

コントロール ポイントのペアからの変換の推定

幾何学的変換オブジェクトを作成するには、関数 fitgeotform2d にコントロール ポイントのペアを渡します。関数 fitgeotform2d はこれらのポイントから変換を自動的に推定し、幾何学的変換オブジェクトの 1 つを返します。

必要な点の数は、変換の種類によって異なります。たとえば、アフィン変換では各イメージに 3 つの同一線上にない点 (三角形) が必要ですが、射影変換では 4 つの点 (四角形) が必要です。

この例では、2 ペアのコントロール ポイントを定義してから、fitgeotform2d を使用して affinetform2d 幾何学的変換オブジェクトを作成します。

movingPoints = [11 11;21 11; 21 21];
fixedPoints = [51 51;61 51;61 61];
tform = fitgeotform2d(movingPoints,fixedPoints,"affine")
tform = 

  affinetform2d with properties:

    Dimensionality: 2
                 A: [3×3 double]

類似性の最適化を使用した変換の推定

固定イメージと、わずかに位置のずれた移動イメージがある場合、関数 imregtform を使用して、イメージの位置を合わせるアフィン幾何学的変換を推定できます。imregtform は、規則的なステップ勾配降下オプティマイザーまたは (1+1) 進化オプティマイザーを使用して、2 つのイメージの平均二乗またはマテス相互情報量の類似度メトリクスを最適化します。詳細については、強度ベースのイメージ レジストレーションのオプティマイザーとメトリクスの作成を参照してください。

位相相関を使用した変換の推定

固定イメージと、わずかに位置のずれた移動イメージがある場合、関数 imregcorr を使用して、イメージの位置合わせを改善するアフィン幾何学的変換を推定できます。類似性の最適化を使用して、結果の変換を調整できます。

ランダムなアフィン変換の生成

関数 randomAffine2d および randomAffine3d を使用することで、ランダム化された変換パラメーターをもつアフィン幾何学的変換を作成できます。これらの関数は、各軸に関する鏡映、回転、せん断、および異方性倍率を含むすべてのアフィン パラメーターをサポートしています。ランダム化されたアフィン変換は、深層学習のデータ拡張手法として一般に使用されています。

参考

関連する例

詳細