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 プロパティに
指定されたクラスの型によって、内部でエッジ検出手法とピクセル処理(実数/整数)を切り替えます。
※従来の
CFviEdge2DCorrelation と
CFviEdge2DSobel は、実数版を使用しています。
整数版は、実数版に比べて精度が低いですが、処理速度が速いメリットがあります。
Param/Result | CFviEdgeResultD64 | CFviEdgeResultI32 | 備考 |
---|---|---|---|
CFviEdge2DCorrelationParam | 相関エッジ法 (実数版) | 相関エッジ法 (整数版) | 実数版は、従来の CFviEdge2DCorrelation と同じ精度です。 |
CFviEdge2DSobelParam | ソーベル法 (実数版) | ソーベル法 (整数版) | 実数版は、従来の CFviEdge2DSobel と同じ精度です。 |
要求する入出力画像数:
項目 | 数 | 定数 |
---|---|---|
入力画像 | 1 | SrcImageCount フィールド |
出力画像 | 1 | DstImageCount フィールド |
処理対象画像の条件:
エッジ検出手法によって条件が異なります。
相関エッジ法の場合は下記の条件を満たしている必要が有ります。
- 入力画像の画像種別が以下のいずれかで、チャネル数が 1 であること
- 出力画像の画像種別が FVIL.ImageType.US16、チャネル数が 1 であること
- 入力画像と出力画像の処理範囲のサイズが一致していること
ソーベル法の場合は下記の条件を満たしている必要が有ります。
- 入力画像の画像種別が FVIL.ImageType.UC8、チャネル数が 1 であること
- 出力画像の画像種別が FVIL.ImageType.US16、チャネル数が 1 であること
- 入力画像と出力画像の処理範囲のサイズが一致していること
※ 出力画像は、エッジ強度を画像に保存する場合に使用します。
SaveMode が Mag または All のときは出力画像にエッジ強度画像を生成します。 不要な場合は null を指定してください。
初期値と範囲:
プロパティ | 初期値 | 範囲 | 説明 |
---|---|---|---|
Result | null |
以下のクラスの何れかを指定できます。 CFviEdgeResultD64 CFviEdgeResultI32 | エッジ検出結果を格納するオブジェクト |
Param | null |
以下のクラスの何れかを指定できます。 CFviEdge2DCorrelationParam CFviEdge2DSobelParam | エッジ検出パラメータを指定するオブジェクト |
BorderMode | BorderMode.None | BorderMode に定義された定数 | ボーダーモード |
MagMode | MagMode.XY | MagMode に定義された定数 | 保持するエッジ勾配強度 |
SaveMode | SaveMode.None | SaveMode に定義された定数の論理和 | エッジ勾配方向と強度の保持 |
エッジ勾配方向と強度の保持:
計測結果として、エッジ方向勾配方向やエッジ強度も取得するかどうかは、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 が設定されている場合は、実数版が動作します。
- CFviEdgeResultI32 が設定されている場合は、整数版が動作します。
■ 実数版(CFviEdgeResultD64) の要素の内容
■ 整数版(CFviEdgeResultI32) の要素の内容
処理時間について:
このクラスは、従来の CFviEdge2DCorrelation や CFviEdge2DSobel の改良版です。 データコピーやインスタンス生成のコストを削減できます。 エッジ検出処理では大差ありませんが、エッジ点群の取得や他の幾何計算との連携では大きな効果があります。 また、.NET 環境へのデータコピーを減らすことにより、FVCL (ネイティブ C++ 版)との差も減らせます。
下表に、参考値を示します。
動作環境:
CPU: Intel Core2 Duo E7500 2.93GHz
O/S: Microsoft Windows XP x64 Edition
エッジ検出時間を比較した結果です。使用した画像は 1600x1200 UC8 x1ch です。
従来に比べると、データコピーが無い為、処理時間を 2 msec ほど減らせます。
ネイティブとの差はありません。
(※注意: 初回の呼び出しは JIT コンパイラの処理時間がある為、ネイティブより時間が掛かります。)
項目 | FVIL | FVCL | 備考 |
---|---|---|---|
従来のクラス | 64.194 | 64.262 | CFviEdge2DCorrelation の実行時間です。 右側は、これに対応した FVCL クラスの処理時間です。 |
当クラス(実数版) | 62.685 | 62.592 | CFviEdge2D で相関エッジ法(実数版)を実行した時間です。 右側は、これに対応した FVCL クラスの処理時間です。 |
当クラス(整数版) | 58.359 | 56.010 | CFviEdge2D で相関エッジ法(整数版)を実行した時間です。 右側は、これに対応した FVCL クラスの処理時間です。 |
エッジ検出後、Result からエッジ点群(26,600点)を全て取得する時間を比較した結果です。
従来に比べると、データコピーやインスタンス生成時間が無い為、処理時間が大幅に減っていますが、
ネイティブに比べると処理時間が掛かります。
(.NET 環境からネイティブ環境の関数呼び出しのオーバーヘッドがある為)
ポインタ走査と同様のパフォーマンスを求める場合は、
F_DEDGE_PTR や F_EDGE_PTR を介してください。
安全性を求める場合は、
CFviEdgeResultD64 や CFviEdgeResultI32 の
インデクサを使用してください。
項目 | FVIL | FVCL | 備考 |
---|---|---|---|
従来のクラス | 14.342 | 0.856 | CFviEdgeResult から全データを取得した時間です。 右側は、これに対応した FVCL クラスの処理時間です。 |
当クラス(実数版) | 2.181 | 0.192 | CFviEdgeResultD64 のインデクサを介し、全データを取得した時間です。 右側は、これに対応した FVCL クラスの処理時間です。 |
当クラス(整数版) | 2.264 | 0.205 | CFviEdgeResultI32 のインデクサを介し、全データを取得した時間です。 右側は、これに対応した FVCL クラスの処理時間です。 |
処理対象画像の有効性検査と有効化:
-
入力画像の有効性検査
このクラスの CheckValidity(CFviImage) 関数で入力画像の有効性を検査できます。 この関数はスタティックメンバですので、このクラスのインスタンスを生成せずに直接呼び出す事ができます。 -
入出力画像の整合性検査
このクラスの IsValid()()()() メソッドで入出力画像の整合性を検査できます。 このメソッドが false を返す場合は、前述の処理対象画像の条件を満たしていない為、 実行できない事を意味します。 -
出力画像の有効化
このクラスでは有効化はサポートしていません。
Validate()()()() または Validate(Int32) メソッドを実行した場合は常に例外を発行します。
関連する FIE 関数:
fnFIE_edge_corr
fnFIE_edge_corr_subpix
fnFIE_edge_sobel
fnFIE_edge_sobel_subpix