About

本サイトについて

趣味で開発したプログラムや開発メモを載せています。
ソースコードはGithubで公開しつつ、なるべく後から分かるように解説に努めてますので、
誰かのお役に立てれば嬉しいです。

プロフィール

kght6123

佐賀県出身で1985年生まれ。
三重県四日市市在住のシステムエンジニア。家庭を大事にしたい2児の父。

kght6123.page

HDRタイムラプス動画とHDR静止画で過去と現在の愛兎の様子を監視する(アンチノイズ) #RaspberryPi #PiCamera #Python #rclone

2022-06-07T16:18:33.538Z

前回、アップロードまで完了しましたが、画像の暗い部分などでノイズが目立つことがあります。

OpenCVにはアンチノイズリダクションに使えるAPIが用意されているので、試しに使って見たいと思います。

結果としては、少し精細感を欠き、処理時間が2倍ぐらい掛かってしまいますが、ノイズを軽減することが出来ました。

アンチノイズ処理は、cv2.imwriteの手前に、下記の処理を追記することで、実現します。

  # HDR画像のアンチノイズリダクションが必要な場合に、
  # 下記の処理を、picapture_hdr.pyのcv2.imwriteの直前に入れる
  
  # カラー画像用のノイズ除去処理を実行
  res_mertens_8bit = \
    cv2.fastNlMeansDenoisingColored(res_mertens_8bit, None, 2, 2, 7, 21) # 輝度を2、色を2、重みは7、加重平均は21で指定
  
  print('[' + str(i) + '] apply Denoising complete.')

  # エッジ保存平滑化フィルタを実行(結構、重い)
  res_mertens_8bit = \
    cv2.edgePreservingFilter(res_mertens_8bit, None, 1, 2, 0.75) # 座標空間を 2(0〜200)、色範囲を 0.75(0~1)で指定

  print('[' + str(i) + '] apply edgePreservingFilter complete.')

  # 画像の鮮鋭化フィルタを実行
  res_mertens_8bit = \
    cv2.detailEnhance(res_mertens_8bit, None, 3, 0.75) # コントラストを 3(0〜200)、エッジを 0.75(0~1)で指定
  
  print('[' + str(i) + '] apply detailEnhance complete.')

簡単に処理を解説させていただくと、

まず、先にcv2.fastNlMeansDenoisingColoredで、ノイズを除去します。

あまり、効果を高くすると、詳細が潰れてしまうので、適度な設定で実施します。

次にcv2.edgePreservingFilterで、残った細かいノイズも除去します。

このフィルタは、エッジ以外の部分を塗り潰したような効果が得られます。

これも、あまり効果を高くすると、処理が大幅に遅くなり、アニメ絵みたいになるので、適度な設定で実施します。

最後に、cv2.detailEnhanceで細部を強調します。

ノイズ除去処理で潰れてしまった細部を、可能な限り復元します。

これもやり過ぎると、絵画調みたいな感じになってしまうので、注意します。


今回は、3つの処理を兼ね合わせてノイズ除去を試みました。

cv2.fastNlMeansDenoisingColoredcv2.edgePreservingFilterの単体でも、そこそこ効果があったので、

処理の時間を考慮しつつ、好みに合わせて調整して利用していただければ・・・・と思います。