2次元エッジ検出クラス

Namespace: FVIL.Edge
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
[SerializableAttribute]
public class CFviEdge2D : CFviImageParser
Visual Basic
<SerializableAttribute>
Public Class CFviEdge2D
	Inherits CFviImageParser

Remarks

指定された画像からエッジの勾配方向および強度を含むエッジ検出を行うクラスです。

このクラスは、 Param プロパティと Result プロパティに 指定されたクラスの型によって、内部でエッジ検出手法とピクセル処理(実数/整数)を切り替えます。
※従来の CFviEdge2DCorrelationCFviEdge2DSobel は、実数版を使用しています。
整数版は、実数版に比べて精度が低いですが、処理速度が速いメリットがあります。

対応表:
Param/ResultCFviEdgeResultD64CFviEdgeResultI32備考
CFviEdge2DCorrelationParam 相関エッジ法 (実数版) 相関エッジ法 (整数版) 実数版は、従来の CFviEdge2DCorrelation と同じ精度です。
CFviEdge2DSobelParam ソーベル法 (実数版) ソーベル法 (整数版) 実数版は、従来の CFviEdge2DSobel と同じ精度です。

要求する入出力画像数:
項目定数
入力画像1SrcImageCount フィールド
出力画像1DstImageCount フィールド

処理対象画像の条件:

エッジ検出手法によって条件が異なります。
相関エッジ法の場合は下記の条件を満たしている必要が有ります。

  • 入力画像の画像種別が以下のいずれかで、チャネル数が 1 であること
  • 出力画像の画像種別が FVIL.ImageType.US16、チャネル数が 1 であること
  • 入力画像と出力画像の処理範囲のサイズが一致していること

ソーベル法の場合は下記の条件を満たしている必要が有ります。
  • 入力画像の画像種別が FVIL.ImageType.UC8、チャネル数が 1 であること
  • 出力画像の画像種別が FVIL.ImageType.US16、チャネル数が 1 であること
  • 入力画像と出力画像の処理範囲のサイズが一致していること


※ 出力画像は、エッジ強度を画像に保存する場合に使用します。
SaveMode が Mag または All のときは出力画像にエッジ強度画像を生成します。 不要な場合は null を指定してください。

初期値と範囲:
プロパティ初期値範囲説明
Resultnull 以下のクラスの何れかを指定できます。
CFviEdgeResultD64
CFviEdgeResultI32
エッジ検出結果を格納するオブジェクト
Paramnull 以下のクラスの何れかを指定できます。
CFviEdge2DCorrelationParam
CFviEdge2DSobelParam
エッジ検出パラメータを指定するオブジェクト
BorderModeBorderMode.NoneBorderMode に定義された定数ボーダーモード
MagModeMagMode.XYMagMode に定義された定数保持するエッジ勾配強度
SaveModeSaveMode.NoneSaveMode に定義された定数の論理和 エッジ勾配方向と強度の保持

エッジ勾配方向と強度の保持:

計測結果として、エッジ方向勾配方向やエッジ強度も取得するかどうかは、SaveMode の設定により決定します。 Direct が指定されている場合はエッジ勾配方向、Mag が指定されている場合はエッジ強度を取得します。 All が指定されている場合は両方を取得します。

エッジ強度を取得する場合は、出力画像にエッジ強度画像を生成することが可能です。 不要な場合は null を指定してください。 エッジ強度を取得しない設定の場合は、出力画像は無視します。 但し、Validate()()()() メソッドは SaveMode に関わらず処理しますので 出力画像に null が設定されている場合に実行すると例外(HAVE_NOT_IMAGE)を発行します。


エッジ強度について:

エッジ強度は、0.0〜1.0 (整数版では 0~16384) の間の値で返され、エッジが強いほど 1.0 (整数版では 16384) に近くなります。
エッジ強度画像は、 最大値が US16 の MAX(65535) となるように正規化されています。


検出結果:

検出結果は Result プロパティに設定されたエッジ検出結果格納用オブジェクトに格納されます。


