WIL説明書(C++)  3.1.0
全メンバ一覧 | 公開型 | 公開メンバ関数 | 静的公開メンバ関数 | 限定公開変数類
FVCL::Edge::CFvRadialEdge クラス

1次元エッジ検出クラス(放射線方向) [詳解]

詳解

1次元エッジ検出クラス(放射線方向)

namespace FVCL::Edge

指定した円の中心放射上にエッジ検出するクラスです。

palcalip2_radial_edge.png
必要条件:
ヘッダー: FVCLbasic.h
要求する入出力:
項目 定数
入力画像 1 SrcImageCount
出力画像 0 DstImageCount
処理対象画像の条件:
処理対象の画像は下記の条件を満たしている必要が有ります。
解説:
指定した円の中心放射上にエッジを検出します。
放射状にエッジ計測する方向は、検出ラインの本数によって決定します。 計測開始方向は常に画面右方向(0 度の位置)になり、 一周2π(360度)を m_Number で 設定された個数で割った角度の方向にエッジ検出線を設定します。
【サブピクセル値計算】
このクラスでのサブピクセル値計算は、閾値の設定により変化します。
詳しくは、 SetThreshold をご参照ください。
  • 閾値が 0~255 の場合
    初めて閾値を超えた微分値位置と、その前後2個分の範囲の微分データに対して重み付き平均を求め、 それをサブピクセル位置とします。 但し、この範囲が微分値データの範囲を超えてしまった場合はエラーとなります。
  • 閾値が -1 の場合
    最大微分位置の前後で、(最大微分値*75/100)を超える部分に、 更に前後2個分のデータを加えた範囲における重み付き平均をサブピクセル値として求めます。 但し、この重み付き平均を求める範囲が、微分データの範囲を超えてしまった場合はエラーとなります。

計測位置の設定:

計測位置が画像領域を超える場合はパラメータエラーとなります。
但し、画像の右端にパディングがある場合は、 画像の水平サイズを僅かに超えてもパラメータエラーとならない場合があります。 その場合は、画像右端とパディングの境界部分を誤検出する可能性があります。
計測データ:
計測データは SetResult で設定された エッジ検出結果格納用オブジェクト (CFvEdgeResult) に格納されます。 検出結果から 単一の計測データ (CFvEdgeData) を取得するには、 CFvEdgeResult::GetData を使用してください。 エッジを1つも検出できなかった場合は、 FVCL_ErrorCode::NOT_FOUND を通知します。
検出 内容 範囲 メンバ変数 メソッド
エッジ位置座標 画像座標 m_Position GetPosition
SetPosition
× エッジ強度 - m_Value GetValue
SetValue
× エッジ極性方向 - m_Direction GetDirection
SetDirection
× エッジの勾配 - m_Angle GetAngle
SetAngle
× 特徴量 - m_Feature GetFeature
SetFeature
処理対象画像の有効性検査:
  • 入力画像の有効性検査
    このクラスの CheckValidity 関数で入力画像の有効性を検査できます。 この関数はスタティックメンバですので、このクラスのインスタンスを生成せずに直接呼び出す事ができます。
  • 入力画像の整合性検査
    このクラスの IsValid メソッドで入力画像の整合性を検査できます。 このメソッドが false を返す場合は、前述の処理対象画像の条件を満たしていない為、 実行できない事を意味します。

