
Article
RAW現像MLの最後の難所は、質感を残すノイズ処理だった

rawlearn では、DNGやRAWを入力して、参照現像に近いJPEGを作るローカルML現像パイプラインを試している。
前回までの実験で、色味やトーンはかなり良い雰囲気まで近づいてきた。ただ、写真を拡大して比較すると、まだ大きな差が残っていた。色ではなく、ノイズ処理と質感の残し方だ。
特に気になったのは、暗部や背景に出る粒状ノイズ、白い毛のまわりに出る偽色、細かな毛並みや輪郭の崩れだった。全体の色が近くても、このあたりを見ると、商用RAW現像ソフトの参照出力とはまだ距離がある。
色変換だけでは足りなかった
これまでのモデルは、RAW入力から参照現像に近い色とトーンへ変換することを主な目的にしていた。
この方向は悪くない。画像全体の印象はかなり近づくし、ローカルで動かす小さなモデルとしても扱いやすい。ただ、1枚の写真を等倍に近い状態で見ると、別の問題が見えてくる。
背景の平坦な部分にはざらつきが残る。一方で、ノイズを強く消そうとすると、被写体の細部まで一緒に溶ける。毛並み、目のまわり、輪郭、細い線のような場所は、きれいにするほど不自然になりやすい。
つまり、必要なのは単純なノイズ除去ではなかった。
線形RAW段階でノイズ処理を試す
今回の実験では、既存モデル、参照現像、新しく作ったノイズ処理候補を同じ写真で比べた。
補足として、人物が写らない犬のカットで比較した画像も置いておく。左から参照出力、a085、a085 に追加の平滑化をかけたもの、texture gate を使った候補という並びだ。ここで見たいのは、全体の色味よりも、目の周辺、白い毛、背景、細い毛並みがどう残るかだった。

新しい候補は、線形RAWに近い段階でノイズ処理を入れる方向だ。色変換後のJPEGっぽい画像をあとからなめらかにするのではなく、もっと前の段階で、ノイズや偽色の出方を抑えられないかを見た。
結果として、暫定チャンピオンは a085 系のモデルになった。
a085 は既存モデルよりもノイズや偽色を抑えられている。特に、白い毛のまわりに出る色の暴れや、背景のざらつきは改善した。一方で、商用RAW現像ソフトのような「ノイズは少ないが、ディテールは残る」状態にはまだ届いていない。
強く消すと、質感も消える
一番わかりやすかった失敗は、ノイズ除去を強くしすぎたケースだった。
見た目だけなら、ざらつきは減る。背景もなめらかになる。けれど、そのぶん毛並みや細い線まで失われる。画像としてはきれいに見えても、写真として見たい質感が薄くなる。
RAW現像のノイズ処理は、「どれだけ消せるか」ではなく「どこを消してよいか」を見分ける問題なのだと思う。
背景や平坦部の色ノイズは抑えたい。白い毛の偽色も抑えたい。でも、目、輪郭、毛並み、布地の線のような場所はできるだけ残したい。ここを同じ強さで処理すると、必要な情報まで失ってしまう。
次はtexture-awareな補正へ
今回の結論は、a085 を壊さずに暫定チャンピオンとして固定することにした。
そのうえで、次の実験では別ラインとして texture-aware な補正モデルを試す。目標は、画像全体をなめらかにするモデルではない。ノイズや偽色っぽい場所だけを抑え、毛並みや輪郭のような質感は残す、ローカルな補正モデルだ。
パイプラインとしては、DNGから線形RGBに近い状態を作り、そこでノイズ処理を入れ、そのあとに参照現像風の色変換モデルへ渡す形を考えている。
DNG -> linear RGB -> denoise model -> texture-aware correction -> color model -> JPEG
色変換モデルだけを見ていたときは、RAW現像MLの主戦場は色だと思っていた。実際には、最後に効いてくるのはもっと細かい部分だった。
ノイズを消すだけなら簡単に見える。けれど、質感を残したまま消してよい場所だけを抑えるとなると、急に難しくなる。rawlearnの次の課題は、まさにそこになった。
