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

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.DoGFilter.png

処理イメージ: CFvLoGFilter

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.LoGFilter.png

処理イメージ: CFvLaplacianFilter

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.LaplacianFilter.png

処理イメージ: CFvRobertsFilter

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.RobertsFilter.png

処理イメージ: CFvSobelFilter

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.SobelFilter.png

処理イメージ: CFvCannyEdge

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.CannyEdge.png

平滑化と鮮鋭化

クラス 内容
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

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.AverageFilter.png

処理イメージ: CFvMedianFilter

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.MedianFilter.png

処理イメージ: CFvMedianApproxFilter

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.MedianApproxFilter.png

処理イメージ: CFvRankFilter

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.RankFilter.png

ガウシアンフィルタ

ガウス関数による画像のぼかし処理、または1次微分・2次微分を行い輪郭抽出を行うクラスです。
画像のぼかし処理は、輪郭抽出の前処理として用いられます。

クラス 内容
CFvGaussianFilter ガウス関数による画像のぼかし処理を行います。
内部では、微分次数 0 で CFvGaussian2DFilter を実行しています。
CFvGaussian2DFilter ガウス関数による画像のぼかし処理(または輪郭抽出)を行います。
内部では、 CFvGaussian1DFilter を X 方向・Y 方向のそれぞれに実行しています。
CFvGaussian1DFilter ガウス関数による画像のぼかし処理(または輪郭抽出)を行います。
X 方向または Y 方向の何れかに対して処理を行います。

1) CFvGaussianFilter によるぼかし処理の例

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.GaussianFilter.png

2) CFvGaussian2DFilter による2次微分の例

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.Gaussian2DFilter.png

3) CFvGaussian1DFilter による1次微分の例

【入力画像】   【出力画像】
floppy_UC8.jpg
arrow.png
Filter.Gaussian1DFilter.png

孤立点の除去

CFvSolodelFilter は、2値画像上の白または黒の孤立点を除去します。
孤立点とは、注目画素の色とその周辺8近傍の全ての画素の色が異なる事を言います。 例えば、注目画素が白(濃度値:1)の時、周辺8画素が全て黒(濃度値:0)であれば、注目画素を黒にします。

【入力画像】   【出力画像】
blob_BIN_2.png
arrow.png
Filter.SolodelFilter.png

距離変換

CFvDistanceTransform は、 2値画像の各画素に対し距離変換を行って距離画像を生成するクラスです。

【入力画像】   【出力画像】
blob_BIN.png
arrow.png
Filter.DistanceTransform.png

※注) 上図は、視覚的に確認する為に距離画像の各画素を 16 倍しています。

CFvDistanceTransform.png

距離画像の各画素は、前景(濃度値:1) から背景(濃度値:0) までの最短距離を表しています。 背景(濃度値:0) に対応する画素は、常に 0 になります。
距離の定義は、以下の4種類から指定できます。


詳しくは、 距離変換モード(FVCL::Filter::DistanceTransformMode) の解説をご参照ください。

距離画像の一般的な用途として『骨格化』があげられます。 骨格化は、距離が極大となる画素(線の中央)のみを抽出する処理です。 後述の『細線化』とは異なり、線幅が 1 にならない場合があります。

細線化

CFvThinningFilter は、2値画像を細線化するクラスです。

【入力画像】   【出力画像】
text_BIN_1.png
arrow.png
Filter.ThinningFilter.png

細線化とは、画像のトポロジー(連結性、穴、分岐)を保持しながら幅1の線分を得る方法です。 一般的な用途として図形認識や文字認識があげられます。
本ライブラリでは、 エッジ検出 で利用しています。 また、エッジ検出で得られた特徴点を利用した 特徴点応用マッチング直線ハフ検出円ハフ検出 にも派生します。

細線化のアルゴリズムについては、 FVCL::Filter::ThinningMode の解説をご参照ください。

線(曲線)抽出

ステガーフィルタ(CFvStegerFilter) は、 各画素において注目画素が線かどうかの判定を行うフィルタです。
線の強度と角度(線と直行するベクトルの向き)を出力します。

【入力画像】
radial_UC8.png
【線強度】 【線角度】
Filter.StegerFilter.1_mag.png
Filter.StegerFilter.2_angle.png

※注) 上図は、視覚的に確認する為に UC8 (0~255) にスケーリングしたものです。

コーナー検出

ハリスフィルタ(CFvHarrisFilter) は、 コーナー強度を求めるクラスです。 コーナー部分の強度が高く、直線部分の強度は低くなります。 (高い強度は正、低い強度は負になります)

【入力画像】   【出力画像】
palette_UC8.png
arrow.png
Filter_HarrisFilter_ch0.png

※注) 上図は、視覚的に確認する為に 負の値を黄色で、正の値を水色で表示したものです。


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