初期値:
メンバ変数は、下記のように初期化されます。
メンバ変数 初期値 意味
m_Radial.center 100,100 円の中心座標
m_Radial.radius 50 円の半径
m_Number 3 検出線数
m_Threshold -1 微分値最大の位置を検出
m_ScanDirection FVCL::Edge::ScanDirection::Outward 外方向に検出
サンプルコード:
【処理結果】
Edge.RadialEdge.png
ソースコード:
// $Revision: 1.1 $
void RadialEdge()
{
// 1) インスタンスの準備
// 2) 処理対象画像の取り込み
INT status = FVCL::File::LoadImageFile( _T("disk_cd_01.png"), &src );
if( status != FVCL_ErrorCode::_SUCCESS )
{
_tprintf(_T("%s: Failed to load image file. code=%d\n"), __TFUNCTION__, status);
return;
}
// 3) 処理対象画像の有効性検査
return;
// 4) 画像処理準備
parser.SetSrcImage( 0, &src );
parser.SetResult( &result );
// 5) パラメータ設定
parser.SetRadial( FVCL::Data::CFvCircle(156, 123, 48) );
parser.SetNumber( 360/30 );
parser.SetThreshold( -1 );
// 6) 画像処理実行
if( ! parser.Execute() )
_tprintf(_T("%s: Failed to execute. code=%d\n"), __TFUNCTION__, parser.GetErrorCode());
// E) 確認用
{
// 画像表示の準備
display.Create( 1 );
display.SetImage( &src );
display.SetDisplayRect( src.GetWindow() );
display.ReadImage();
// オーバレイの生成
FVCL::GDI::CFvOverlay* pOverlay0 = display.GetOverlay(0);
pOverlay0->SetScaling( true );
// 描画: 計測位置
{
// 中心
center.SetSize( 3, 3 );
center.SetStyle( FVCL::GDI::FigureStyle::Cross );
center.GetPen().SetColor( RGB(0,0,255) ); // 青
// 円周
FVCL::GDI::CFvGdiCircle circle( parser.GetRadial() );
circle.GetPen().SetColor( RGB(0,0,255) ); // 青
// 放射線
for(INT i=0 ; i<parser.GetNumber() ; i++)
{
ls.st = parser.GetRadial().center;
// 0°の線分
ls.ed.x = ls.st.x + parser.GetRadial().radius;
ls.ed.y = ls.st.y;
ls.SetAngle( 360 / parser.GetNumber() * i ); // 傾き
ls.GetPen().SetColor( RGB(255,255,0) ); // 黄
lines.push_back( ls );
}
// 追加
pOverlay0->DrawFigure( center );
pOverlay0->DrawFigure( circle );
for(UINT i=0 ; i<lines.size() ; i++)
pOverlay0->DrawFigure( lines[i] );
}
// 描画: 検出位置
for(UINT i = 0; i < (parser.GetResult()->GetCount()); i++ )
{
parser.GetResult()->GetData(i, &edge );
// +マーク
FVCL::GDI::CFvGdiPoint position( edge.GetPosition() );
position.SetSize( 3, 3 );
position.SetStyle( FVCL::GDI::FigureStyle::Cross );
position.GetPen().SetColor( RGB(255,0,0) ); // 赤
// 追加
pOverlay0->DrawFigure( position );
}
// 保存
display.SaveImage( &canvas, display.GetDisplayRect(), 1.0 );
FVCL::File::SaveImageFile(_T("Edge.RadialEdge.png"), canvas);
}
}
バグ:
FVCLbasic v1.2.0.0: 処理対象画像の水平サイズが 4 の倍数でない場合に、不正な検出結果を返す不具合を改修しました。
バージョン
FVCLbasic v1.2.0.0: (機能互換に影響) プロジェクションを取る処理の精度向上を行いました。前バージョンとの機能互換に影響があります。
プロジェクションを取るための対象画素の位置を固定小数点で計算していた為、精度向上のため浮動小数点に変更しました。 この変更に伴い、前バージョンとの処理結果に相違が発生する場合があります。
+ FVCL::Edge::CFvRadialEdge の継承関係図

公開型

enum  {
  SrcImageCount = 1,
  DstImageCount = 0
}
 

公開メンバ関数

 CFvRadialEdge ()
 コンストラクタ [詳解]
 
 CFvRadialEdge (const FVCL::Data::CFvImage *src, CFvEdgeResult *result)
 初期値指定コンストラクタ [詳解]
 
virtual ~CFvRadialEdge ()
 デストラクタ [詳解]
 
virtual bool Execute ()
 処理の実行 [詳解]
 
