OpenCV のノイズ除去について (Blur)

2021年9月13日

はじめに

OpenCV のBlurを使ったノイズ除去ついて調べたことをまとめた。

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

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

Blur 処理について

Blur の処理方法は平均化フィルタ (meaning) になっている。
カーネル内の数値を足して、カーネルの枠数で割ったものを注目画素の値とする。

全体がぼやけた画像になるので、背景をぼかす、文字を読めないようにぼかす処理に使いやすい。
写真を見やすくするなどのノイズ除去方法としてはあまり向かないかも。

blur関数について

void cv:: blur (InputArray src,
OutputArray dst,
Size ksize = 3,
Point anchor
int borderType = BORDER_DEFAULT
)          

引数

srcInputArray入力画像グレースケールの画像
dstOutputArray出力画像グレースケールの画像 フォーマットはddepth による。
ksizeSizeカーネルサイズカーネルの縦横のサイズ (正方形以外も可能)
anchorPointカーネルアンカーカーネル内のフィルタ対象点(注目画素)の相対位置を表す (-1, -1) はカーネルの中心
borderTypeint境界外処理方法cv::BorderTypes
画面 もしくは roi の境界処理をどうするか。
詳しくは下記参照
https://iryachi.stars.ne.jp/opencv_bordertype/

カーネル、アンカーの意味については以下参照
https://iryachi.stars.ne.jp/opencv-filter2d/

カーネル

3×3 までのカーネルは以下の様になる。

処理例

元画像
左: Ksize = (5,1), 右: Ksize = (1:5)

左上を拡大

左: Ksize = (5,1), 右: Ksize = (1:5)  , 拡大図

わかりにくいが、左画像は縦線、右画像は横線がぼやけた感じになっている。

おわりに

最も基本的なぼかしフィルタで、単純に全体をぼかす時に使用する事が多い。
方向性がわかっている時には横方向(縦方向)だけのカーネル使う事もあるかな。