OpenCVに標準で搭載されている関数を使ってノイズ除去を行う
※初心者向けにpythonの勉強法とその手順を記事にしました。
1. はじめに
これまでOpenCVを用いて、画像の2値化・3値化、輪郭抽出などを行いました。
今回はOpenCVに標準で搭載されている関数を用いて、簡単にノイズ除去を行ってみます。
2. コードと実行結果と説明
2.1 コード:
上記を実行すると、元画像と4つのノイズ除去画像がでてきます。
ちなみに元画像のノイズは「ごま塩ノイズ」と呼ばれており、画像にちっちゃい点がたくさんあるノイズです。
それではフィルタについて簡単に説明していきます。
2.2 blurを用いたノイズ除去
cv2.blur()で実行できます。
引数は左から順に、ノイズを除去したい画像、カーネルの大きさです。
今回は(3,3)にしていますので横3マス、縦3マス(合計で9マス)のカーネルになります。
つまりある画素に注目すると、その画素の上下左右斜めの画素地の平均を計算してることになります。
画像としては少しノイズが目立たなくなりましたが、輪郭がぼやけてしまっています。
2.3 GaussianBlurを用いたノイズ除去
引数は左から、ノイズ除去したい画像、カーネルのサイズ(横,縦),標準偏差です。
先ほどのblurとは違い、単に平均を取るのではなく、Gaussian分布によって重みづけをしているみたいです。
画像を見ると確かにノイズは消えていますが、ものすごくぼやけてます。
ノイズ除去より、モザイク処理に使った方が良いかもしれません。
2.4 medianBlurを用いたノイズ除去
引数は左から、ノイズ除去したい画像、カーネルのサイズです。
2.2のblurとの違いは、blurはカーネル内の平均を計算していたのに対し、medianblurはカーネル内の中央値を計算しています。
画像を見るとノイズが消えつつ輪郭もしっかりと残っています。
今回の様なごま塩ノイズにはmedianBlurは良いかもしれません。
2.5 bilateralFileterを用いたノイズ除去
引数は左から、ノイズ除去したい画像、ぼかす領域の大きさ、色空間に関する標準偏差、距離空間に関する標準偏差のようです。
平たくいれば、エッジを残したままノイズを除去する(ぼかす)処理です。
画像を見るとノイズが低減しつつ、輪郭もしっかりと残っています。
標準偏差などの値を最適にすれば有効なノイズ除去手段かもしれません。
自分が使ってるお得情報の紹介
私はAmazon kindle unlimitedというサービスを1年以上利用しています。
これは月額980円で 和書12万冊以上の電子書籍を読めるサービスです。
ビジネス本、雑誌、漫画、技術本など様々な本を読むことができます。10冊まで端末にダウンロードできるのでネット環境がなくても(オフラインでも)見れます。
なおkindle unlimitedは最初の30日間無料のため、気軽に登録してみて、あまり読みたい本が無ければすぐに解約しても問題ありません。
それか30日内に気になる本を全て読破すれば実質タダです。
ぜひ気になった方はチェックしてみて下さい。
なおkindleにない本等を買う時はamazonギフト券(amazonで使えるポイント)を買い、ポイントで数冊まとめて買った方がお得です。
ギフト券(ポイント)は買ったら10年も有効で、ポイントが付きます。さらに本をまとめ買い(2冊以上同時に)買うと、ポイントがもらえます。
(https://www.amazon.co.jp/b?ie=UTF8&node=5431437051)
学生さんであればkindle unlimitedよりも年2450円(月210円程度)で映画見放題、音楽聞き放題、本読み放題の「prime student」がおすすめです。
3. 最後に
いかがだったでしょうか。これでOpenCVの基本的な内容は書けたので、Tkinterとの組み合わせを検討してみたいです。