virtual bool IsValid () const
 入力画像の有効性検査 [詳解]
 
virtual bool Validate (INT option=0) const
 出力画像の有効化 [詳解]
 
virtual FVCL::ImageSize GetValidSize (INT index, INT option=0) const
 出力画像の有効サイズの取得 [詳解]
 
bool SetRadial (const FVCL::Data::CFvCircle &radial)
 検出線設定円の設定 [詳解]
 
const FVCL::Data::CFvCircleGetRadial () const
 検出線設定円の取得 [詳解]
 
bool SetNumber (INT number)
 検出線数の設定 [詳解]
 
INT GetNumber () const
 検出線数の取得 [詳解]
 
bool SetScanDirection (INT direction)
 検出線方向の設定 [詳解]
 
INT GetScanDirection () const
 検出線方向の取得 [詳解]
 
bool SetThreshold (INT threshold)
 エッジ検出閾値の設定 [詳解]
 
INT GetThreshold () const
 エッジ検出閾値の取得 [詳解]
 
virtual CFvRadialEdgeoperator= (const CFvRadialEdge &src)
 代入オペレータ [詳解]
 
virtual bool operator== (const CFvRadialEdge &src) const
 比較オペレータ(==) [詳解]
 
virtual bool operator!= (const CFvRadialEdge &src) const
 比較オペレータ(!=) [詳解]
 
- 基底クラス FVCL::Edge::CFvEdge に属する継承公開メンバ関数
 CFvEdge ()
 コンストラクタ [詳解]
 
virtual ~CFvEdge ()
 デストラクタ [詳解]
 
virtual bool SetResult (CFvEdgeResult *result)
 エッジ検出結果格納用オブジェクトの設定 [詳解]
 
virtual CFvEdgeResultGetResult () const
 エッジ検出結果格納用オブジェクトの取得 [詳解]
 
virtual CFvEdgeoperator= (const CFvEdge &src)
 代入オペレータ [詳解]
 
virtual bool operator== (const CFvEdge &src) const
 比較オペレータ(==) [詳解]
 
virtual bool operator!= (const CFvEdge &src) const
 比較オペレータ(!=) [詳解]
 
- 基底クラス FVCL::CFvImageParser に属する継承公開メンバ関数
 CFvImageParser ()
 コンストラクタ [詳解]
 
virtual ~CFvImageParser ()
 デストラクタ [詳解]
 
bool SetSrcImage (INT index, const FVCL::Data::CFvImage *image)
 入力画像の設定 [詳解]
 
const FVCL::Data::CFvImageGetSrcImage (INT index) const
 入力画像の取得 [詳解]
 
INT GetSrcImageCount () const
 入力画像コレクションの許容量の取得 [詳解]
 
bool SetDstImage (INT index, FVCL::Data::CFvImage *image)
 出力画像の設定 [詳解]
 
FVCL::Data::CFvImageGetDstImage (INT index) const
 出力画像の取得 [詳解]
 
INT GetDstImageCount () const
 出力画像コレクションの許容量の取得 [詳解]
 
virtual CFvImageParseroperator= (const CFvImageParser &src)
 代入オペレータ (=) [詳解]
 
virtual bool operator== (const CFvImageParser &src) const
 比較オペレータ (==) [詳解]
 
virtual bool operator!= (const CFvImageParser &src) const
 比較オペレータ (!=) [詳解]
 
- 基底クラス FVCL::CFvObject に属する継承公開メンバ関数
 CFvObject ()
 標準のコンストラクタ [詳解]
 
virtual ~CFvObject ()
 デストラクタ [詳解]
 
INT SetErrorCode (INT err)
 エラーコードの設定 [詳解]
 
INT SetErrorCode (INT err) const
 エラーコードの設定 [詳解]
 
INT GetErrorCode () const
 エラーコードの取得 [詳解]
 
bool SetAllocateOption (INT value)
 画像領域確保時のオプションの設定 [詳解]
 
