ブローブの特徴量に基づくフィルタリング (非推奨)

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

Syntax

C#
public virtual List<CFviBlobData> GetList(
	IEnumerable<CFviBlobFilterRange> filters,
	IEnumerable<CFviBlobData> datas
)
Visual Basic
Public Overridable Function GetList ( 
	filters As IEnumerable(Of CFviBlobFilterRange),
	datas As IEnumerable(Of CFviBlobData)
) As List(Of CFviBlobData)

Parameters

filters
Type: System.Collections.Generic..::..IEnumerable<(Of <(<'CFviBlobFilterRange>)>)>
取得条件フィルタ配列 (1≦要素数)
datas
Type: System.Collections.Generic..::..IEnumerable<(Of <(<'CFviBlobData>)>)>
ブローブデータ配列 (1≦要素数)

Return Value

Type: List<(Of <(<'CFviBlobData>)>)>

引数 datas に指定されたブローブデータの内、指定の特徴量範囲に該当するブローブデータを System.Collections.Generic.List に格納して返します。 ブローブデータ配列は、このオブジェクトから取得したものを使用してください。 各ブローブデータとこのオブジェクトが持つハンドルが一致する必要があります。

filters に2種類以上のフィルタが指定されている時は、全ての条件の AND での評価となります。

Remarks

新しい開発では、データコピーのコストを削減した GetBlobList(IEnumerable<(Of <<'(CFviBlobFilterRange>)>>))RefilterList(IEnumerable<(Of <<'(CFviBlobFilterRange>)>>)) を使用してください。


内部では、下記の手順でフィルタリング処理が行われます。

  1. datas の複製を作成します。 -
  2. datas の複製の内、特徴量範囲に該当しないブローブデータの番号を 0 にします。 -
  3. ブローブ番号が 0 のブローブデータを除去します。 -
  4. 残ったブローブデータを System.Collections.Generic.List に格納して返します。 -

背景ブローブ及び無効ブローブは、ブローブ配列には含まれません。 また、 datas に格納されたブローブデータのハンドルが、 このオブジェクトが持つハンドルと異なる場合も除去されます。

このオブジェクトが保有するハンドルが無効な場合は例外を発行します。 また、 datas に格納されたブローブデータのハンドルが、このオブジェクトが持つハンドルと異なる場合もパラメータエラーとなります。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。

エラーコード:

ErrorCode メンバ内容
51FVIL.ErrorCode.LICENSE_ERROR ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。
12FVIL.ErrorCode.INVALID_OBJECTブローブ解析結果ハンドルが無効です。
11FVIL.ErrorCode.INVALID_PARAMETER 引数が異常です。配列の要素数は1つ以上必要です。 または、引数 datas が持つハンドルとこのインスタンスが持つハンドルが一致しません。
1FVIL.ErrorCode.FAILED_TO_ALLOCATE メモリが不足しています。

Examples

計測結果から、下記の条件に該当するブローブデータを取得します。

  1. 面積が 500~1000 -
  2. 重心(x) が 900~1300 -
C# Copy imageCopy
FVIL.Blob.CFviBlob       blob = new FVIL.Blob.CFviBlob();
FVIL.Data.CFviImage      image = new FVIL.Data.CFviImage();

:
: (画像の取り込み等)
:

blob.SrcImages[0] = image;
blob.Execute();

// (1)
FVIL.Blob.CFviBlobFilterRange   filter1 = new FVIL.Blob.CFviBlobFilterRange();
filter1.Type = FVIL.Blob.FeatureType.AREA;
filter1.Min = 500;
filter1.Max = 1000;

System.Collections.Generic.List<FVIL.Blob.CFviBlobFilterRange>    filters1 = 
       new System.Collections.Generic.List<FVIL.Blob.CFviBlobFilterRange>();
filters1.Add( filter1 );

// ブローブデータ配列の取得
System.Collections.Generic.List<FVIL.Blob.CFviBlobData>  datas1 = 
       blob.Result.GetList( filters1 );

// (2)
FVIL.Blob.CFviBlobFilterRange   filter2 = new FVIL.Blob.CFviBlobFilterRange();
filter2.Type = FVIL.Blob.FeatureType.CENTERX;
filter2.Min = 900;
filter2.Max = 1300;

System.Collections.Generic.List<FVIL.Blob.CFviBlobFilterRange>    filters2 = 
       new System.Collections.Generic.List<FVIL.Blob.CFviBlobFilterRange>();
filters2.Add( filter2 );

// ブローブデータ配列のフィルタリング
System.Collections.Generic.List<FVIL.Blob.CFviBlobData>  datas2 =
       blob.Result.GetList( filters2, datas1 );

Exceptions

ExceptionCondition
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also