エッジ検出閾値 [初期値:-1、範囲:-1,0~255]

Namespace: FVIL.Edge
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
public virtual int Threshold { get; set; }
Visual Basic
Public Overridable Property Threshold As Integer
	Get
	Set

Return Value

Type: Int32

エッジ検出閾値の取得または設定を行います。

許容値:

意味
-1微分値最大の位置を検出します。
0~255微分値がこの値を初めて超えた所をエッジとして抽出します。

※注) このプロパティは -2~255 の範囲外の場合に例外を発行します。 但し、有効な設定値は上表に示す範囲内です。

設定に失敗した場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。

エラーコード:

ErrorCode メンバ内容
11FVIL.ErrorCode.INVALID_PARAMETER引数に指定された値が不正です。

Remarks

エッジ検出位置を制御する閾値(微分値に対する)を -1 または 0~255 の値で指定します。

-1 を指定した場合は、微分値の最大位置をエッジとします。 0~255 を指定した場合は、最初に濃度の微分値が閾値以上になった所をエッジとして計測します。 尚、0 を指定した場合は、このプロパティではエラーとして判定しませんが、実行時にパラメータエラーになります。


【閾値が 0~255 の場合】

初めて閾値を超えた微分値位置と、その前後2個分の範囲の微分データに対して重み付き平均を求め、それをサブピクセル位置とします。 但し、この範囲が微分値データの範囲を超えてしまった場合はエラーとなります。

位置   0  1  2  3  4  5  6   7
微分値 0 10 10 25 30 20  8 ...

例えば、上記のような微分データで Threshold=20 の場合、 初めて Threshold を超えるのは 3 の位置になります。 サブピクセル値は、3 の位置に前後2個分の範囲を加えた 1~5 の範囲で重み付き平均を求めます。 重み付き平均は、微分値を d、位置を x とすると、(Σd*x)/(Σd)で求められます。 この場合は


【閾値が -1 の場合】

最大微分位置の前後で、(最大微分値*75/100)を超える部分に、 更に前後2個分のデータを加えた範囲における重み付き平均をサブピクセル値として求めます。 但し、この重み付き平均を求める範囲が、微分データの範囲を超えてしまった場合はエラーとなります。

上図の様な微分値の場合を考えると、 (最大の微分値*75/100) = 100*0.75 = 75 がピーク位置の閾値になり、これに該当する部分は -1~+2 の範囲になります。 この範囲にさらに前後2個を加えた部分、つまり -3~+4 の範囲が重み付き平均を求める範囲となります。 重み付き平均は、微分値を d、位置を x とすると、(Σd*x)/(Σd) で計算される値です。 この場合では、 (60*-3 + 70*-2 + 80*-1 + 100*0 + 80*1 + 80*2 + 70*3 + 70*4) / ( 60+70+80+100+80+80+70+70 ) ≒ 0.54 となります。

Exceptions

ExceptionCondition
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also