INT GetAllocateOption () const
 画像領域確保時のオプションの取得 [詳解]
 
void * operator new (size_t uiSize)
 new オペレータ [詳解]
 
void * operator new[] (size_t uiSize)
 new[] オペレータ [詳解]
 
void operator delete (void *pvObject)
 delete オペレータ [詳解]
 
void operator delete[] (void *pvObject)
 delete[] オペレータ [詳解]
 
void * operator new (size_t uiSize, LPCSTR szFileName, INT iLine)
 new オペレータ [詳解]
 
void * operator new[] (size_t uiSize, LPCSTR szFileName, INT iLine)
 new[] オペレータ [詳解]
 
void operator delete (void *pvObject, LPCSTR szFileName, INT iLine)
 delete オペレータ [詳解]
 
void operator delete[] (void *pvObject, LPCSTR szFileName, INT iLine)
 delete[] オペレータ [詳解]
 
virtual CFvObjectoperator= (const CFvObject &src)
 代入オペレータ [詳解]
 
virtual bool operator== (const CFvObject &src) const
 比較オペレータ (==) [詳解]
 
virtual bool operator!= (const CFvObject &src) const
 比較オペレータ (!=) [詳解]
 

静的公開メンバ関数

static INT CheckValidity (const FVCL::Data::CFvImage &src)
 入力画像の有効性検査 [詳解]
 
- 基底クラス FVCL::CFvObject に属する継承静的公開メンバ関数
static bool SetDefaultAllocateOption (INT value)
 既定の画像領域確保時のオプションの設定 [詳解]
 
static INT GetDefaultAllocateOption ()
 既定の画像領域確保時のオプションの取得 [詳解]
 

限定公開変数類

FVCL::Data::CFvCircle m_Radial
 検出線設定円 [詳解]
 
INT m_Number
 検出線数 [詳解]
 
INT m_ScanDirection
 検出線方向 [詳解]
 
INT m_Threshold
 エッジ検出閾値 [詳解]
 
- 基底クラス FVCL::Edge::CFvEdge に属する継承限定公開変数類
CFvEdgeResultm_Result
 エッジ検出結果格納用オブジェクト [詳解]
 
- 基底クラス FVCL::CFvImageParser に属する継承限定公開変数類
INT m_cpu_mode
 CPUモード [詳解]
 
CFvArray< FVCL::Data::CFvImage const * > m_SrcImages
 入力画像コレクション [詳解]
 
CFvArray< FVCL::Data::CFvImage * > m_DstImages
 出力画像コレクション [詳解]
 
- 基底クラス FVCL::CFvObject に属する継承限定公開変数類
INT m_ErrorCode
 エラーコード [詳解]
 
INT m_AllocateOption
 画像領域確保時のオプション [詳解]
 

その他の継承メンバ

- 基底クラス FVCL::CFvObject に属する継承限定公開メンバ関数
INT fnCPUCheck ()
 CPU情報の取得 [詳解]
 

列挙型メンバ詳解

anonymous enum
列挙値
SrcImageCount 

入力画像の許容数

このクラスが受け付ける入力画像数を示します。

DstImageCount 

出力画像の許容数

このクラスが受け付ける出力画像数を示します。

構築子と解体子

FVCL::Edge::CFvRadialEdge::CFvRadialEdge ( )

コンストラクタ

標準のコンストラクタです。
初期値については、クラスの説明をご参照ください。

FVCL::Edge::CFvRadialEdge::CFvRadialEdge ( const FVCL::Data::CFvImage src,
CFvEdgeResult result 
)

初期値指定コンストラクタ

処理対象画像と処理結果格納用オブジェクトを指定してオブジェクトを構築します。

引数
[in]src処理対象画像
[in]result処理結果格納用オブジェクト
解説:
引数の src と result はそれぞれ下記のように設定され、 このクラスのメンバフィールドに保管されます。 その他のメンバフィールドの初期値は、標準のコンストラクタを実行した場合と同様です。
SetSrcImage( 0, src );
SetResult( result );

