Canny 法によるエッジ検出

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

Syntax

C#
public static int fnFIE_edge_canny(
	FHANDLE hImgSrc,
	FHANDLE hImgOut,
	int iTSwitch,
	double dTHigh,
	double dTLow,
	double dSigma,
	uint uiMinLen
)
Visual Basic
Public Shared Function fnFIE_edge_canny ( 
	hImgSrc As FHANDLE,
	hImgOut As FHANDLE,
	iTSwitch As Integer,
	dTHigh As Double,
	dTLow As Double,
	dSigma As Double,
	uiMinLen As UInteger
) As Integer

Parameters

hImgSrc
Type: fvalgcli..::..FHANDLE
入力画像 ( type: uc8 )
hImgOut
Type: fvalgcli..::..FHANDLE
出力画像 ( type: uc8 )
iTSwitch
Type: System..::..Int32
閾値のタイプ指定
  • iTSwitch = 0 :2つの閾値である割合が 0 < threshold < 1
  • iTSwitch = 1 :2つの閾値が任意の値
dTHigh
Type: System..::..Double
閾値の上限
  • ( iTSwitch == 0 && 0 < dTLow < 1 && 0 < dTHigh < 1 ) の場合 
    指定する閾値は割合です
  • ( iTSwitch == 1 && dTLow ≧ 0 && dTHigh > 0 ) の場合
    指定する閾値は任意の値です
    2つの閾値ともに 2^16 より小さい値を指定してください
  • ( iTSwitch == 0 && dTLow == 0 && dTHigh == 0 ) の場合 
    dTHigh(0.7) 、 dTLow(0.28)のデフォルト値が指定されます
dTLow
Type: System..::..Double
閾値の下限
dSigma
Type: System..::..Double
ガウシアンマスクのσ
uiMinLen
Type: System..::..UInt32
エッジの最小の長さ
この値より小さい孤立したエッジはノイズと判定して削除されます

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_PARAM不正なパラメータが渡された
  • 不正な値の閾値
  • dSigma < 0.6
  • 画像の幅、または高さが (INT)(6 * dSigma + 2) より小さい
F_ERR_INVALID_IMAGE不正な画像が渡された
  • 入力画像と出力画像のサイズが異なる
  • 画像の幅、または高さが3より小さい
  • 画像オブジェクトではないハンドルが渡された
  • 画像のチャンネルが1ではない
  • 画像サイズが ( 3 * dSigma + 1 ) * 2 より小さい
F_ERR_NOMEMORYメモリ不足エラー
F_ERR_NO_LICENCEライセンスエラー、または未初期化エラー

Examples

C# Copy imageCopy
//    $Revision: 1.1 $

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        [FvPluginExecute]
        public void fnFIE_edge_canny()
        {
            string filepath = TestImageDir + "/testdata/image_file_8bpp.bmp";

            int status = (int)f_err.F_ERR_NONE;
            FHANDLE hImageSrc = FHANDLE.Zero;
            FHANDLE hImageDst = FHANDLE.Zero;

            try
            {
                int iTSwitch = 0;
                double dTLow = 0.2;
                double dTHigh = 0.7;
                double dSigma = 0.6;
                uint uiMinLen = 0;

                api.fnFIE_load_bmp(filepath, ref hImageSrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8);
                hImageDst = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_UC8, api.fnFIE_img_get_channels(hImageSrc), api.fnFIE_img_get_width(hImageSrc), api.fnFIE_img_get_height(hImageSrc));

                // エッジ検出実行.
                status = api.fnFIE_edge_canny(hImageSrc, hImageDst, iTSwitch, dTHigh, dTLow, dSigma, uiMinLen);
                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_edge_canny: エラーが発生しました。({0}n vvv )", (f_err)status);
                Console.WriteLine("fnFIE_edge_canny");
            }
            finally
            {
                hImageSrc.Dispose();
                hImageDst.Dispose();
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports System.Runtime.InteropServices
Imports fvalgcli

Public Partial Class FIE
    <FvPluginExecute> _
    Public Sub fnFIE_edge_canny()
        Dim filepath As String = TestImageDir & "/testdata/image_file_8bpp.bmp"

        Dim status As Integer = CInt(f_err.F_ERR_NONE)
        Dim hImageSrc As FHANDLE = FHANDLE.Zero
        Dim hImageDst As FHANDLE = FHANDLE.Zero

        Try
            Dim iTSwitch As Integer = 0
            Dim dTLow As Double = 0.2
            Dim dTHigh As Double = 0.7
            Dim dSigma As Double = 0.6
            Dim uiMinLen As UInteger = 0

            api.fnFIE_load_bmp(filepath, hImageSrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8)
            hImageDst = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_UC8), api.fnFIE_img_get_channels(hImageSrc), api.fnFIE_img_get_width(hImageSrc), api.fnFIE_img_get_height(hImageSrc))

            ' エッジ検出実行.
            status = api.fnFIE_edge_canny(hImageSrc, hImageDst, iTSwitch, dTHigh, dTLow, dSigma, _
                uiMinLen)
            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_edge_canny: エラーが発生しました。({0}n vvv )", CType(status, f_err))
            Console.WriteLine("fnFIE_edge_canny")
        Finally
            hImageSrc.Dispose()
            hImageDst.Dispose()
        End Try
    End Sub
End Class

See Also