画像間類似度計算

Namespace: fvalgcli
Assembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)

Syntax

C#
public static int fnFIE_img_calc_similarity(
	FHANDLE himg1,
	FHANDLE himg2,
	FHANDLE hmask,
	int mode,
	ref double value
)
Visual Basic
Public Shared Function fnFIE_img_calc_similarity ( 
	himg1 As FHANDLE,
	himg2 As FHANDLE,
	hmask As FHANDLE,
	mode As Integer,
	ByRef value As Double
) As Integer

Parameters

himg1
Type: fvalgcli..::..FHANDLE
入力画像 ( type: uc8, s16, us16, double )
himg2
Type: fvalgcli..::..FHANDLE
入力画像 ( type: uc8, s16, us16, double )
hmask
Type: fvalgcli..::..FHANDLE
リージョンまたはマスク画像( type: bin, uc8 )
リージョンの場合、リージョンと重なる画素を計算に使用します。
マスク画像の場合、マスク画像がゼロでない画素を計算に使用します。
マスクせず入力画像全体を処理したい場合はNULLを渡します。
mode
Type: System..::..Int32
類似度計算モード (0,1,2)
  • 0: 差分絶対値総和 SAD ( Sum of Abusolute Difference )
  • 1: 差分二乗和 SSD ( Sum of Squared Difference )
  • 2: 正規化相互相関 ZNCC ( Zero-means Normalized Cross Correlation )
value
Type: System..::..Double%
計算結果

Return Value

Type: Int32
以下のエラーコードを返します。

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_IMAGE不正な画像オブジェクトが渡された
F_ERR_INVALID_OBJECTmask にリージョンでも画像でもないオブジェクトが渡された
F_ERR_INVALID_PARAMパラメータ異常
F_ERR_CALC_IMPOSSIBLE計算不能 正規化相互相関において分散が0の画像が入力されたりマスクで計算すべき領域が消えたりしたなど
F_ERR_NO_LICENCEライセンスエラー

Examples

C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        [FvPluginExecute]
        public void fnFIE_img_calc_similarity()
        {
            int status = (int)f_err.F_ERR_NONE;

            FHANDLE hsrc1 = FHANDLE.Zero;    // 入力画像1.
            FHANDLE hsrc2 = FHANDLE.Zero;    // 入力画像2.(比較対象画像)
            FHANDLE hmask = FHANDLE.Zero;    // マスク画像.

            try
            {
                // 画像の読み込み.
                api.fnFIE_load_img_file(TestImageDir + "/testdata/key_UC8_M.png", ref hsrc1, f_color_img_type.F_COLOR_IMG_TYPE_UC8);
                api.fnFIE_load_img_file(TestImageDir + "/testdata/key_BIN_M.png", ref hmask, f_color_img_type.F_COLOR_IMG_TYPE_UC8);

                // 入力画像1 の情報取得.
                var type = api.fnFIE_img_get_type(hsrc1);
                var channels = api.fnFIE_img_get_channels(hsrc1);
                var width = api.fnFIE_img_get_width(hsrc1);
                var height = api.fnFIE_img_get_height(hsrc1);

                // 入力画像2.(比較対象画像)
                {
                    hsrc2 = api.fnFIE_img_root_alloc(type, channels, width, height);
                    Assert.IsTrue(hsrc2 != IntPtr.Zero, "hsrc2 is NULL");
                    api.fnFIE_gaussian_2Dfilter(hsrc1, hsrc2, 1.0, 1, f_border_mode.F_BORDER_CONTINUOUS, 0);
                }

                // 確認.
                Console.WriteLine("fnFIE_img_calc_similarity");
                for (int mode = 0; mode < 3; mode++)
                {
                    Console.WriteLine("mode={0}", mode);

                    double value;

                    // 処理の実行.(同一の画像)
                    value = 0;
                    status = api.fnFIE_img_calc_similarity(hsrc1, hsrc1, IntPtr.Zero, mode, ref value);
                    Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status);
                    Console.WriteLine("1) value={0}", value);

                    // 処理の実行.
                    value = 0;
                    status = api.fnFIE_img_calc_similarity(hsrc1, hsrc2, IntPtr.Zero, mode, ref value);
                    Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status);
                    Console.WriteLine("2) value={0}", value);

                    // 処理の実行.(マスク指定)
                    value = 0;
                    status = api.fnFIE_img_calc_similarity(hsrc1, hsrc2, hmask, mode, ref value);
                    Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status);
                    Console.WriteLine("3) value={0}", value);
                }
            }
            finally
            {
                hsrc1.Dispose();
                hsrc2.Dispose();
                hmask.Dispose();
            }
        }
    }
}


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

Public Partial Class FIE
    <FvPluginExecute> _
    Public Sub fnFIE_img_calc_similarity()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim hsrc1 As FHANDLE = FHANDLE.Zero
        ' 入力画像1.
        Dim hsrc2 As FHANDLE = FHANDLE.Zero
        ' 入力画像2.(比較対象画像)
        Dim hmask As FHANDLE = FHANDLE.Zero
        ' マスク画像.
        Try
            ' 画像の読み込み.
            api.fnFIE_load_img_file(TestImageDir & "/testdata/key_UC8_M.png", hsrc1, f_color_img_type.F_COLOR_IMG_TYPE_UC8)
            api.fnFIE_load_img_file(TestImageDir & "/testdata/key_BIN_M.png", hmask, f_color_img_type.F_COLOR_IMG_TYPE_UC8)

            ' 入力画像1 の情報取得.
            Dim type As Int32 = api.fnFIE_img_get_type(hsrc1)
            Dim channels As Int32 = api.fnFIE_img_get_channels(hsrc1)
            Dim width As Int32 = api.fnFIE_img_get_width(hsrc1)
            Dim height As Int32 = api.fnFIE_img_get_height(hsrc1)

            ' 入力画像2.(比較対象画像)
            If True Then
                hsrc2 = api.fnFIE_img_root_alloc(type, channels, width, height)
                Assert.IsTrue(hsrc2 <> IntPtr.Zero, "hsrc2 is NULL")
                api.fnFIE_gaussian_2Dfilter(hsrc1, hsrc2, 1.0, 1, f_border_mode.F_BORDER_CONTINUOUS, 0)
            End If

            ' 確認.
            Console.WriteLine("fnFIE_img_calc_similarity")
            For mode As Integer = 0 To 2
                Console.WriteLine("mode={0}", mode)

                Dim value As Double

                ' 処理の実行.(同一の画像)
                value = 0
                status = api.fnFIE_img_calc_similarity(hsrc1, hsrc1, IntPtr.Zero, mode, value)
                Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err))
                Console.WriteLine("1) value={0}", value)

                ' 処理の実行.
                value = 0
                status = api.fnFIE_img_calc_similarity(hsrc1, hsrc2, IntPtr.Zero, mode, value)
                Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err))
                Console.WriteLine("2) value={0}", value)

                ' 処理の実行.(マスク指定)
                value = 0
                status = api.fnFIE_img_calc_similarity(hsrc1, hsrc2, hmask, mode, value)
                Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err))
                Console.WriteLine("3) value={0}", value)
            Next
        Finally
            hsrc1.Dispose()
            hsrc2.Dispose()
            hmask.Dispose()
        End Try
    End Sub
End Class

See Also