1次濃淡モーメント (X方向)

Overload List

NameDescription
Public methodStatic memberPixelMoment1SumX(CFviImage, CFviRegion)
1次濃淡モーメント (X方向)
Public methodStatic memberPixelMoment1SumX(CFviImage, CFviRegion, OriginMode)
1次濃淡モーメント (X方向)

Remarks

画像と領域の共通部分で、1次濃淡モーメントを求めます。

処理可能な画像オブジェクトの条件は以下の通りです。

  • 処理対象画像のチャンネル数が 1 である事
  • 画像種別が以下の何れかである事
※ 領域がない場合や、画像と領域の共通部分がない場合はエラー終了となります。
※ 領域の xdiff, ydiff が 65535 以下かつ -65534≦(x,y)≦65534 の条件で使用することを想定した計算アルゴリズムとなっています。それ以外の場合はオーバーフローの可能性があります。

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

エラーコード:

ErrorCode メンバ内容
51FVIL.ErrorCode.LICENSE_ERROR ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。
1FVIL.ErrorCode.FAILED_TO_ALLOCATEメモリ不足の為、処理に失敗しました。
11FVIL.ErrorCode.INVALID_PARAMETERリージョンが無効です。
12FVIL.ErrorCode.INVALID_OBJECTリージョンオブジェクトハンドルまたは画像オブジェクトが無効です。
29FVIL.ErrorCode.NOT_CALCULABLE計算不可能です。

Examples

