OpenCV のFilter2Dについて (任意の畳み込みフィルタ)
はじめに
OpenCV のFilter2Dを使った処理ついて調べたことをまとめた。
とりあえず関数を試してみたい方
実験用プログラム OpenCV_test の GitHubリポジトリ
URL
https://github.com/iryachi/OpenCV_test
実行ファイルだけ
https://github.com/iryachi/OpenCV_test/releases
使い方
https://iryachi.stars.ne.jp/opencv_test_imple/
Filter2Dについて
いろいろな畳み込みフィルタの基本になる関数。
この関数のパラメータによっていろいろな畳み込みフィルタを実現できる。 (meaning, laplacian, blurなど)
畳み込みフィルタについては以下
https://iryachi.stars.ne.jp/convolution-filter/
filter2D関数について
void cv::filter2D (InputArray src,
OutputArray dst,
int ddepth,
InputArray kernel,
Point anchor = Point(-1,-1),
double delta = 0,
int borderType = BORDER_DEFAULT
)
引数
src | InputArray | 入力画像 | グレースケールの画像 |
dst | OutputArray | 出力画像 | グレースケールの画像 フォーマットはddepth による。 |
ddepth | int | 出力画像深度 | 出力画像のビット深度。 負数の場合、入力と同じビット深度。 CV_8U C, V_16S, CV_32F, CV_64Fなど |
kernel | InputArray | カーネル | 浮動小数点型行列 この値がそれぞれの画素にかけられる。 |
anchor | Point | カーネルアンカー | カーネル内のフィルタ対象点(注目画素)の相対位置を表す (-1, -1) はカーネルの中心 |
delta | double | 加算係数 | フィルタ結果に足される値 |
borderType | int | 境界外処理方法 | cv::BorderTypes 画面 もしくは roi の境界処理をどうするか。(後述) |
パラメータ anchor について
anchor ポイント (1,2) とした時
パラメータ delta について
上記 anchor ポイントの例を使うと、
計算結果 274 に delta を足したものが出力イメージに入ることになる。
全体の底上げをする感じ。
パラメータ borderType について
出力イメージで計算されていない部分(グレーの部分)をどうするかという設定。
表のようなパラメータが用意されている。
BORDER_DEFAULT | 画像境界で反射。 |
BORDER_CONSTANT | ある一定値を使用。 |
BORDER_REPLICATE | 境界の値を使用。 |
BORDER_REFLECT | BORDER_DEFAULT 同様 |
BORDER_REFLECT_101 | BORDER_DEFAULT 同様 |
BORDER_REFLECT101 | BORDER_DEFAULT 同様 |
BORDER_TRANSPARENT | 元画像を変更しない |
BORDER_WRAP | 画像自身を繰り返し |
BORDER_ISOLATED | 何もしない。 |
終わりに
Filter2D はいろんなフィルタ(平滑化, エッジ検出など)の基本となっている関数で、係数などが決まっている時は他の関数使ったほうがやりやすい。
フィルタの中身を勉強するにはよいかな。
ディスカッション
コメント一覧
まだ、コメントがありません