rawpyでPython現像その19(fbdd noise reduction)

python

 rawpyの現像関数、postprocess関数の引数のfbdd_noise_reductionに関して確認します。

 postprocessに関しての詳細はこちら

 詳細のアルゴリズム不明でしたが、OFF含めた3つの調整値を持つ色ノイズ除去のオプションということが分かりました。

fbdd noise reduction

 fbdd noise reductionとはなんだ?というところから調査を始めました。rawpyのリファレンスには

デモザイキング前のFBDDノイズ除去処理モード。モードは全部で、Full、Light、Offの3種類存在する。

 とあります。もう少し突っ込んで調べてみると、どうもどこぞの有志が作ったデモザイク前色ノイズ除去のアルゴリズムな気配です。このページで解説があります。本体のリンク先が死んでいて、どこぞのWebアーカイブ先をリンクしています。(しかも本体のリンク先が、フィッシングサイトにリダイレクトされるのでたちが悪い)

 論文でもひっかかってくれればいいのですが、ちょっと見つかりませんでした。ここのページによると、(以下上記ページの直訳)

 It works before demosaicing and can be followed by any demosaicing method. FBDD eliminates the most visible impulse noise leaving 99% of the details intact and significantly reduces chroma noise – this helps getting good results using different denoising techniques applied after demosaicing. It doesn’t affect contrast or saturation of the image therefore no post processing is requied. The resulting image looks grainy and natural.

 (訳)デモザイク前に機能し、任意のデモザイク方法を使用できます。

 FBDDは、目につきやすいインパルスノイズを除去し、ディテールの99%をそのまま残し、色ノイズを大幅に削減します。デモザイク後に適用されるさまざまなノイズ除去手法を使用して、良い結果を得るのに役立ちます。

 画像のコントラストや彩度には影響しないため、後処理は不要です。結果の画像は、粗く自然に見えます。

 とのことです。やはり以前調査したメディアンフィルタと同様、色ノイズの除去をしてくれるようです。ディテールの99%という表現の根拠が気になりますが、そう書いてあります。弱点には

  It leaves a lot of small noise (chroma and luminance) therefore it is usable only for really noisy images. It also can decrease sharpness and contrast in reds.

 (訳)多くの小さなノイズ(彩度と輝度)が残るため、ノイズの多い画像にのみ使用できます。 また、(赤の?)シャープネスとコントラストを低下させる可能性があります。

 とのことなので、暗いところを撮影した、ノイジーなものを入力として想定しているようです。なぜ赤に限定したシャープネスとコントラストが落ちるのか不明です。redって赤以外に訳し方あります?可算名詞?

 このデノイズ処理だけを切り出したツールもソースコード含め公開されているので、その効果を確認することはできそうです。が、リンク先が死んでます。

実験

 rawpyでの現像実験をしてみて1点はまりました。half sizeをTrueにするとこのfbddデノイズ処理効きません。以前のメディアンフィルタの確認の時にはhalf sizeのオプションをTrueにしても変化が確認できましたが、今回はダメでした。このhalf sizeの調査はまだやってませんが、デモザイクをパスするのかもしれません。

 このfbddのデノイズはデモザイク処理と関係があるようなので、half sizeオプションは効かせてはいけないようです。

 また、設定はenumで指定するイメージで、

rawpy.FBDDNoiseReductionMode.Off
rawpy.FBDDNoiseReductionMode.Light
rawpy.FBDDNoiseReductionMode.Full

 の3つが指定できます。

img  = raw.postprocess(half_size=False,
                       demosaic_algorithm=rawpy.DemosaicAlgorithm.LINEAR,
                       bright=1.5,
                       use_camera_wb=True,
                       fbdd_noise_reduction=rawpy.FBDDNoiseReductionMode.Light                       
                       )

 こんな感じで現像させてみました。ちょっと結果を誇張させたかったので、brightオプションで少し明るくしています。

 結果は以下。確かに色ノイズは低減できているように見えます。ちなみに被写体はコーヒーです。300%表示です。

 そしてLightよりもFullを指定した方が強く色ノイズが取れているように見えます。カップのエッジ部の色づきも取れているのでいい感じに見えます。

 メディアンフィルタと喧嘩しないかなぁと思って、両方適用した結果が以下です。結論から言うとこの画像に関しては、適度に上品に色ノイズ除去ができているように見えます。(今度は400%表示です。)

 一番右のfbdd noise reductionとmedian filterの両方を掛けたものだと、コーヒーに変な色づきもなく、いい塩梅に見えます。

 コードとしては以下

img2 = raw.postprocess(half_size=False,
                       demosaic_algorithm=rawpy.DemosaicAlgorithm.LINEAR,
                       bright=1.5,
                       use_camera_wb=True,
                       fbdd_noise_reduction=rawpy.FBDDNoiseReductionMode.Full,
                       median_filter_passes=1
                       )

まとめ

 このfbddノイズリダクションのアルゴリズム詳細はわからないが、デモザイク処理の前の画像に対して色ノイズ除去を行う処理である。この処理はデモザイク後のノイズ除去処理と重ねて実施することで、より効果的に使うことも可能。

 わかったような、わからないような。そんなノイズ除去処理でした。デモザイク前のセンサ値に対するノイズ除去処理なので、ここでうまくノイズが取れれば、デモザイクでその傷が広がることもなく、いい感じになると思います。センサのSN改善という意味では、このデモザイク前が一番いい処理位置なのかなとも思います。アルゴリズムの詳細が知りたいところです。

python現像
スポンサーリンク
キャンプ工学

コメント

タイトルとURLをコピーしました