FVCL::Edge::CFvRadialEdge::~CFvRadialEdge ( )
virtual

デストラクタ

このオブジェクトを破棄します。

関数詳解

FVCL::Edge::CFvRadialEdge::Execute ( )
virtual

処理の実行

現在、メンバ変数に設定されている入力画像のエッジ検出を行い、 結果を CFvEdgeResult クラスのオブジェクトへ格納します。

戻り値
true正常
false異常
GetErrorCodeメソッドによりエラーコードを取得できます。
エラーコード:
定数 内容
51 FVCL_ErrorCode::LICENSE_ERROR ライセンスエラー
1 FVCL_ErrorCode::FAILED_TO_ALLOCATE 領域の確保に失敗しました。
11 FVCL_ErrorCode::INVALID_PARAMETER 引数に誤りがあります。
22 FVCL_ErrorCode::NOT_FOUND エッジが見つかりません。
その他 計測対象画像と計測結果格納用オブジェクトが有効でなければ IsValid のエラーコードが設定されます。
参照
CFvEdgeResult
CFvEdge::SetResult
CFvEdge::GetResult
CFvEdge::m_Result

FVCL::CFvImageParserを実装しています。

FVCL::Edge::CFvRadialEdge::IsValid ( ) const
virtual

入力画像の有効性検査

現在、メンバ変数に設定されている入力画像の有効性を確認します。

戻り値
true正常
false異常

GetErrorCodeメソッドによりエラーコードを取得できます。

エラーコード:
定数 内容
81 FVCL_ErrorCode::HAVE_NOT_IMAGE 入力画像が設定されていません。
82 FVCL_ErrorCode::HAVE_NOT_RESULT 結果格納オブジェクト( CFvEdgeResult )が設定されていません。
その他 計測対象画像が有効でなければ CheckValidity の戻り値が設定されます。
解説:
計測対象の画像と計測結果を格納するオブジェクトが設定されている事を確認します。 計測対象の画像の条件については CheckValidity をご参照ください。
参照
CheckValidity

FVCL::CFvImageParserを実装しています。

FVCL::Edge::CFvRadialEdge::Validate ( INT  option = 0) const
virtual

出力画像の有効化

この関数は、メンバ変数に設定されている出力画像を有効化するものですが、 当クラス及び派生クラスは出力画像を持たないので、 この処理は無効化されています。

引数
[in]option挙動制御オプション
このクラスでは使用しません。
戻り値
true正常
false異常 (常にfalseを返します。)

FVCL::CFvImageParserを実装しています。

virtual FVCL::ImageSize FVCL::Edge::CFvRadialEdge::GetValidSize ( INT  index,
INT  option = 0 
) const
virtual

出力画像の有効サイズの取得

現在設定されている入力画像を処理する為に必要な出力画像のサイズを取得します。
出力画像を必要としない画像処理の場合は例外(FVCL_ErrorCode::NOT_SUPPORTED)を発行します。

引数
[in]index出力画像の配列指標 [0~(GetDstImageCount-1)] ※複数の出力が有る場合、指標によって取得される情報が異なる場合があります。
[in]option挙動制御オプション [0:既定の動作] ※指定できる範囲は派生クラスにより異なります。派生クラスの Validate の説明を参照ください。
例外
FVCL::CFveException処理に失敗した場合は例外を発行します。 発行された例外インスタンスの GetErrorCode からエラーコードを取得できます。
エラーコード:
定数 内容
21 FVCL_ErrorCode::NOT_SUPPORTED サポートされていません。
11 FVCL_ErrorCode::INVALID_PARAMETER 指定された引数に誤りがあります。
81 FVCL_ErrorCode::HAVE_NOT_IMAGE 画像オブジェクトが設定されていません。
91 FVCL_ErrorCode::INVALID_SRC_IMAGETYPE 入力側の画像種別が不正です。
94 FVCL_ErrorCode::INVALID_SRC_IMAGESIZE 入力側の画像のサイズが無効です。
97 FVCL_ErrorCode::INVALID_SRC_CHANNEL 入力側の画像のチャネル数が無効です。
19 FVCL_ErrorCode::INVALID_PROCAREA 処理範囲に誤りがあります。
解説:
このメソッドの仕様は派生クラスによって異なります。 詳しくは、派生クラスの説明及び Validate メソッドの説明を参照ください。
基本的な仕様は以下の通りです。

