ユークリッド変換の変換行列を計算

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

Syntax

C#
public static int fnFIE_geotrans_estimate_euclidean_matrix(
	FMATRIX_PTR trans_mat,
	DPNT_T_PTR pnts_from,
	DPNT_T_PTR pnts_to,
	uint pnts_num
)
Visual Basic
Public Shared Function fnFIE_geotrans_estimate_euclidean_matrix ( 
	trans_mat As FMATRIX_PTR,
	pnts_from As DPNT_T_PTR,
	pnts_to As DPNT_T_PTR,
	pnts_num As UInteger
) As Integer

Parameters

trans_mat
Type: fvalgcli..::..FMATRIX_PTR
求められたユークリッド変換の変換行列 (3x3)
pnts_from
Type: fvalgcli..::..DPNT_T_PTR
ユークリッド変換前の点列の座標
pnts_to
Type: fvalgcli..::..DPNT_T_PTR
ユークリッド変換後の点列の座標
pnts_num
Type: System..::..UInt32
pnts_from/pnts_to の点数

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_NOMEMORYメモリ不足エラー
F_ERR_INVALID_PARAMパラメータ異常
F_ERR_INVALID_OBJECTfpMat が3×3の行列ではない
F_ERR_CALC_IMPOSSIBLE計算不能で異常終了
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_geotrans_estimate_euclidean_matrix()
        {
            int status = (int)f_err.F_ERR_NONE;

            FMATRIX_PTR fpMat = IntPtr.Zero;    // 求められた変換行列.
            DPNT_T_PTR pntspFrom = IntPtr.Zero;    // 変換前の点列の座標.
            DPNT_T_PTR pntspTo = IntPtr.Zero;    // 変換後の点列の座標.
            uint uiNum = 0;                        // pntspFrom/pntspTo の点数.
            const int size = 256;
            const int shift = 32;

            try
            {
                // 変換前後の点の座標列の確保と値の設定.
                uiNum = 2;
                pntspFrom = DPNT_T_PTR.alloc((int)uiNum);
                pntspTo = DPNT_T_PTR.alloc((int)uiNum);

                pntspFrom[0] = DPNT_T.init(0, 0);
                pntspFrom[1] = DPNT_T.init(size, 0);

                pntspTo[0] = DPNT_T.init(shift, shift);
                pntspTo[1] = DPNT_T.init(size + shift, shift);

                // 変換行列の確保.
                fpMat = api.fnFIE_mat_aalloc(3, 3);

                // 処理の実行.
                status = api.fnFIE_geotrans_estimate_euclidean_matrix(fpMat, pntspFrom, pntspTo, uiNum);

                // エラー判定.
                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status);

                // 結果出力.
                ConsoleOut.WriteFMATRIX(fpMat, 3, 3);

                // 得られた変換行列によるアフィン変換の実行と結果画像の保存.
                {
                    FHANDLE src = FHANDLE.Zero;
                    FHANDLE dst = FHANDLE.Zero;

                    try
                    {
                        src = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_UC8, 1, size, size);
                        dst = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_UC8, 1, size, size);

                        api.fnFIE_jaehne_testimg(src);
                        api.fnFIE_geotrans_affine(src, dst, FHANDLE.Zero, fpMat, true, f_sampling_mode.F_SAMPLING_BILINEAR);
                        api.fnFIE_save_png(ResultDir + "/fnFIE_geotrans_estimate_euclidean_matrix.png", dst, -1);
                    }
                    finally
                    {
                        src.Dispose();
                        dst.Dispose();
                    }
                }
            }
            finally
            {
                // オブジェクトの開放.
                fpMat.Dispose();
                pntspFrom.Dispose();
                pntspTo.Dispose();
            }
        }
    }
}


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

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

        Dim fpMat As FMATRIX_PTR = IntPtr.Zero
        ' 求められた変換行列.
        Dim pntspFrom As DPNT_T_PTR = IntPtr.Zero
        ' 変換前の点列の座標.
        Dim pntspTo As DPNT_T_PTR = IntPtr.Zero
        ' 変換後の点列の座標.
        Dim uiNum As UInteger = 0
        ' pntspFrom/pntspTo の点数.
        Const  size As Integer = 256
        Const  shift As Integer = 32

        Try
            ' 変換前後の点の座標列の確保と値の設定.
            uiNum = 2
            pntspFrom = DPNT_T_PTR.alloc(CInt(uiNum))
            pntspTo = DPNT_T_PTR.alloc(CInt(uiNum))

            pntspFrom(0) = DPNT_T.init(0, 0)
            pntspFrom(1) = DPNT_T.init(size, 0)

            pntspTo(0) = DPNT_T.init(shift, shift)
            pntspTo(1) = DPNT_T.init(size + shift, shift)

            ' 変換行列の確保.
            fpMat = api.fnFIE_mat_aalloc(3, 3)

            ' 処理の実行.
            status = api.fnFIE_geotrans_estimate_euclidean_matrix(fpMat, pntspFrom, pntspTo, uiNum)

            ' エラー判定.
            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err))

            ' 結果出力.
            ConsoleOut.WriteFMATRIX(fpMat, 3, 3)

            ' 得られた変換行列によるアフィン変換の実行と結果画像の保存.
            If True Then
                Dim src As FHANDLE = FHANDLE.Zero
                Dim dst As FHANDLE = FHANDLE.Zero

                Try
                    src = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_UC8), 1, size, size)
                    dst = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_UC8), 1, size, size)

                    api.fnFIE_jaehne_testimg(src)
                    api.fnFIE_geotrans_affine(src, dst, FHANDLE.Zero, fpMat, True, f_sampling_mode.F_SAMPLING_BILINEAR)
                    api.fnFIE_save_png(ResultDir & "/fnFIE_geotrans_estimate_euclidean_matrix.png", dst, -1)
                Finally
                    src.Dispose()
                    dst.Dispose()
                End Try
            End If
        Finally
            ' オブジェクトの開放.
            fpMat.Dispose()
            pntspFrom.Dispose()
            pntspTo.Dispose()
        End Try
    End Sub
End Class

See Also