WIL説明書(C++)
3.1.0
|
トピック:
本ライブラリでは、任意のフィルタを施すクラス FVCL::Filter::CFvArbitraryKernelFilter を実装しています。
このクラスは、フィルタカーネル構造(FVCL::Filter::CFvFilterKernel)をメンバに保有しており、 このデータ構造クラスに指定されたカーネルに従ってフィルタを施します。
フィルタカーネルは、 SetSize メソッドで領域の確保を行い、 SetValue メソッドでカーネルの値を設定します。 または、 FVCL::Filter::CFvFilterKernel::Preset で既定のカーネルも生成できます。 既定のカーネルについては FVCL::Filter::PresetIndex の定義された定数をご参照ください。
クラス | 内容 |
CFvDoGFilter | 2つのガウシアンフィルタ結果の差を出力します。 |
CFvLoGFilter | ラプラシアンガウシアンフィルタを実行します。 |
CFvLaplacianFilter | ラプラシアンフィルタを施します。 周囲画素との2次微分を求め、エッジを強調します。 |
CFvRobertsFilter | ロバーツフィルタを施します。 |
CFvSobelFilter | 3x3 のソーベル微分フィルタを施します。 |
CFvCannyEdge | Canny 法によるエッジ検出を行います。 |
処理イメージ: CFvDoGFilter
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
処理イメージ: CFvLoGFilter
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
処理イメージ: CFvLaplacianFilter
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
処理イメージ: CFvRobertsFilter
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
処理イメージ: CFvSobelFilter
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
処理イメージ: CFvCannyEdge
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
クラス | 内容 |
CFvAverageFilter | 周囲画素との平均を求めてノイズ除去を行います。 単純平滑化と呼ばれる方法です。 |
CFvMedianFilter | メディアン法によりノイズ除去を行います。 注目画素を中心とする3x3の領域(注目画素+8近傍)内で9つの値を濃度値の昇順にソートし、 注目画素を中間値に置き換えます。 |
CFvMedianApproxFilter | メディアン法に似た方法でノイズ除去を行います。 このクラスは、従来製品 FVL/WIN の Lib_median との互換性の為に実装したものです。 前述の CFvMedianFilter と比べて処理速度は速いですが若干の誤差があります。 |
CFvRankFilter | 注目画素を中心とする3x3の領域(注目画素+8近傍)内で9つの値を濃度値の昇順にソートし、 注目画素を指定のランクの値に置き換えます。 ランクに 1 を指定した時は、注目画素を近傍の最小値に置き換え、 ランクに 9 を指定した時は、注目画素を近傍の最大値に置き換えます。 (従来製品 FVL/WIN の Lib_min_filter、Lib_max_filter と等価です。) ランクに 5 を指定した時は、前述の CFvMedianFilter と等価です。 |
処理イメージ: CFvAverageFilter
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
処理イメージ: CFvMedianFilter
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
処理イメージ: CFvMedianApproxFilter
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
処理イメージ: CFvRankFilter
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
ガウス関数による画像のぼかし処理、または1次微分・2次微分を行い輪郭抽出を行うクラスです。
画像のぼかし処理は、輪郭抽出の前処理として用いられます。
クラス | 内容 |
CFvGaussianFilter | ガウス関数による画像のぼかし処理を行います。 内部では、微分次数 0 で CFvGaussian2DFilter を実行しています。 |
CFvGaussian2DFilter | ガウス関数による画像のぼかし処理(または輪郭抽出)を行います。 内部では、 CFvGaussian1DFilter を X 方向・Y 方向のそれぞれに実行しています。 |
CFvGaussian1DFilter | ガウス関数による画像のぼかし処理(または輪郭抽出)を行います。 X 方向または Y 方向の何れかに対して処理を行います。 |
1) CFvGaussianFilter によるぼかし処理の例
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
2) CFvGaussian2DFilter による2次微分の例
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
3) CFvGaussian1DFilter による1次微分の例
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
CFvSolodelFilter は、2値画像上の白または黒の孤立点を除去します。
孤立点とは、注目画素の色とその周辺8近傍の全ての画素の色が異なる事を言います。 例えば、注目画素が白(濃度値:1)の時、周辺8画素が全て黒(濃度値:0)であれば、注目画素を黒にします。
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
CFvDistanceTransform は、 2値画像の各画素に対し距離変換を行って距離画像を生成するクラスです。
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
※注) 上図は、視覚的に確認する為に距離画像の各画素を 16 倍しています。
距離画像の各画素は、前景(濃度値:1) から背景(濃度値:0) までの最短距離を表しています。 背景(濃度値:0) に対応する画素は、常に 0 になります。
距離の定義は、以下の4種類から指定できます。
詳しくは、 距離変換モード(FVCL::Filter::DistanceTransformMode) の解説をご参照ください。
距離画像の一般的な用途として『骨格化』があげられます。 骨格化は、距離が極大となる画素(線の中央)のみを抽出する処理です。 後述の『細線化』とは異なり、線幅が 1 にならない場合があります。
CFvThinningFilter は、2値画像を細線化するクラスです。
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
細線化とは、画像のトポロジー(連結性、穴、分岐)を保持しながら幅1の線分を得る方法です。 一般的な用途として図形認識や文字認識があげられます。
本ライブラリでは、 エッジ検出 で利用しています。 また、エッジ検出で得られた特徴点を利用した 特徴点応用マッチング や 直線ハフ検出 、 円ハフ検出 にも派生します。
細線化のアルゴリズムについては、 FVCL::Filter::ThinningMode の解説をご参照ください。
ステガーフィルタ(CFvStegerFilter) は、 各画素において注目画素が線かどうかの判定を行うフィルタです。
線の強度と角度(線と直行するベクトルの向き)を出力します。
【入力画像】 |
![]() |
【線強度】 | 【線角度】 |
![]() | ![]() |
※注) 上図は、視覚的に確認する為に UC8 (0~255) にスケーリングしたものです。
ハリスフィルタ(CFvHarrisFilter) は、 コーナー強度を求めるクラスです。 コーナー部分の強度が高く、直線部分の強度は低くなります。 (高い強度は正、低い強度は負になります)
【入力画像】 | 【出力画像】 | |
![]() | ![]() | ![]() |
※注) 上図は、視覚的に確認する為に 負の値を黄色で、正の値を水色で表示したものです。