[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nikomat 18523] Re: Digital dark room



ひうらっす.

At 01:45 01/01/08 +0900, rin wrote:
>基本的な理屈はあにじゃの書いているとおりです。
>具体的にはコントラストいじるのではなく、
>ハイライトとシャドウをいじります。
>
>コントラストを高くするというのは明暗差を大きくするわけですから、
>暗いピースはより暗く、明るさの数値を小さくして
>明るいピースはより明るく、明るさの数値を大きくする処理になります。

ソフトのインプリメントにもよるけど,結局いっしょじゃないかなぁ.

「明度・コントラスト」と呼ぶか「ハイライト・シャドウ」と呼ぶかは,
単にユーザインタフェースの違いだと思います.やっていることは同じで.

例えば銀塩のプリントの場合などだと,ハイライトやシャドウをこれこれの
場所にしたい,って考えてプリントするけど,実際にはそういう便利な
仕組みはないんで,紙の号数(やマルチグレートペーパー),つまりコントラスト
の調整と,露光時間(明度値)の組み合わせで,トーンを出すわけです.

ただ,こういうやりかたは直接的ではないというか,難しいんで,
(トライ&エラーを必要とするので)ソフトウエアでは,やぁりんさんの
おっしゃるように,画像の上(もしくはヒストグラムの上)で,
直接的にハイライトにしたいところの明度と,それ以下は黒につぶれてくれて
いいところの値を指定できるというだけだと思います.

>ただし、真っ黒と真っ白は変わりませんから
>最暗部、最明部に値が偏り均一になりません。

っていうことですが,例えば最大明度が 200 であった画像の
コントラストを上げると,最大明度が 255 になったりするので,
別に,元のハイライトの値 200 を保持するような非線形な変換が
やられているわけじゃないと思います.

例えば,元の明度を x ,補正後の明度を y とすると,
y = a * x + b というふうな線形変換が考えられますけど,
どちらの処理も結局この式に基づくので.で,後から

  if(y > 255) { y = 255; }
  else if(y < 0) { y = 0; }

という処理をやっているだけのことです.

コントラストを上げる処理と言うのは,直接この a の値を増やして,
それに合わせて適当に b の値を減らしているだけです.
(例えば 128 の明度値を不変にするためには,a の増分を
128 で割って,b から引けばよい)

また同様に,ハイライト・シャドウを指定するというのは,
たとえば指定した最暗部の明度を xs, 最明部を xh とすると

   0 = a * xs + b
255 = a * xh + b

を連立させて a, b を求めるわけです.

a = 255 / (xh - xs)
b = -(xs * 255) / (xh - xs)


実際には,このような線形変換だけではなくて,中間調の明度を
指定できるものが多いですね.Photoshop だと,「レベル補正」で
やることが出来ますし,トーンカーブ(明度補正の関数)を自由に
描けるソフトも多いです.

#その点やっぱり,白黒プリントはむずかしいっす.
#非線形要素も強いし.現像液腐ってると黒締まらないし ;_;
#昨晩も4時までやってた.

では

----
 日浦 慎作  Shinsaku HIURA
 大阪大学大学院 基礎工学研究科
 システム人間系専攻 システム科学分野
 〒560-8531 豊中市待兼山町 1-3
 TEL:06-6850-6372  FAX:06-6850-6341
 http://www-inolab.sys.es.osaka-u.ac.jp/users/shinsaku