ブローブの特徴量に基づくソーティング

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

Syntax

C#
public static void GetSortList(
	FHANDLE handle,
	FeatureType key1st,
	SortDirect direct1st,
	FeatureType key2nd,
	SortDirect direct2nd,
	FeatureType key3rd,
	SortDirect direct3rd,
	UINT_ARRAY blob_numbers
)
Visual Basic
Public Shared Sub GetSortList ( 
	handle As FHANDLE,
	key1st As FeatureType,
	direct1st As SortDirect,
	key2nd As FeatureType,
	direct2nd As SortDirect,
	key3rd As FeatureType,
	direct3rd As SortDirect,
	blob_numbers As UINT_ARRAY
)

Parameters

handle
Type: fvalgcli..::..FHANDLE
取得対象の2値ブローブ解析結果ハンドル
key1st
Type: FVIL.Blob..::..FeatureType
特徴量の種別(最優先ソートキー)
direct1st
Type: FVIL.Blob..::..SortDirect
最優先ソートキーのソート順
key2nd
Type: FVIL.Blob..::..FeatureType
特徴量の種別(第2ソートキー)
direct2nd
Type: FVIL.Blob..::..SortDirect
第2ソートキーのソート順
key3rd
Type: FVIL.Blob..::..FeatureType
特徴量の種別(第3ソートキー)
direct3rd
Type: FVIL.Blob..::..SortDirect
第3ソートキーのソート順
blob_numbers
Type: FVIL..::..UINT_ARRAY
ソート対象のブローブ番号配列

Remarks

blob_numbers に渡されたブローブを特徴量に基づいてソートします。
blob_numbers は、 GetList(FHANDLE, IEnumerable<(Of <<'(CFviBlobFilterRange>)>>))GetRefilterList(FHANDLE, IEnumerable<(Of <<'(CFviBlobFilterRange>)>>), UINT_ARRAY) で取得できます。 引数 blob_numbers に無効ブローブが含まれていた場合は例外を発行します。