■ 実数版(CFviEdgeResultD64) の要素の内容
フィールド内容範囲
x, yエッジ位置座標(画像座標)
mag強度0.0~1.0
q勾配方向-PI~PI (radian)

■ 整数版(CFviEdgeResultI32) の要素の内容
フィールド内容範囲
x, yエッジ位置座標(画像座標)
mag強度0~16384
q勾配方向-180~180 (degree)

処理時間について:

このクラスは、従来の CFviEdge2DCorrelationCFviEdge2DSobel の改良版です。 データコピーやインスタンス生成のコストを削減できます。 エッジ検出処理では大差ありませんが、エッジ点群の取得や他の幾何計算との連携では大きな効果があります。 また、.NET 環境へのデータコピーを減らすことにより、FVCL (ネイティブ C++ 版)との差も減らせます。


下表に、参考値を示します。

動作環境:

CPU: Intel Core2 Duo E7500 2.93GHz
O/S: Microsoft Windows XP x64 Edition

表1) 検出時間(msec)の比較

エッジ検出時間を比較した結果です。使用した画像は 1600x1200 UC8 x1ch です。
従来に比べると、データコピーが無い為、処理時間を 2 msec ほど減らせます。 ネイティブとの差はありません。 (※注意: 初回の呼び出しは JIT コンパイラの処理時間がある為、ネイティブより時間が掛かります。)

項目FVILFVCL備考
従来のクラス64.19464.262CFviEdge2DCorrelation の実行時間です。
右側は、これに対応した FVCL クラスの処理時間です。
当クラス(実数版)62.68562.592CFviEdge2D で相関エッジ法(実数版)を実行した時間です。
右側は、これに対応した FVCL クラスの処理時間です。
当クラス(整数版)58.35956.010CFviEdge2D で相関エッジ法(整数版)を実行した時間です。
右側は、これに対応した FVCL クラスの処理時間です。
表2) エッジ点群を参照する時間(msec)の比較

エッジ検出後、Result からエッジ点群(26,600点)を全て取得する時間を比較した結果です。
従来に比べると、データコピーやインスタンス生成時間が無い為、処理時間が大幅に減っていますが、 ネイティブに比べると処理時間が掛かります。 (.NET 環境からネイティブ環境の関数呼び出しのオーバーヘッドがある為)
ポインタ走査と同様のパフォーマンスを求める場合は、 F_DEDGE_PTRF_EDGE_PTR を介してください。
安全性を求める場合は、 CFviEdgeResultD64CFviEdgeResultI32 の インデクサを使用してください。

項目FVILFVCL備考
従来のクラス14.3420.856CFviEdgeResult から全データを取得した時間です。
右側は、これに対応した FVCL クラスの処理時間です。
当クラス(実数版)2.1810.192CFviEdgeResultD64 のインデクサを介し、全データを取得した時間です。
右側は、これに対応した FVCL クラスの処理時間です。
当クラス(整数版)2.2640.205CFviEdgeResultI32 のインデクサを介し、全データを取得した時間です。
右側は、これに対応した FVCL クラスの処理時間です。

処理対象画像の有効性検査と有効化:
  • 入力画像の有効性検査
    このクラスの CheckValidity(CFviImage) 関数で入力画像の有効性を検査できます。 この関数はスタティックメンバですので、このクラスのインスタンスを生成せずに直接呼び出す事ができます。
  • 入出力画像の整合性検査
    このクラスの IsValid()()()() メソッドで入出力画像の整合性を検査できます。 このメソッドが false を返す場合は、前述の処理対象画像の条件を満たしていない為、 実行できない事を意味します。
  • 出力画像の有効化
    このクラスでは有効化はサポートしていません。
    Validate()()()() または Validate(Int32) メソッドを実行した場合は常に例外を発行します。

関連する FIE 関数:

fnFIE_edge_corr
fnFIE_edge_corr_subpix
fnFIE_edge_sobel
fnFIE_edge_sobel_subpix

Inheritance Hierarchy

System..::..Object
FVIL..::..CFviObject
FVIL..::..CFviImageParser
FVIL.Edge..::..CFviEdge2D

See Also