指定された画像領域から縦・横線を検出し交点を抽出します。

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

Syntax

C#
public static int fnFIE_aligned_corner_extraction(
	FHANDLE fim,
	BOX_T roi_horz,
	BOX_T roi_vert,
	double delta_angle,
	int filter_size,
	ref DLINE_T line_horz_out,
	ref DLINE_T line_vert_out,
	ref DPNT_T pnt_out
)
Visual Basic
Public Shared Function fnFIE_aligned_corner_extraction ( 
	fim As FHANDLE,
	roi_horz As BOX_T,
	roi_vert As BOX_T,
	delta_angle As Double,
	filter_size As Integer,
	ByRef line_horz_out As DLINE_T,
	ByRef line_vert_out As DLINE_T,
	ByRef pnt_out As DPNT_T
) As Integer

Parameters

fim
Type: fvalgcli..::..FHANDLE
入力画像 [UC8 x1ch]
roi_horz
Type: fvalgcli..::..BOX_T
横線を検出する画像領域。
roi_vert
Type: fvalgcli..::..BOX_T
縦線を検出する画像領域。
delta_angle
Type: System..::..Double
横線と縦線の間の角度(radian)。縦線の角度=横線の角度+delta_angle
filter_size
Type: System..::..Int32
エッジ抽出フィルタのサイズ。[範囲:3以上の奇数、推奨値:11以上]
line_horz_out
Type: fvalgcli..::..DLINE_T%
抽出された横線。
line_vert_out
Type: fvalgcli..::..DLINE_T%
抽出された縦線。
pnt_out
Type: fvalgcli..::..DPNT_T%
抽出された交点。

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_NOMEMORYメモリ不足エラー
F_ERR_INVALID_PARAMパラメータ不正
F_ERR_INVALID_IMAGE不正な画像が渡された
F_ERR_CALC_IMPOSSIBLE計算不能エラー
F_ERR_NO_LICENCEライセンスエラー、または未初期化エラー

Examples

C# Copy imageCopy
//    $Revision: 1.1 $

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using fvalgcli;

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

            FHANDLE hImage = IntPtr.Zero;

            try
            {
                string filepath = TestImageDir + "/testdata/aligned_corner_extraction.png";

                status = api.fnFIE_load_img_file(filepath, ref hImage, f_color_img_type.F_COLOR_IMG_TYPE_UC8);
                if (status != (int)f_err.F_ERR_NONE)
                    throw new FvException(status, string.Format("fnFIE_load_img_file = {0}", (f_err)status));

                BOX_T roi_horz = BOX_T.init(222, 140, 619, 190);
                BOX_T roi_vert = BOX_T.init(182, 169, 238, 461);
                double delta_angle = 90 * System.Math.PI / 180;
                int filter_size = 11;
                DLINE_T line_horz_out = new DLINE_T();
                DLINE_T line_vert_out = new DLINE_T();
                DPNT_T pnt_out = new DPNT_T();


                status = api.fnFIE_aligned_corner_extraction(hImage, roi_horz, roi_vert, delta_angle, filter_size, ref line_horz_out, ref line_vert_out, ref pnt_out);
                if (status != (int)f_err.F_ERR_NONE)
                    throw new FvException(status, string.Format("fnFIE_aligned_corner_extraction = {0}", (f_err)status));

                // 結果を出力する.
                Console.WriteLine(MethodBase.GetCurrentMethod().Name);
                Console.WriteLine("line_horz_out={0},{1},{2}", line_horz_out.a, line_horz_out.b, line_horz_out.c);
                Console.WriteLine("line_vert_out={0},{1},{2}", line_vert_out.a, line_vert_out.b, line_vert_out.c);
                Console.WriteLine("pnt_out={0},{1}", pnt_out.x, pnt_out.y);
            }
            finally
            {
                hImage.Dispose();
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports System.Reflection
Imports fvalgcli

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

        Dim hImage As FHANDLE = IntPtr.Zero

        Try
            Dim filepath As String = TestImageDir & "/testdata/aligned_corner_extraction.png"

            status = api.fnFIE_load_img_file(filepath, hImage, f_color_img_type.F_COLOR_IMG_TYPE_UC8)
            If status <> CInt(f_err.F_ERR_NONE) Then
                Throw New FvException(status, String.Format("fnFIE_load_img_file = {0}", CType(status, f_err)))
            End If

            Dim roi_horz As BOX_T = BOX_T.init(222, 140, 619, 190)
            Dim roi_vert As BOX_T = BOX_T.init(182, 169, 238, 461)
            Dim delta_angle As Double = 90 * System.Math.PI / 180
            Dim filter_size As Integer = 11
            Dim line_horz_out As New DLINE_T()
            Dim line_vert_out As New DLINE_T()
            Dim pnt_out As New DPNT_T()


            status = api.fnFIE_aligned_corner_extraction(hImage, roi_horz, roi_vert, delta_angle, filter_size, line_horz_out, _
                line_vert_out, pnt_out)
            If status <> CInt(f_err.F_ERR_NONE) Then
                Throw New FvException(status, String.Format("fnFIE_aligned_corner_extraction = {0}", CType(status, f_err)))
            End If

            ' 結果を出力する.
            Console.WriteLine(MethodBase.GetCurrentMethod().Name)
            Console.WriteLine("line_horz_out={0},{1},{2}", line_horz_out.a, line_horz_out.b, line_horz_out.c)
            Console.WriteLine("line_vert_out={0},{1},{2}", line_vert_out.a, line_vert_out.b, line_vert_out.c)
            Console.WriteLine("pnt_out={0},{1}", pnt_out.x, pnt_out.y)
        Finally
            hImage.Dispose()
        End Try
    End Sub
End Class

出力結果:
fnFIE_aligned_corner_extraction
line_horz_out=-0.0553293779731365,0.998468156694597,-144.702044306811
line_vert_out=-0.998468156694597,-0.0553293779731364,221.802553043967
pnt_out=213.456512185028,156.752580741738

See Also