この関数は CFviBlobResult.GetSortList(FeatureType, SortDirect, FeatureType, SortDirect, FeatureType, SortDirect, IEnumerable<(Of <<'(CFviBlobData>)>>)) の改良版です。 データコピーやインスタンス生成のコストを削減できるため、高速に取得できます。

ソート対象の特徴量は、 key1st,key2nd,key3rd にて3番目まで指定することが出来ます。 キーに指定可能な値については FeatureType をご参照ください。
まず key1st でソートし、 key1st で同じ値だった物は key2nd でソートされ、 更に key2nd でも同じだった物は key3rd でソートされます。

引数 direc1st,direc2nd,direc3rd は、各キーでのソート順(昇順/降順)を決めるパラメータです。 昇順にソートする場合は Ascending を、 降順にソートする場合は Descending を指定してください。

ソートキーを省略する場合は、NONE を指定してください。 その際、ソート方向は無視されます。

処理に失敗した場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。


エラーコード:
ErrorCode メンバ内容
51FVIL.ErrorCode.LICENSE_ERROR ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。
12FVIL.ErrorCode.INVALID_OBJECTブローブ解析結果ハンドルが無効です。
11FVIL.ErrorCode.INVALID_PARAMETERブローブ番号が無効です。
1FVIL.ErrorCode.FAILED_TO_ALLOCATEメモリ確保に失敗しました。

関連する FIE 関数:

fnFIE_measure_sort_list

Examples

ソースコード:
C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Reflection;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode
{
    public partial class Blob
    {

        // ============================================================
        /// <summary>
        /// FVIL.Blob.Function クラス.
        /// </summary>
        /// <remarks>
        /// public static void GetSortList(
        ///        fvalgcli.FHANDLE handle, 
        ///        FVIL.Blob.FeatureType key1st, FVIL.Blob.SortDirect direct1st, 
        ///        FVIL.Blob.FeatureType key2nd, FVIL.Blob.SortDirect direct2nd, 
        ///        FVIL.Blob.FeatureType key3rd, FVIL.Blob.SortDirect direct3rd, 
        ///        FVIL.UINT_ARRAY blob_numbers)
        /// </remarks>
        [FvPluginExecute]
        public void GetSortList3()
        {
            // 1) インスタンスの準備.
            FVIL.Blob.CFviBlob parser;
            FVIL.Blob.CFviBlobResult result = new FVIL.Blob.CFviBlobResult();
            FVIL.Data.CFviImage src = new FVIL.Data.CFviImage();

            // 2) 処理対象画像の取り込み.
            FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/blob_BIN.png", src, FVIL.PixelMode.Unpacking);

            // 3) 処理対象画像の有効性検査.
            int valid = FVIL.Blob.CFviBlob.CheckValidity(src);
            if (valid != FVIL.ErrorCode._SUCCESS)
                throw new FVIL.CFviException(valid, "FVIL.Blob.CFviBlobFunction.CheckValidity");

            // 4) 画像処理実行.
            parser = new FVIL.Blob.CFviBlob(src, result);
            parser.Execute();

            // E) 処理結果の取得.
            {
                FVIL.UINT_ARRAY blobs = FVIL.Blob.Function.GetList(result.Handle);

                FVIL.Blob.Function.GetSortList(result.Handle,
                    FVIL.Blob.FeatureType.AREA, FVIL.Blob.SortDirect.Descending,
                    FVIL.Blob.FeatureType.HOLES, FVIL.Blob.SortDirect.Ascending,
                    FVIL.Blob.FeatureType.RECT2LRATIO, FVIL.Blob.SortDirect.Ascending,
                    blobs);

                Console.Out.WriteLine(" --- FVIL.Blob.Function.GetSortList3()");
                Console.Out.WriteLine("     Count = {0}", blobs.Count);

            }
        }


    }
}


Visual Basic Copy imageCopy
Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports System.Reflection
Imports fvalgcli
' FvPluginXXXX attribute requires fvalgcli
Namespace SampleCode
    Public Partial Class Blob

        ' ============================================================
        ''' <summary>
        ''' FVIL.Blob.Function クラス.
        ''' </summary>
        ''' <remarks>
        ''' public static void GetSortList(
        '''        fvalgcli.FHANDLE handle, 
        '''        FVIL.Blob.FeatureType key1st, FVIL.Blob.SortDirect direct1st, 
        '''        FVIL.Blob.FeatureType key2nd, FVIL.Blob.SortDirect direct2nd, 
        '''        FVIL.Blob.FeatureType key3rd, FVIL.Blob.SortDirect direct3rd, 
        '''        FVIL.UINT_ARRAY blob_numbers)
        ''' </remarks>
        <FvPluginExecute> _
        Public Sub GetSortList3()
            ' 1) インスタンスの準備.
            Dim parser As FVIL.Blob.CFviBlob
            Dim result As New FVIL.Blob.CFviBlobResult()
            Dim src As New FVIL.Data.CFviImage()

            ' 2) 処理対象画像の取り込み.
            FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/blob_BIN.png", src, FVIL.PixelMode.Unpacking)

            ' 3) 処理対象画像の有効性検査.
            Dim valid As Integer = FVIL.Blob.CFviBlob.CheckValidity(src)
            If valid <> FVIL.ErrorCode._SUCCESS Then
                Throw New FVIL.CFviException(valid, "FVIL.Blob.CFviBlobFunction.CheckValidity")
            End If

            ' 4) 画像処理実行.
            parser = New FVIL.Blob.CFviBlob(src, result)
            parser.Execute()

            ' E) 処理結果の取得.
            If True Then
                Dim blobs As FVIL.UINT_ARRAY = FVIL.Blob.[Function].GetList(result.Handle)

                FVIL.Blob.[Function].GetSortList(result.Handle, FVIL.Blob.FeatureType.AREA, FVIL.Blob.SortDirect.Descending, FVIL.Blob.FeatureType.HOLES, FVIL.Blob.SortDirect.Ascending, FVIL.Blob.FeatureType.RECT2LRATIO, _
                    FVIL.Blob.SortDirect.Ascending, blobs)

                Console.Out.WriteLine(" --- FVIL.Blob.Function.GetSortList3()")
                Console.Out.WriteLine("     Count = {0}", blobs.Count)

            End If
        End Sub


    End Class
End Namespace

Exceptions

ExceptionCondition
System..::..NullReferenceException引数に null が指定されました。
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also