エッジ検出閾値 [初期値:-1、範囲:-1,1~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微分値最大の位置を検出します。
1~255微分値がこの値を初めて超えた所をエッジとして抽出します。

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

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

エラーコード:

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

Remarks

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

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


【閾値が 1~255 の場合】

初めて閾値を超えた微分値位置と、その前後(Around 個)の範囲の微分データに対して、 2次曲線近似を行います。 この近似2次曲線が Threshold に指定された値となる位置 (y=Threshold との交点)をサブピクセル位置とします。 交点が2つになる場合は、「初めて閾値を超えた微分値位置」に より近い方を採用します。 但し、以下の場合はエラーとなります。

  • 2次曲線近似が出来なかった場合 -
  • Around 個分を足した範囲が微分データの範囲を超えてしまった場合 -
  • 近似2次曲線が y=Threshold と交わらなかった場合 -
位置   0  1  2  3  4  5  6   7
微分値 0 10 10 25 30 20  8 ...

例えば、上記のような微分データで Threshold=20, Around=2 の場合、 初めて Threshold を超えるのは 3 の位置になります。 そこで、3の位置に、前後(Around 個)の範囲を加えた、 1~5 の範囲のデータにて2次曲線近似を行います。 そして、この近似2次曲線と y=Threshold (y=20) との交点を求め、 3の位置に より近い方の交点をサブピクセル位置として返します。


【閾値が -1 の場合】

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

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

Exceptions

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

See Also