OpenCV のエッジ検出について (Laplacian)

はじめに

OpenCV のLaplacianを使ったエッジ検出処理ついて調べたことをまとめた。

とりあえず関数を試してみたい方

実験用プログラム 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/

laplacian関数について

void cv:: laplacian (InputArray src,
OutputArray dst,
int ddepth,
 int ksize = 3,
double scale = 1,
double delta = 0,
int borderType = BORDER_DEFAULT
)          

引数

srcInputArray入力画像グレースケールの画像
dstOutputArray出力画像グレースケールの画像 フォーマットはddepth による。
ddepthint出力画像深度出力画像のビット深度。
負数の場合、入力と同じビット深度。 CV_16S, CV_32F, CV_64F
ksizeintカーネルサイズフィルタのサイズ 1, 3, 5, 7
scaledoubleスケーリング係数処理後の画素値に乗算する値。
deltadouble加算係数処理後の画素値に加算する値。
borderTypeint境界外処理方法cv::BorderTypes
画面 もしくは roi の境界処理をどうするか。
詳しくは下記参照
https://iryachi.stars.ne.jp/opencv_bordertype/

カーネル

ksize = 1 の時は縦横のカーネルで、 ksize = 3 の時は斜め方向になってるので注意。

処理例

わかりにくいので、実験用プログラムで自分で試したらよいかと。。。

元画像

左:ksize = 1, 右:ksize = 3
左:ksize = 5, 右:ksize = 7

おわりに

エッジ検出フィルタは実際に処理したい画像を用いてやってみないとどれがいいかわかりにくい。
Canny や Sobel とかも比較検討してみるといいと思う。