画像処理の実行 (マスク画像指定)

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

Syntax

C#
public virtual void Execute(
	CFviImage mask
)
Visual Basic
Public Overridable Sub Execute ( 
	mask As CFviImage
)

Parameters

mask
Type: FVIL.Data..::..CFviImage
マスク画像 [BIN,UC8,US16,S16,D64]
※チャネル数は 1 または処理対象画像と一致している必要があります。
※処理ウィンドウのサイズが処理対象画像と一致している必要があります。

Remarks

計測範囲を画素単位で示すマスク画像を用いて処理を実行します。
マスク画像の画素値が 0 の座標は計測対象から除外し、0 以外の座標を計測します。

入力画像が複数チャネルの場合はマスク画像も複数にすることでチャネル毎にマスクを指定できます。
入力画像が RGB24/RGB32 の場合は、マスク画像の 0,1,2 チャネルが R,G,B に対応します。
すべてのチャネルに共通のマスクを使用する場合は、チャネル数 1 のマスク画像を指定してください。


処理効果:

マスク画像を指定して濃度投影すると背景の濃度値の影響を受けずに対象物の濃度プロファイルを取得できます。

下図は、Y 方向の濃度プロファイルをグラフに表したものです。
図中の "pixel" と "density" はグラフの横軸/縦軸との対応を示します。

Direction.Y:
【処理対象】【マスク画像】

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

エラーコード:

ErrorCode メンバ内容
51FVIL.ErrorCode.LICENSE_ERROR ライセンスキーが見つからない為、実行できません。 または、FVIL._SetUp.InitVisionLibrary が実行されていません。
1FVIL.ErrorCode.FAILED_TO_ALLOCATEメモリ確保に失敗しました。
12FVIL.ErrorCode.INVALID_OBJECT指定された画像オブジェクトが無効です。
81FVIL.ErrorCode.HAVE_NOT_IMAGE画像オブジェクトが設定されていません。
18FVIL.ErrorCode.INVALID_CHANNEL処理対象チャネル指標が不正です。
19FVIL.ErrorCode.INVALID_PROCAREA処理ウィンドウのサイズが不正です。
16FVIL.ErrorCode.INVALID_IMAGETYPEマスクの画像種別が不正です。
99FVIL.ErrorCode.NOMATCH_CHANNEL処理対象画像とマスク画像のチャネル数に矛盾があります。
91FVIL.ErrorCode.INVALID_SRC_IMAGETYPE入力画像の画像種別が不正です。
97FVIL.ErrorCode.INVALID_SRC_CHANNEL入力画像のチャネル数が不正です。

Examples


処理時間:
    0.199 msec : FVIL.Measure.CFviProjection.Execute


ソースコード:
C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace User.SampleCode
{
    public partial class Measure
    {
        /// <summary>
        /// 濃度投影
        /// </summary>
        [FvPluginExecute]
        public void Projection3()
        {
            FVIL.Data.CFviImage src = new FVIL.Data.CFviImage(Defs.TestImageDir + "/key_UC8_M.png");
            FVIL.Data.CFviImage bin = new FVIL.Data.CFviImage(Defs.TestImageDir + "/key_BIN_M.png");
            FVIL.CFviTimeCounter watch = new FVIL.CFviTimeCounter();
            double msec = 0;
            Dictionary<string, double> times = new Dictionary<string, double>();

            #region 画像統計量.
            {
                FVIL.Measure.CFviProjectionResult result_x = new FVIL.Measure.CFviProjectionResult();
                FVIL.Measure.CFviProjection parser = new FVIL.Measure.CFviProjection(src, 0, FVIL.Measure.Direction.X, result_x);

                // マスク画像.
                FVIL.Data.CFviImage    mask = bin.ConvertToGray( 0, 8 );

                // 計測.
                watch.Start();
                parser.Execute(mask);
                msec = watch.Stop();
                times["FVIL.Measure.CFviProjection.Execute"] = msec;

                // 出力(X 方向)
                Console.WriteLine(
                    "{0,-5},{1,5},{2,9},{3,9},{4,9},{5,9},{6,9},{7,9}",
                    "No.", "Count", "Sum", "Mean", "Min", "Max", "Sigma", "Var");
                for (int i = 0; i < result_x.Count; i++)
                {
                    FVIL.Statistics stat = result_x[i];
                    Console.WriteLine(
                        "[{0:000}] {1,5:0},{2,9:0},{3,9:0.000},{4,9:0.000},{5,9:0.000},{6,9:0.000},{7,9:0.000}",
                        i, stat.Count, stat.Sum, stat.Mean, stat.Min, stat.Max, stat.Sigma, stat.Variance);
                }
            }
            #endregion

            Console.WriteLine("");
            foreach (KeyValuePair<string, double> item in times)
            {
                Console.WriteLine("{0,9:0.000} msec : {1}", item.Value, item.Key);
            }
        }
    }
}


Visual Basic Copy imageCopy
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Namespace SampleCode
    Partial Public Class Measure
        ''' <summary>
        ''' 濃度投影
        ''' </summary>
        <FvPluginExecute()> _
        Public Sub Projection3()
            Dim src As New FVIL.Data.CFviImage(Defs.TestImageDir + "/key_UC8_M.png")
            Dim bin As New FVIL.Data.CFviImage(Defs.TestImageDir + "/key_BIN_M.png")
            Dim watch As New FVIL.CFviTimeCounter()
            Dim msec As Double = 0
            Dim times As New Dictionary(Of String, Double)()

            '#Region "画像統計量."
            If True Then
                Dim result_x As New FVIL.Measure.CFviProjectionResult()
                Dim parser As New FVIL.Measure.CFviProjection(src, 0, FVIL.Measure.Direction.X, result_x)

                ' マスク画像.
                Dim mask As FVIL.Data.CFviImage = bin.ConvertToGray(0, 8)

                ' 計測.
                watch.Start()
                parser.Execute(mask)
                msec = watch.[Stop]()
                times("FVIL.Measure.CFviProjection.Execute") = msec

                ' 出力(X 方向)
                Console.WriteLine( _
                 "{0,-5},{1,5},{2,9},{3,9},{4,9},{5,9},{6,9},{7,9}", _
                 "No.", "Count", "Sum", "Mean", "Min", "Max", "Sigma", "Var")
                For i As Integer = 0 To result_x.Count - 1
                    Dim stat As FVIL.Statistics = result_x(i)
                    Console.WriteLine( _
                     "[{0:000}] {1,5:0},{2,9:0},{3,9:0.000},{4,9:0.000},{5,9:0.000},{6,9:0.000},{7,9:0.000}", _
                     i, stat.Count, stat.Sum, stat.Mean, stat.Min, stat.Max, stat.Sigma, stat.Variance)
                Next
            End If
            '#End Region

            Console.WriteLine("")
            For Each item As KeyValuePair(Of String, Double) In times
                Console.WriteLine("{0,9:0.000} msec : {1}", item.Value, item.Key)
            Next
        End Sub
    End Class
End Namespace

Exceptions

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

See Also