[Python]OpenCVによるエッジ検出 Sobelフィルタ
画像処理の必須技術エッジ検出をOpenCVで実装 Sobelフィルタを紹介
画像処理の人気は右肩あがりです。今後も需要が増加していく成長分野で,製造業や医療分野でもAIを含めて画像処理アプリケーションは既にあふれています。
最近はディープラーニングなどのAIを使った画像処理アプリが多いですが,個人的に製造業では昔ながらの画像処理のほうが信ぴょう性が高くて良いと思います。
そんな汎用的な画像処理において必須技術であるエッジ検出を紹介していきます。
エッジ検出には主に以下3通りのエッジ検出方法があります。
- ラプラシアンフィルタ
- Sobelフィルタ (本記事)
- Cannyフィルタ
人気があるのはCannyフィルタですが,今回はSobelフィルタによるエッジ検出を紹介します。
Sobelフィルタによるエッジ検出 Python(OpenCV)で実装
OpenCVは非常に人気のある画像処理ライブラリで,主要な画像処理は簡単なプログラミングで実装できます。
画像処理の基本についてはこちらの記事で,OpenCVによる画像の読込などはこちらの記事で紹介していますので是非見ていってください。
今回はPythonを使って実装していきます。なお,画像処理を行う上でサンプル画像にするのは2020年11月時点で大人気を誇るVTuberの一人,百鬼あやめ様の画像を使わせていただきます。和風な感じでかわいいですし,周りの浮遊霊?でエッジ検出が綺麗に確認できそうです。
こちらの画像をC:\Temp\ayame.jpgという名前で保存して以下のプログラムを実行するだけでSobelフィルタによるエッジ検出ができます。
import cv2
img = cv2.imread('C:/Temp/ayame.jpg') #これでimgに画像データが入る
dst = cv2.Sobel(img,-1,0,1) #Sobelフィルタでエッジ検出
cv2.imwrite('C:/Temp/Sobel.jpg',dst) #画像を保存
はい,エキゾチックですね。もともと鮮やかな色が部分的に残っており,若干立体感がありますね。なんか切り抜き絵みたいですね。
今回紹介したSobel関数で指定できるパラメータについて説明します。
cv2.Sobel関数の解説
Sobelフィルタリングを実施するcv2.Sobel関数について解説します。
cv2.Sobel(img, dType, dx , dy)
- img・・・フィルタリング対象の元画像データ
- dType・・・出力配列の形式を指定します。基本的に入力配列と同じ出力にする -1 が指定される
- dx・・・x方向の微分次数。基本的に 0 が指定される
- dy・・・y方向の微分次数。基本的に 1 が指定される
これらの値を指定できます。私はdType:-1 dx:0 dy:1 以外を指定した事はないです。
この指定だけで簡単に画像に対してSobelフィルタリングを行う事ができます。是非皆さんも活用していってください。