幾何変換

Classes

ClassDescription
Public classCFviAffine
画像アフィン変換クラス
Public classCFviGeoTrans
幾何変換基本クラス
Public classCFviMirror
画像ミラー反転クラス
Public classCFviPerspective
画像射影変換クラス
Public classCFviRotate
画像回転クラス
Public classCFviScale
画像サイズ変更クラス
Public classCFviShift
画像平行移動クラス
Public classCFviTranspose
画像転置クラス
Public classCFviWarp
座標マップ変換クラス
Public classErrorCode
エラーコード(幾何変換関連)
Public classFunction
幾何変換関数群

Enumerations

EnumerationDescription
Public enumerationMirrorDirection
ミラー反転方向
Public enumerationSamplingMode
濃度補間方法

Remarks

ここには、幾何変換関連のクラスを集約しています。

この機能は、画像の幾何変換を行うクラス本体と、変換行列を格納するデータ構造で構成されます。


トピック:


アフィン変換:

この機能は、ユーザが設定した行列(m)に従って下記の座標変換を行います。
出力座標X = (入力座標X * m[0][0]) + (入力座標Y * m[0][1]) + m[0][2]
出力座標Y = (入力座標X * m[1][0]) + (入力座標Y * m[1][1]) + m[1][2]


画像のアフィン変換を行うクラスは、以下の通りです。

  • CFviAffine: アフィン変換の基本クラス
  • CFviRotate: 画像の回転を行うクラス (CFviAffine の派生)
  • CFviScale: 画像のサイズ変更を行うクラス (CFviAffine の派生)


これらの機能は変換行列を格納する CFviMatrix のインスタンスを保有します。 CFviAffine の変換行列の内容は、ユーザが任意に変更可能です。 但し、行列サイズは 3x3 のみ使用可能です。 CFviRotateCFviScale も変換行列を保有しますが、 パラメータから決定しますので ユーザが変換行列を直接変更する事はできません。

下図は、CFviAffine により回転と平行移動を行った例です。
【入力画像】【出力画像】

[↑戻る]


射影変換:

この機能は、ユーザが設定した行列(m)に従って下記の座標変換を行います。
sum = 入力座標X * m[2][0] + 入力座標Y * m[2][1] + m[2][2]
出力座標x = ( 入力座標X * m[0][0] + 入力座標Y * m[0][1] + m[0][2] ) / sum
出力座標y = ( 入力座標X * m[1][0] + 入力座標Y * m[1][1] + m[1][2] ) / sum


画像の射影変換を行うクラスは、以下の通りです。



この機能は変換行列を格納する CFviMatrix のインスタンスを保有します。 変換行列の内容は、ユーザが任意に変更可能です。 但し、行列サイズは 3x3 のみ使用可能です。

下図は、CFviPerspective による処理結果の例です。
【入力画像】【出力画像】

[↑戻る]


その他の幾何変換:

その他の幾何変換を行うクラスは、以下の通りです。


平行移動:
【入力画像】【出力画像】

ミラー反転:
【入力画像】【出力画像】

転置:
【入力画像】【出力画像】

[↑戻る]


有効画素マスク画像:

本ライブラリの幾何変換クラス(アフィン変換、射影変換、平行移動、座標マップ変換)では、 出力画像での無効領域を判定するためのマスク画像を作成することが出来ます。 マスク画像は、有効画素が1、無効画素が0となる2値画像で出力されます。

[↑戻る]


濃度補間方法:

幾何変換で使用できる濃度補間方法は、以下の6種類です。 機能によって使用できない補間方法がありますので、 詳しくは SamplingMode の説明をご参照ください。

  • NearestNeighbor: 最近傍法
  • Bilinear: 共一次線形補間法
  • Cubic: 三次畳み込み法
  • Lanczos: Lanczos-windowed Sinc function を使用した濃度補間法
  • Super: Super-sampling 法
  • Adapt: Adaptive Super-sampling 法

[↑戻る]


座標の仕様:

本ライブラリの座標の仕様は、殆どの場合 画像の左上の画素を基準座標(0,0)としていますが、 幾何変換は、処理範囲の左上の画素を基準座標(0,0)としています。 その為、他の計測系の機能と幾何変換を連携するには、下式により座標値の変換を行う必要があります。 例えば、2値ブローブ解析から得たブローブの重心位置を中心に回転する場合は、 重心位置を下式により処理対象画像の左上からの相対値に変換してから幾何変換行列を設定してください。

式) 相対値 = 画像の左上を基準とした座標 − 処理範囲の左上座標

以下にアフィン変換による回転を行った具体例を示します。 左側が入力画像(処理対象)、右側が出力画像(処理結果)です。 半透明の青い部分が処理範囲を示し、赤い十字が回転中心を示します。 ここでは、視覚的に効果が分かりやすいように縦横を等間隔に区切った画像を処理対象にしています。 1つの枡が 48x48 画素ありますので、以下の説明で記載される座標の目安としてください。

下図は、X,Y=0,0 を回転中心とし、0°回転、+0 移動した例です。 つまり、何も変換しなかった場合は、入力側の処理範囲内の画像が出力側の処理範囲の左上へコピーされます。 入力側の処理範囲は 48,48 を始点に WxH=144x48 に設定しています。 出力側の処理範囲は 48,0 を始点に WxH=144x144 に設定しています。 これを基本として、以下の (1)~(4) の例をご参照ください。


(1) 座標 0,0 を中心に 45°回転した場合

(2) 座標 48,24 を中心に 45°回転した場合

(3) 座標 48,96 を中心に 90°回転した場合

(4) 座標 0,0 を中心に 90°回転し、X方向に +48 移動した場合

[↑戻る]