画像間類似度計算
Namespace: fvalgcliAssembly: 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_OBJECT | mask にリージョンでも画像でもないオブジェクトが渡された |
F_ERR_INVALID_PARAM | パラメータ異常 |
F_ERR_CALC_IMPOSSIBLE | 計算不能 正規化相互相関において分散が0の画像が入力されたりマスクで計算すべき領域が消えたりしたなど |
F_ERR_NO_LICENCE | ライセンスエラー |
Examples
C# | Copy |
---|---|
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 |
---|---|
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 |