省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

darktable 機能解説: 拡散 / シャープ化 (Ver. 4.2.1 準拠)

f:id:yasuo_ssi:20211128195339p:plain

 本モジュールは、画像をシャープにしたり、逆にノイズを減らしたり(拡散) をコントロールするモジュールですが、パラメータ設定 (& 名称も) が極めて非直感的であり、マニュアルを読んでも何のことやら非常に理解に苦しむ難関モジュールです。Ver. 3.8.0より正式に導入されました。基本的にはウェーブレットに基づいて動作していますので、この解説を読む前に、以下の拙稿をまず一読することをお勧めします。

yasuo-ssi.hatenablog.com

 なお、このモジュールは計算負荷が大きく、NVIDIA のメモリに 4G 以上積んだ GPUを設置している場合は高速な計算が可能ですが、ないと計算時間がかかり重くなります。基本、Open CL が使えれば高速に計算できるはずですが、AMDGPU だと Open CL の動作が保証されていないようです。Intel の CPU 内蔵 GPU でも一応 Open CL を有効にできるようではありますが... Mac OS では、一応 Open CL は動くようですが、Apple は Open CL の使用は非推奨としておりパフォーマンスがどの程度出るか分かりません。

 また、拡散 / シャープ化は、当然ながら、最終出力解像度に調整してから掛けて下さい。例えばオリジナル画像が 6000 x 4000 だとして、最終出力を横幅 1920 にリサイズして出力すると仮定した場合、オリジナルサイズでシャープニングを掛けても、縮小した際に、せっかくつけた効果は他のピクセルと値がミックスされることで全て無駄になってしまいます。

 このモジュールのダイアログは、下記のようになっていますが、最も主要なパラメータは、速さです。そもそも速さ (Speed) というネーミングが混乱の元です。

 このわかりにくい名称ですが、マニュアルを読んで私の理解した範囲では、結局次のようなことのようです。流体が流れる速さ x 時間 = 距離となりますが、この「距離」が、言わば効果の強さの比喩になっているようです。つまり「速さ」 x 反復 (時間) = 効果の強さ (距離) で表現されているようで、ここでは「速さ」とは分散またはシャープ化処理を行う際の基本となる単位的な効果強度であり、それに処理の反復回数 (プロパティで設定) をかけると、最終的な分散またはシャープ化処理の効果の実際の強度が決まる、ということのようです。
 その際、「速さ」を小さくし、反復回数を増やすと、より精密に (劣化が少なく) 効果をかけることができますが、計算負荷は高まります。一方、「速さ」を大きくし反復回数を減らすと、効果の強さは同じでも、精度は下がります (劣化が大きくなる)。しかし計算負荷を減らすというメリットがあります。
 おそらく計算式上は、何らかの流体力学の計算式を応用しているのでこのような分かりにくい名称になっているのではないかと思います。
 そして、このように効果の精度 (画像劣化の度合い) を色々調整できるのが、他のノイズ低減やシャープニング・モジュールと異なる本モジュールの特徴のようです。

拡散 / シャープ化 ダイアログ

 以下のパラメータですが、要は、シャープニングか拡散 (ノイズ低減) かを決定します。

もっともメインのスライダー: 速度

 スライダーの向きと長さですが、 

 右向き: シャープ化 左向き: 拡散
   スライダーの長さを長くすると、1回の反復当たりの効果の強度がより高まりますが、画像補正の精度は下がります。PCへの負荷は下がります。スライダーの長さが短いと、1回の反復当たりの効果の強度は弱まりますが、よりオリジナルのテクスチャを保持します(画像補正の精度が上がる)。しかし一定の効果を得ようとすると反復をより多く繰り返す必要がありますので、PCへの負荷は高まります。

 さらに、1次 (1st order) の速さから4次 (4th order) の速さまで4つのスライダーがありますが、

 1次の速さ: 最もディテールのスケールが大雑把 (周波数が低い) ⇔ 4次の速さ: 最もディテールが細かい (周波数が高い)

 ということです。この1次から4次の違いについては、上にリンクにあるウェーブレットの説明をご覧いただくと何のことかお分かりになると思います。つまり4段階のスケールのウェーブレットに分解して、シャープ化やノイズ低減を行います。

 この効果を修飾するのが、プロパティにあるパラメータです。

プロパティ: 効果を制御する

