[osask 6809] Re: Jenny2.

  こんばんは、川合です。

  ちょっと古いメール([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/

ML番号でジャンプ
ML単語検索