画像処理における1次微分フィルタの原理や特徴、計算式についてまとめました。
【はじめに】一次微分フィルタとは
一次微分フィルタは、画像から輪郭を抽出する空間フィルタです。
一次微分を計算することで、注目画素の左右・上下の画素値の変化の傾きが求まります。
画像の輪郭は画素値の変化が大きいため、微分した画素値が大きい箇所が輪郭となります。
■入力画像(左)、出力画像(右)
出力画像を見ると、輪郭の部分が白くなっている、つまり画素値が大きいことがわかります。
動画解説版
【カーネル】一次微分フィルタ
注目画素の水平方向、および垂直方向それぞれの一次微分
は次のようになります。
(1)
よって、一次微分フィルタの水平方向微分のカーネル、および垂直方向微分に用いるカーネル
は次のようになります。
(2)
ただし、このやり方だと、実際には二つの画素の中間における微分値()となってしまいます。
そこで、注目画素の両端の画素値の差分を計算することで、注目画素の位置に合わせる方法もあります。
(3)
このとき、水平方向微分のカーネル、および垂直方向微分に用いるカーネル
は次のようになります。
(4)
尚、水平方向微分では縦方向の輪郭を取り出すことができます。
逆に垂直方向微分では横方向の輪郭を取り出します。
最後に、縦方向に検出された輪郭画像の画素値を、横方向に検出された輪郭画像の画素値を
とすると、縦横両方向の輪郭画像の画素値
は、次式で計算できます(二乗和平方根)。
(5)
【計算例】例題
入力画像と一次微分フィルタ(垂直方向微分)のカーネル
が次のように与えられたとき、出力画像
を求めよ。
(6)
出力画像の計算
入力画像とカーネル
を畳み込み演算してやると
(7)
となります。今回、入力画像の端の画素値は0とします。
また、0未満の画素値は0とします。
すると、出力画像は次のようになります。
(8)
プログラミングで実装
プログラミングによる実装例について下記事で解説しています。
言語 | 解説記事 |
---|---|
Python | ■【Python/OpenCV】一次微分フィルタで輪郭検出 |
C# | ■【C#】一次微分フィルタで輪郭検出 |
まとめ | ■【画像処理入門】アルゴリズム&プログラミング |
コメント
Ix,Iyからカーネルになる過程がわかりません
よかったら教えてください