こんばんは、川合です。 ちょっと古いメール([OSASK 6731])にレスする形で、あえて書いて います。 このメールは今までの反論などに対するレスではなく、また別の論点 の提供です。そしてその論点は、小柳さんのこのメールの内容にかなり 関連していると思われるので、このメールへのレスにしたというわけで す(他のメールへのレスは、後日書きます)。 僕がこのメールで主張したいことは、次のことです。 ・「誤差という観点でも、等高線が入る位置はi系ではなくn系がベスト である」という主張が可能であるという指摘。>主にI.Tak.さん向け ・上記から派生する、現在のパレット設定に関する説明(のやり直し) 。 >主に小柳さん向け --- <一つ目の論点> まず、以下の話の前提を書きます。 ここからしばらく、僕は絶対的誤差第一主義の立場で発言します。も ちろん本当の僕は誤差第一でも「絶対的」差違重視でもありませんので 、これは本心ではありません。しかしこういうふうに考えても、(たま たま)n系と同じ結果になる、ということを指摘したいだけです。 そしておそらく、小柳さんは今から僕が言うことを既に知っているよ うに思います。この考えを持ってから[OSASK 6731]をあらためて読み返 したところ、そんな気がしました。 今まで、僕とI.Tak.さんの論点は、あらかじめ00やffなどのパレット を与えておいて、それを使って如何にして減色するか、という点がメイ ンであったと思います。ここであえてこの論点を一時的に放棄して、パ レットの選択から考え直そうと思います。 最初は、ディスプレイやビデオチップが良く調整されていて、「画面 モードによって、同じRGBでも違う輝度になることある」という点を無 視できると仮定します。この仮定はあとで取り除きますが、説明を簡単 にするために、最初はこれで行きます。・・・ついでに言うと、この仮 定があれば僕の「相対的差違のほうがむしろ重要」という主張の、根拠 の一つは消滅します。 16進数で書くのはやりにくいので、輝度を小柳さん風に[0, 1)で表わ します。1が含まれないのは僕の趣味です。気に入らない人は、1を含む ように修正して読み替えてください。 以下、しばらくの間はタイリングを全く考えません。タイリングは後 で説明します。 さて、まず1階調の場合を考えたいと思います。1階調というのは、つ まりたった1つの輝度で全ての輝度を近似してしまおうという、減色方 法としては最低の方法です。この場合、パレットをどう選ぶべきでしょ うか。最大の誤差を一番小さくできるパレットの選び方は、 [0, 1) → 0.5 すなわち 1/2 です(最大誤差は1/2)。 次に2階調の場合を考えます。これはこうするのが、誤差を最小にする パレット選択と変換方法です。 [0, 1/2) → 1/4 (参考:つまり0x40) [1/2, 1 ) → 3/4 (参考:つまり0xc0) 最大誤差:1/4 次に3階調の場合を考えます。これはこうなります。 [0, 1/3) → 1/6 [1/3, 2/3) → 3/6 [2/3, 1 ) → 5/6 最大誤差:1/6 だんだんパターンが見えてきました。4階調、5階調、13階調だとこう なります。 (4階調) [0, 1/4) → 1/8 [1/4, 2/4) → 3/8 [2/4, 3/4) → 5/8 [3/4, 1 ) → 7/8 最大誤差:1/8 (5階調) [0, 1/5) → 1/10 [1/5, 2/5) → 3/10 [2/5, 3/5) → 5/10 [3/5, 4/5) → 7/10 [4/5, 1 ) → 9/10 最大誤差:1/10 (13階調) [0, 1/13) → 1/26 [ 1/13, 2/13) → 3/26 (中略) [11/13, 12/13) → 23/26 [12/13, 1 ) → 25/26 最大誤差:1/26 今はタイリングをしないモードを考えています。そこで、2階調と4階 調の場合を、n4やn8と比較してみます。そうすると、パレットの設定が 全然あっていませんが、しかし等高線が現われる位置は全く同じです。 もしn4でパレットの値を0x40と0xc0にすれば、さらにn8でパレットの 値を0x20・0x60・0xa0・0xe0とすれば、小柳さんや、相対誤差に目覚め る前のI.Tak.さんは、(高速モードに関しては)大いに満足すると思わ れます(ただし、I.Tak.さんは他の点で異論があると思います。n4で中 間色パレットを活用しないこととか、16bitカラーモードで緑成分を5bi tしか拾わない点など。これらについては、とりあえずこのメールでは 論じないことにします)。 次に、タイリングモードについて議論したいと思います。 ここで根拠も何もなく、いきなり5階調減色の話から入ります。5階調 減色では、手段はともかくとして、 1/10、3/10、5/10、7/10、9/10 の5つの輝度を生成する必要があります。ここで仮に、パレットAとBを用 意して、次のように設定したとします。 A = 1/10 B = 9/10 そうすると、これで2つの輝度は表現できます。さらに、AとBを1:1で 混合すれば、 A50B50 = 5/10 となり、5/10も解決です。同様に、 A75B25 = 3/10 A25B75 = 7/10 なので、AとBのタイリングで、5階調減色ができます。 ところで、この結果は小柳さんが[OSASK 6731]で言っていたものと全 く同じです。だから、小柳さんは以上のことを既に理解しておられたと 思われます。 したがってn4のタイリングモードについては、パレットを1/10と9/10 にすれば、小柳さんと過去のI.Tak.さんを満足させられると思います。 13階調減色についても同じです。利用する基本パレットは、 1/26、9/26、7/26、25/26 の4つです。これでタイリングすると、必要な13階調の全てが揃います 。 以上で、「パレットの設定以外の面では、n系は絶対誤差最小といえ る」という説明は終わりです。 --- <二つ目の論点> そうなると「n系でけしからんのはパレットの設定である」という小 柳さんの主張にたどり着きます。この点に関しては、小柳さんを十分に 満足させられるような説明はありません。 でも、「思ったほどはひどくないかもな」と思わせられるような話は できるかもしれません。それを試みます。 まず、n4系についてです。n4系では、次の2つのパレット設定が、減 色の観点から候補に出ました。 ・0x40と0xc0 (高速モードが誤差最小) ・0x20と0xe0 (タイリングモードが誤差最小) どちらを優先するべきか、もしくはその中間を取るべきか、という議 論が第一にくるのは自然でしょう。僕は「高速モードというのは、絵の 印象を軽視しているモードであって、その代わり描画速度を優先してい る」という風な設計思想で高速モードを作ったので、その精神から行く と、タイリングモードにパレットを合わせるべきだと思います。 そうなるとまさに小柳さんが[OSASK 6731]で提案した通りになります 。 しかし実際問題としては、n4では減色専用のパレットを用意すること ができないので(それはi4も同じであります)、0x20を0x00で、0xe0を 0xffで代用することになります。 代用の影響ですが、これは論じるよりも見比べるほうが手っ取り早い と思います。 http://hideyosi.zive.net/~k/je2_fig.lzh (290KB) 代用しないものが、f8_c4です。代用したものが、f6_n4です。そして I.Tak.さんの方法が、f4_itak4です。test043と富士山の両方で見比べ てほしいのですが、「仮に」f8_c4を4bitカラーモードの理想だとすれ ば(この場合かなわぬ理想ですが)、そのf8_c4に見た目が近いのは、 f6_n4であって、f4_itak4ではない、というのは客観的事実だと思いま す。 I.Tak.さんの名誉のために言っておくと、f8_c4が理想だというのは やや強引な仮定です。絶対誤差主義に立つなら、暗いパレットの活用も 許されるべきだという主張は大いに考慮に価すると思うからです。した がって、i4の等高線の位置を修正したようなものが、「絶対誤差」の観 点ではベストであろうと思われます(個人的には、一度それも見てみた い気はします。見ないといいとも悪いともいえないので。僕の嫌いな非 対称になりますが、見たら気が変わるかもしれません。変わらないかも しれません)。 次はn8系です。これは0x00や0xffで近似する必要はありませんが、僕 は近似してしまっています。しかしまずは、f9_c8という理想的な結果 と、f7_n8やf5_itak8を見比べてください。 見た目で比べてc8に近いのはどちらかと聞かれたら、それはn8だろう と思います(I.Tak.さんの提案のように、目を細めたり、遠くから見た り、縮小して比較したりして等高線の位置が分からなくなれば、i8のほ うが、むしろ近く見えるかもしれません。しかし「僕が考える」普通の 感覚では、等高線は見えますし、十分に気になると思います。その観点 では、n8のほうがc8に近いと言えると思っています)。 しかしそんなことをぐずぐず言わないで、さっさとパレット設定を、 1/26・9/26・7/26・25/26にしてしまえ、というのが小柳さんの主張だ と思います。 ここで僕はディスプレイの個体差の話を持ってきます。例えば1/26の 輝度に設定するためには0x0aにすればいいのですが、それは画面モード によって輝度が変わらないとした場合の話です。変わる場合、フルカラ ーモードで1/26の輝度と同じになるような設定を探して、それを0x0aの 代りに使うべきだと思います。 だから、パレット設定を0x0aに固定するよりは、ユーザ設定可能にし ておくほうが、より一層元画像に近い色合いで表示できるようになると 思います。 しかしだからといって、今の0x00の設定が正当化されるとは僕は思っ ていません。一般的に言って、ディスプレイやビデオチップの調整は結 構行き届いていると思いますし、仮にずれるにしても、そのずれは0x0a からちょっとそれる程度でしょう。だから、この理屈だけで考えるなら デフォルトは0x0aのほうが合理的だと思います。 僕としては、例えば8bitグラフィックボックスで白い背景に黒い文字 を書いたものと、32bitグラフィックボックスで白い背景に黒い文字を書 いたものの両方を1つの画面(8bitカラーモード)で見比べたときに、「 あれ?32bitグラフィックボックスのほうが、背景は少し暗くて、文字は ちょっと灰色っぽいなあ」と感じるのが、なんか嫌だったのです。そう いう場合が頻出すると思っているわけではないのですが、そういうこと が起きないほうが僕の好みで、そして僕の好みにしても理想と比べてあ まり違わない(f9_c8とf7_n8の差)と思ったので、それでいいやという ことにしたのです。・・・ということにしてください(この説明は、今 でっち上げたものです)。 しかし念を押しますが、これはデフォルトであって、好きなときにシ ェルから修正可能になるべきものです。そしてデフォルトに僕の好みが 出ているだけなのです(ディストリビューションによっては、0x0aなど がデフォルトになっているものもあっていいと思います)。 おそらくこれは指摘するまでもないと思いますが、i8ではどうパレッ トを調節しても、n8でパレットを最適化した場合よりは大きな絶対誤差 を持ちます。しかしパレットを0x00・0x55・0xaa・0xffに固定する、も しくはその輝度を目指して調節するとするなら、n8よりもi8のほうが絶 対誤差が小さくなります。 --- 以上です。それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! imasy.org Homepage http://www.imasy.org/~kawai/