幅及び高さ: 現在設定されている入力画像の処理範囲サイズに合わせます。
※1) CFvEnhance の場合は、画像サイズに合わせます。
※2) 幾何変換の場合は option に 1 を指定すると変換後のサイズを取得できます。

画像種別: 現在設定されている入力画像の画像種別に合わせます。
入出力画像の型が異なる画像処理の場合はその限りではなく処理可能な型に合わせます。
※1) 派生クラスによって option により変換後の画像種別を指定できるものがあります。

チャネル数: 現在設定されている入力画像のチャネル数に合わせます。
入出力画像のチャネル数が異なる画像処理の場合はその限りではなく処理可能なチャネル数に合わせます。

FVCL::CFvImageParserを再実装しています。

FVCL::Edge::CFvRadialEdge::CheckValidity ( const FVCL::Data::CFvImage src)
static

入力画像の有効性検査

引数に指定された画像オブジェクトが、この画像処理クラスで処理可能か否かを検査します。

引数
[in]src検査対象の画像オブジェクトへの参照
戻り値
FVCL_ErrorCode::_SUCCESS有効な画像です。
FVCL_ErrorCode::INVALID_SRC_IMAGETYPE画像種別が不正です。
FVCL_ErrorCode::INVALID_SRC_CHANNELチャネル数が処理対象外です。
解説:
この画像処理クラスが入力画像として許容する条件は以下の通りです。
  • 画像種別が以下の何れかである事
    • FVCL::ImageType::UC8

  • チャネル数が1

参照
IsValid
Validate
FVCL::Edge::CFvRadialEdge::SetRadial ( const FVCL::Data::CFvCircle radial)

検出線設定円の設定

検出線設定円を設定します。

引数
[in]radial検出線設定円
戻り値
true正常
false異常
FVCL::Edge::CFvRadialEdge::GetRadial ( ) const

検出線設定円の取得

現在設定されている検出線設定円を取得します。

戻り値
検出線設定円を返します。
FVCL::Edge::CFvRadialEdge::SetNumber ( INT  number)

検出線数の設定

検出線数を設定します。

引数
[in]number検出線数 (3~3600)
戻り値
true正常
false異常
解説:
検出設定円を分割する数を設定します。 検出線の本数によってエッジ計測する放射状の方向が決定します。 計測開始方向は常に画面右方向(0 度の位置)になり、 一周2π(360度)をこの設定値で割った角度の方向にエッジ検出線を設定します。
FVCL::Edge::CFvRadialEdge::GetNumber ( ) const

検出線数の取得

現在設定されている検出線数を取得します。

戻り値
検出線数を返します。
FVCL::Edge::CFvRadialEdge::SetScanDirection ( INT  direction)

検出線方向の設定

検出線方向を設定します。

引数
[in]direction検出線方向
  • FVCL::Edge::ScanDirection::Outward
  • FVCL::Edge::ScanDirection::Inward

戻り値
true正常
false異常
解説:
検出線方向を FVCL::Edge::ScanDirection::Outward に設定すると、 円の中心から外側に向かって検出します。 FVCL::Edge::ScanDirection::Inward に設定すると、 円周上の点から、円の中心に向かって検出します。
FVCL::Edge::CFvRadialEdge::GetScanDirection ( ) const

検出線方向の取得

現在設定されている検出線方向を取得します。

戻り値
検出線方向を返します。
FVCL::Edge::CFvRadialEdge::SetThreshold ( INT  threshold)