[反復 iterations] は、値を上げると、効果を反復します。すでに触れましたが、より精密な補正を行いたい場合、上の速さ (のスライダーの値) を小さくし反復を増やします。逆にCPU の負荷を減らしたいなら、速さ (のスライダーの値) を大きくし反復を少なくします。後者は CPU の負荷は減りますが効果はより大雑把になります。

[中心域周辺の広がり raius span] とこのようなことです。拡散、シャープ化効果は、ウェーブレットで析出されたエッジ (輪郭線) を基準にして効果をかけますが、エッジを中心として効果が広がる範囲を指定します。

[中心域 central radius] これは、中心 (エッジ) をどの程度避けて効果をスタートさせるかどうかを指定します。これを 0px に指定すると、輪郭線 (エッジ) の中心から効果をスタートさせますが、値を上げると、エッジ (中心) を避け、エッジから指定したピクセル数分離れたところから効果をスタートさせます。通常は (ぼけやノイズ除去を行う場合は)、0 を設定して下さい。

プロパティ

 以上の2項目が重要であり、以下の項目は通常はあまりいじる必要のないものです。 

 次は、 [向き direction] です。

向き

異方性 (anisotropy) という、これも良く分からない言葉が使われていますが、ウェーブレットにより作成される輪郭線 (エッジ) に対して、効果が掛かる方向を制御するようです。簡単に言うと、エッジの方向によって効果のかかり方を変えるのか、それとも方向にかかわらず均等に効果をかけるのかを制御します。この値を正にすると、エッジの方向に沿って効果がより掛かるようになり、エッジと直交する方向には効果がより掛かりにくくなります。負にすると、その逆です。ゼロにするとエッジに関係なく均等に (等方的に isotoropic) 効果を掛けます。

 例えばぼかしを掛けたい画像になにか枠線が引かれているときに、その枠線にはぼかしをなるべく掛けずに目立たせたい、というような場合に有効です。逆にそのようなケースでなければ通常使わなくて良いでしょう。

輪郭線と効果のかかる方向 (黒: 輪郭線 黄色: 効果の大きさ)
左: 値を正 右: 値を負

 

 

 次は[エッジの操作 edge management] です。

エッジの操作

[シャープネス sharpness]は自明かと思います。ゼロはエッジに何も効果を与えません。正の値はエッジをよりシャープに、負の値はよりぼけるようにします。ぼかしやノイズ軽減 (拡散) を掛ける際に有効です。

[エッジの感度 edge sensitivety] は、エッジを検出したときに効果を抑制するかどうかです。感度を高めると抑制を高めます。エッジに沿ってアーティファクトが出る時に、それを減らすために値を上げます。

[エッジの閾値 edge threshold] は、変化の少ない平板な部分 (ぼけた部分、暗い部分) などで、エッジをうまく検出できないときに使います。正の値は、平板な部分でもエッジがより良く検出するようにし、シャープニングやローカルコントラストを掛けるのに役立ちます。負の値は、エッジの検出力を弱め、より平板にします。黒っぽい部分やぼけた部分をさらにぼかすのに役立ちます。

 

 次は [拡散の空間性 diffusion spatiality] です。

拡散の空間性

ここでは、[luminance masking threshold] のみ設定できます。ハイライトを修復するときに役に立ち、0 以上の値を設定すると、この設定以上の時のみに拡散が掛かるよう制限します。またガウスノイズが付加されます。

 

 なお、タイトル右端のハンバーガーメニューから以下のプリセットが利用可能です。どのようにパラメータを設定したらよいか迷う場合は、以下のプリセットから設定を選ぶと、それぞれの設定に適切なパラメータ設定をしてくれます。通常はこちらから選んで適用するのが良いでしょう。オンラインディスカッションを見ても、大半の人がプリセットを使っていて、マニュアルでパラメータをいじっている人はほとんどいないようです。

プリセット

 

[参考ビデオ]

 以下に、拡散 / シャープ化を使ったデモンストレーションと、補正例を紹介したビデオがあります (英語)。非常に参考になります。

www.youtube.com

-----------

[2024.2 追記]

 今年 (2024) になって Pixls.us に以下のようなスレッドが立ちました。

discuss.pixls.us 結局皆さん、このモジュールの効果は歴然ですが、その意味がよく分からなくてかなり苦労しているようです。瞬く間に 150 以上の記事が上がっています。ただこれらを見る限り、本稿で書いた私の理解はそう間違っていないと思います。