本日はラプラシアンフィルタという画像のディジタルフィルタを紹介し、ラプラシアンフィルタの効果であるエッジの抽出を行うプログラムを紹介してみたいと思います。
ラプラシアンフィルタ
ラプラシアンフィルタ(Laplacian Filter)は、二次微分を利用して画像から輪郭を抽出するフィルタです。
二次微分というと複雑に感じますが、以下のような係数で与えられるディジタルフィルタです。対象画素の周囲が「1」となり、中央の画素が4近傍であれば「-4」、8近傍であれば「-8」になります。

このフィルタを用いることでエッジの抽出が可能です。
上の図の赤枠の中のように、全ての画素値が同じ領域では、出力される画素の値は0になります。
一方、上の図の緑枠の中のように、対象画素と周囲画素に差がある場合には、出力される画素の値の絶対値が大きくなります。
結果として、ラプラシアンフィルタを用いると画像のエッジ抽出が可能となります。
画像へのラプラシアンフィルタ適用によるエッジ抽出プログラム(Python+OpenCV)
画像にラプラシアンフィルタを適用するプログラムを以下で紹介します。
出力画素値に対して絶対値を取るか否か(取らない場合は、負の値は全て0として扱う)については、どちらがいいかは諸説あるので、今回は両方の出力を確認できるようにしました。
また、4近傍を用いたラプラシアンフィルタと、8近傍を用いたラプラシアンフィルタの双方を試せるようにしました。
動作環境:OpenCV 4.5.5
入力データとしては、以下の画像を用いました。

プログラムの動作結果
以下の4パターンの出力を比較したいと思います。
- 4近傍ラプラシアンフィルタ(出力画素値に絶対値をつけず、負の値は0にして出力する)
- 4近傍ラプラシアンフィルタ(出力画素値に絶対値をつける)
- 8近傍ラプラシアンフィルタ(出力画素値に絶対値をつけず、負の値は0にして出力する)
- 8近傍ラプラシアンフィルタ(出力画素値に絶対値をつける)
4近傍ラプラシアンフィルタ(出力画素値に絶対値をつけない)

4近傍ラプラシアンフィルタ(出力画素値に絶対値をつける)

8近傍ラプラシアンフィルタ(出力画素値に絶対値をつけない)

8近傍ラプラシアンフィルタ(出力画素値に絶対値をつける)

8近傍の方がエッジが鮮明に出力される印象があります。また、絶対値をつける場合ではエッジの線が少しボケたような印象になってしまうため、絶対値を付けなくても良いかもしれません。
まとめ
本日はラプラシアンフィルタを用いたエッジ抽出を紹介しました。以前にPrewittフィルタやSobelフィルタを用いたエッジ抽出についても紹介しているので、以下の記事も参考にしてみてください。