エッジ検出閾値の設定

エッジ検出閾値を設定します。

引数
[in]thresholdエッジ検出閾値
  • -1: 微分値最大の位置を検出します。
  • 0~255: 微分値がこの値を初めて超えた所をエッジとして抽出します。

戻り値
true正常
false異常
解説:
エッジ検出位置を制御する閾値(微分値に対する)を -1 または 0~255 の値で指定します。
-1 を指定された場合は、微分値の最大位置を検出します。 0~255 を指定された場合は、最初に微分値が閾値を超えた所をエッジとして抽出します。
palcalip2_line_edge_detect_pos.png
【閾値が 0~255 の場合】
初めて閾値を超えた微分値位置と、その前後2個分の範囲の微分データに対して重み付き平均を求め、 それをサブピクセル位置とします。 但し、この範囲が微分値データの範囲を超えてしまった場合はエラーとなります。
	位置   0  1  2  3  4  5  6   7
	微分値 0 10 10 25 30 20  8 ...
例えば、上記のような微分データで m_Threshold = 20 の場合、 初めて m_Threshold を超えるのは 3 の位置になります。 サブピクセル値は、3 の位置に前後2個分の範囲を加えた 1~5 の範囲で重み付き平均を求めます。 重み付き平均は、微分値を d、位置を x とすると、(Σd*x)/(Σd)で求められます。 この場合は
(10*1 + 10*2 + 25*3 + 30*4 + 20*5 ) / ( 10 + 10 + 25 + 30 + 20 ) ≒ 3.42
となります。
【閾値が -1 の場合】
最大微分位置の前後で、(最大微分値*75/100)を超える部分に、 更に前後2個分のデータを加えた範囲における重み付き平均をサブピクセル値として求めます。 但し、この重み付き平均を求める範囲が、微分データの範囲を超えてしまった場合はエラーとなります。
	微分値
	100         ■
	80        ■■■■
	70      ■■■■■■■
	60  ■■■■■■■■■■
	  ■■■■■■■■■■■■
	  -5-4-3-2-1 0+1+2+3+4+5 位置
	            ↑最大微分位置
上図の様な微分値の場合を考えると、
(最大の微分値*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
となります。
FVCL::Edge::CFvRadialEdge::GetThreshold ( ) const

エッジ検出閾値の取得

現在設定されているエッジ検出閾値を取得します。

戻り値
エッジ検出閾値を返します。
FVCL::Edge::CFvRadialEdge::operator= ( const CFvRadialEdge src)
virtual

代入オペレータ

同一クラスのオブジェクトの内容を複製して、自身に代入します。

引数
[in]src複製元
戻り値
代入後の自身のオブジェクトへの参照を返します。
FVCL::Edge::CFvRadialEdge::operator== ( const CFvRadialEdge src) const
virtual

比較オペレータ(==)

同一クラスのオブジェクトの内容と比較します。

引数
[in]src比較対象
戻り値
true一致
false不一致
FVCL::Edge::CFvRadialEdge::operator!= ( const CFvRadialEdge src) const
virtual

比較オペレータ(!=)

同一クラスのオブジェクトの内容と比較します。

引数
[in]src比較対象
戻り値
true不一致
false一致

メンバ詳解

CFvCircle FVCL::Edge::CFvRadialEdge::m_Radial
protected

検出線設定円

参照
SetRadial
GetRadial
INT FVCL::Edge::CFvRadialEdge::m_Number
protected

検出線数

参照
SetNumber
GetNumber
INT FVCL::Edge::CFvRadialEdge::m_ScanDirection
protected

検出線方向

参照
SetScanDirection
GetScanDirection
INT FVCL::Edge::CFvRadialEdge::m_Threshold
protected

エッジ検出閾値

参照
SetThreshold
GetThreshold

Documentation copyright © 2007 FAST Corporation. [B-001864]
Generated on 2024年10月10日(木) 10時01分31秒 for WIL説明書(C++) by doxygen 1.8.11