ソースコード:
C# Copy imageCopy
//    $Revision: 1.3 $

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode.Region
{
    public partial class Measure
    {
        /// <summary>
        /// [リージョンオブジェクトを使用した特徴量抽出処理]
        /// 1次濃淡モーメント (X方向)
        /// </summary>
        /// <param name="caseindex">テストケース番号</param>
        public void PixelMoment1SumX(int caseindex)
        {
            try
            {
                // 1) インスタンスの準備.
                FVIL.Data.CFviImage image = new FVIL.Data.CFviImage();
                FVIL.Data.CFviRegion region = new FVIL.Data.CFviRegion();

                // 2) 処理対象画像の準備
                {
                    // 2-1) 処理対象画像の取り込み.
                    FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/palette_UC8.png", image, FVIL.PixelMode.Unpacking);

                    // 2-2) 処理対象画像の処理範囲設定.
                    switch (caseindex)
                    {
                        case 0:    // Case0. 処理範囲の指定がない場合
                            break;

                        case 1:    // Case1. 処理範囲の指定がある場合(※ 処理範囲にリージョン全体が含まれている)
                            image.Window = new System.Drawing.Rectangle(20, 5, image.HorzSize - 50, image.VertSize - 20);    // pallet_UC8_region_G.raw使用の場合
                            break;

                        case 2:    // Case2. 処理範囲の指定がある場合(※ 処理範囲にリージョンの一部のみ含まれている)
                            image.Window = new System.Drawing.Rectangle(60, 5, 70, 100);    // pallet_UC8_region_G.raw使用の場合
                            break;

                        default:
                            break;
                    }
                }

                // 3) 処理対象リージョンの準備.
                {
                    // 3-1) 処理対象リージョンの取り込み.
                    region.Load(Defs.TestImageDir + "/palette_UC8_region_G.raw");

                    // 3-2) リージョンの位置の調整.
                    // 元のリージョンが(0,0)を基準にしているものとする。
                    FVIL.Data.CFviPoint initPos = region.Position;
                    region.Position = new FVIL.Data.CFviPoint(initPos.X - image.Window.Location.X, initPos.Y - image.Window.Location.Y);
                }

                // 4) 画像処理実行.
                double result = FVIL.Region.Measure.PixelMoment1SumX(image, region);

                // E) 算出結果の表示
                Console.WriteLine(" FVIL.Region.Measure.PixelMoment1SumX (Case" + caseindex.ToString() + ") : {0:f} ", result);
            }
            catch (FVIL.CFviException ex)
            {
                Console.WriteLine(ex.Function + " : ErrorCode = " + ex.ErrorCode);
            }
        }

        /// <summary>
        /// [リージョンオブジェクトを使用した特徴量抽出処理]
        /// 1次濃淡モーメント (X方向)
        /// Case0. 処理範囲の指定がない場合
        /// </summary>
        [FvPluginExecute]
        public void PixelMoment1SumX_Case0()
        {
            PixelMoment1SumX(0);
        }

        /// <summary>
        /// [リージョンオブジェクトを使用した特徴量抽出処理]
        /// 1次濃淡モーメント (X方向)
        /// Case1. 処理範囲の指定がある場合(※ 処理範囲にリージョン全体が含まれている)
        /// </summary>
        [FvPluginExecute]
        public void PixelMoment1SumX_Case1()
        {
            PixelMoment1SumX(1);
        }

        /// <summary>
        /// [リージョンオブジェクトを使用した特徴量抽出処理]
        /// 1次濃淡モーメント (X方向)
        /// Case2. 処理範囲の指定がある場合(※ 処理範囲にリージョンの一部のみ含まれている)
        /// </summary>
        [FvPluginExecute]
        public void PixelMoment1SumX_Case2()
        {
            PixelMoment1SumX(2);
        }


    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
' FvPluginXXXX attribute requires fvalgcli
Namespace SampleCode.Region
    Public Partial Class Measure
        ''' <summary>
        ''' [リージョンオブジェクトを使用した特徴量抽出処理]
        ''' 1次濃淡モーメント (X方向)
        ''' </summary>
        ''' <param name="caseindex">テストケース番号</param>
        Public Sub PixelMoment1SumX(caseindex As Integer)
            Try
                ' 1) インスタンスの準備.
                Dim image As New FVIL.Data.CFviImage()
                Dim region As New FVIL.Data.CFviRegion()

                ' 2) 処理対象画像の準備
                If True Then
                    ' 2-1) 処理対象画像の取り込み.
                    FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/palette_UC8.png", image, FVIL.PixelMode.Unpacking)

                    ' 2-2) 処理対象画像の処理範囲設定.
                    Select Case caseindex
                        Case 0
                            ' Case0. 処理範囲の指定がない場合
                            Exit Select

                        Case 1
                            ' Case1. 処理範囲の指定がある場合(※ 処理範囲にリージョン全体が含まれている)
                            image.Window = New System.Drawing.Rectangle(20, 5, image.HorzSize - 50, image.VertSize - 20)
                            ' pallet_UC8_region_G.raw使用の場合
                            Exit Select

                        Case 2
                            ' Case2. 処理範囲の指定がある場合(※ 処理範囲にリージョンの一部のみ含まれている)
                            image.Window = New System.Drawing.Rectangle(60, 5, 70, 100)
                            ' pallet_UC8_region_G.raw使用の場合
                            Exit Select
                        Case Else

                            Exit Select
                    End Select
                End If

                ' 3) 処理対象リージョンの準備.
                If True Then
                    ' 3-1) 処理対象リージョンの取り込み.
                    region.Load(Defs.TestImageDir & "/palette_UC8_region_G.raw")

                    ' 3-2) リージョンの位置の調整.
                    ' 元のリージョンが(0,0)を基準にしているものとする。
                    Dim initPos As FVIL.Data.CFviPoint = region.Position
                    region.Position = New FVIL.Data.CFviPoint(initPos.X - image.Window.Location.X, initPos.Y - image.Window.Location.Y)
                End If

                ' 4) 画像処理実行.
                Dim result As Double = FVIL.Region.Measure.PixelMoment1SumX(image, region)

                ' E) 算出結果の表示
                Console.WriteLine(" FVIL.Region.Measure.PixelMoment1SumX (Case" & caseindex.ToString() & ") : {0:f} ", result)
            Catch ex As FVIL.CFviException
                Console.WriteLine(ex.[Function] & " : ErrorCode = " & ex.ErrorCode)
            End Try
        End Sub

        ''' <summary>
        ''' [リージョンオブジェクトを使用した特徴量抽出処理]
        ''' 1次濃淡モーメント (X方向)
        ''' Case0. 処理範囲の指定がない場合
        ''' </summary>
        <FvPluginExecute> _
        Public Sub PixelMoment1SumX_Case0()
            PixelMoment1SumX(0)
        End Sub

        ''' <summary>
        ''' [リージョンオブジェクトを使用した特徴量抽出処理]
        ''' 1次濃淡モーメント (X方向)
        ''' Case1. 処理範囲の指定がある場合(※ 処理範囲にリージョン全体が含まれている)
        ''' </summary>
        <FvPluginExecute> _
        Public Sub PixelMoment1SumX_Case1()
            PixelMoment1SumX(1)
        End Sub

        ''' <summary>
        ''' [リージョンオブジェクトを使用した特徴量抽出処理]
        ''' 1次濃淡モーメント (X方向)
        ''' Case2. 処理範囲の指定がある場合(※ 処理範囲にリージョンの一部のみ含まれている)
        ''' </summary>
        <FvPluginExecute> _
        Public Sub PixelMoment1SumX_Case2()
            PixelMoment1SumX(2)
        End Sub


    End Class
End Namespace
【関数の出力】

・上記コード内の関数 void PixelMoment1SumX_Case0() を実行した場合 FVIL.Region.Measure.PixelMoment1SumX (Case0) : 30892392.00

・上記コード内の関数 void PixelMoment1SumX_Case1() を実行した場合 FVIL.Region.Measure.PixelMoment1SumX (Case1) : 22877672.00

・上記コード内の関数 void PixelMoment1SumX_Case2() を実行した場合 FVIL.Region.Measure.PixelMoment1SumX (Case2) : 7269504.00

Exceptions

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

See Also