使いたおし リストarrow  home prev  index  next    

circleColorTalk スクリプト (1)

luminance / 画像の明るさ の利用

Zimmer による解説 PDF (Painter Tech Notes)には luminance の取得は r*0.30+g*0.59+b*0.11 とあります。この数式は NTSC 系加重平均法というらしく、単純に各ピクセルの value を変換するより自然な結果になります(Painter の自動選択などで「画像の明るさ」を選んだときは、ちゃんとこちらの方式が使われています)。

なぜ単純にそれぞれのピクセルの value を取るだけではダメなのかというと、たとえば純粋な青(Painter の色三角上で右の先端部分)は純粋な黄色より暗く見えるのが、saturation = 0 の変換だけでは同じ暗さの灰色に変換されてしまうからです。NTSC 系加重平均法を使うと、純粋な青 red=0; green=0, blue=1; は 0+0+0.11 で 0.11、純粋な黄色 red=1; green=1; blue=0; は 0.30+0.59+0 で 0.89 になります。

実際に ColorTalk に入力するときは、選択できる数値が限られているので、あるものを組み合わせて使ってみると、こんな感じ。

red*0.3+green*(0.6-0.1*0.1)+blue*(0.1+0.1*0.1)

【 Color FAQ 】 によると、上記の RGB のウェイトづけは 1953 年当時のカラーテレビモニターを基準に作成されたものなので、必ずしも現在のモニターに合っているとは言えないそうです。とはいえ、このあたりから調整を始める出発点にはなるのでは。

ColorTalk による線画の透明化

いわゆる Eliminate White にあたると思われます。

Painter 8 でレイヤー上の画像の明るさを直接そのレイヤーの「不透明度 = Painter 7 までのレイヤーマスク」に渡せなくなりましたが、Painter の内部にはまだ直接「レイヤーの不透明度」を編集する機能があり、それを ColorTalk から使用することができます。

線画のあるのがキャンバスなら、全選択してレイヤー(またはフローター)に変換しておきます。ColorTalk ダイアログをショートカット「N」で表示。

ColorTalk で「レイヤーの不透明度」にあたるのは mask。mask=1 で完全に透明、mask=0 で完全に不透明、古いバージョンでは「アルファ」としていたこともあるようです。

レイヤー上の画像の明るさを「レイヤーの不透明度」(Painter 7 までは「レイヤーの表示マスク」として直接編集可能)に変換するには、画像の明るさを「透明度」に代入すればいいので、

mask=red*0.3+green*(0.6-0.1*0.1)+blue*(0.1+0.1*0.1);

この数式を線画レイヤー(あるいはフローター)に対して実行。この後、Painter 5 までならそのまま、Painter 6 以降ならレイヤーの「透明度の保護」にチェックを入れてから、好きな色でそのレイヤーを塗りつぶします。

もっとも紙に描いたペン画などをスキャンしたものを透明な線画レイヤーにするような場合には、あまりカラフルではないと思われるので、実際上はもっとシンプルな mask=value; (色を HSV で表示したときの V の数値をレイヤーの不透明度に変換)でも問題ないかも。

さらに単純に「完全な白部分だけを透明に」するなら mask=step(value,1);。これはマジックワンドで「許容量 0」で選択して消去するのと同じ。

線画の透明化 + 塗潰し

上の処理で塗潰しまで自動で実行するなら、

mask=red*0.3+green*(0.6-0.1*0.1)+blue*(0.1+0.1*0.1); red=0; green=0; blue=0;

上の例では黒での塗潰しになりますが、現在の選択色で塗潰すこともできます。

mask=red*0.3+green*(0.6-0.1*0.1)+blue*(0.1+0.1*0.1); red=cc_red; green=cc_green; blue=cc_blue;

画像のグレースケール化

上で解説したように、色のある画像は単純に saturation (彩度)を 0 にするだけでは正しいグレースケール画像には変換できません。NTSC 系加重平均法を使用した正しい(?)グレースケール化は次の数式で。

value=red*0.3+green*(0.6-0.1*0.1)+blue*(0.1+0.1*0.1); saturation=0;

Painter でのグレースケール化はこの方法でやるのがいちばん速いかも。(「画像の明るさ」で自動選択とか使えば 3 段階くらいでできます。)

グレースケールのバリエーション

上記の標準的なグレースケール変換方式のほかにも、フルカラー画像から色を抜く方法はいくつかあります。

まず、上でちょっと触れた、各ピクセルの value (明度)だけ残して彩度を 0 にする方法。これは「Adjust Colors / 色の調整」で中段のスライダを 0 にしたのと同じ。

saturation=0;

各ピクセルの RGB 情報の数値から、いちばん大きい数値を value に渡す方法(RGB 最大値)。

value=max(red,max(green,blue)); saturation=0;

各ピクセルの RGB 情報の数値の平均を value に渡す方法(RGB 平均)。

value=(red+green+blue)/3; saturation=0;

オリジナル、「画像の明るさ」から(NTSC 系加重平均法)、「彩度」ゼロ、RGB 最大、RGB 平均によるグレースケールを順に並べてみるとこうなります。

2003/09/24 - グレースケールのバリエーション追加。

(Last Modified: 2003/09/24)

    もどるreturn  home prev  index  next