こんばんは、川合です。 I.Tak. さんは 2003/12/01 16:21:48 の「[osask 6722] Re: Jenny2.」 で書きました: >> > i*は入力に対して忠実だが、n*はコントラストが強くなってい >> >る、というのが私の見解です。入力をx軸、出力をy軸にしてプロッ >> >トすると分かると思いますが、i*の方が全体的に誤差が小さくなり >> >ます。 >> >> その見解は一理あります。 > > ということは、コントラストを強くしているという認識はしているわけ >ですね。川合さんはそれを「めりはりがある」と評価しているわけです。 > しかし、それは誤解です。コントラストを強くする処理はかなり慎重に >行わなければなりません。n8でめりはりが出るのは中間色の部分だけであり >Noiz2_BGのように明るい画像を減色するとかえってめりはりが損なわれます。 >暗い画像の場合も同様です。 > 画像全体の輝度分布を分析するのでもない限り、無暗にコントラストを >操作するのは危険です。上下の部分が飽和して全然リニアじゃなくなります。 >本当にリニアなのはi8の方です。 ここだけあえておおめに引用しています。 僕はI.Tak.さんの視点「も」理解しています。というか最初はむしろ そっちだったのですから。I.Tak.さんの方法で考えると(=誤差という 観点に立てば)、n8はリニアではありません。しかし、変換前後での数 値的な差という考えを捨てて、利用できる階調を変換に際して等分に配 することがリニアな変換だと考えることもできて、その観点に立つと、 n8こそリニアで、I.Tak.さんの方法は、その両側の色の利用機会を減ら して、コントラストを抑えたものという風に見ることができます。どち らが「本当」とか、そういうものではありません。 I.Tak.さんが僕の視点に立って考えられないということなら、それは それで構わないのです。僕はI.Tak.さんとは違って、この件に関して、 自分の支持しない方法を「品質が悪い」とか「けしからん」とは全く思 っていません。それはそれでいいと思っています。ただ僕は気に入らな いので、OSASKには組み入れないよ、というだけのことです。どっちの 変換系が好きなのかは、個人の好みに帰着するのではないでしょうか。 RGB数値的な差が最小になることこそ美しいと思うか、全ての階調が同 等にまんべんなく使われることこそ美しいと思うか、の。 僕は違いを強調したいのであって、どちらが客観的に優れているかと いう認識はありません。I.Tak.さんは当初から(客観的に見て)itak法 は高品位である、と感じさせる発言を繰り返しておられます。それに対 抗する意味で、主観的にn8の方がよい、ということは僕も書いています が。 細かいことをいうと、僕が「一理ある」というとき、全面的に賛成し ているわけではないが、その主張も筋が通っていることは十分に認めて いる、というニュアンスなのです。それを分かってください。自分の主 張を取り下げてはいません。つまり、「コントラストをもとよりも強く した」という解釈も可能だと思っているだけであって、僕はその解釈を 支持してはいません。だからその先の話はかみ合っていません。 リニアに関して言えば、I.Tak.さんも指摘の通り、結局は四捨五入か 切り捨てかの差でしかないわけで、さらに四捨五入と切り捨ての差は、 誤差の違いでしかないと僕は考えています。だから、n8をリニアな変換 であると主張するのは、数学的にも全く問題ないのです。しかしそのよ うに考えた場合、itak8の変換係数と、n8の変換係数は少し違います。 > i8の実装は、「入力最大値と出力最大値を一致させるリニア変換」とも >言えます。その点ではn8と同じです。 ちなみに、僕はk8もこの点では同じだと思っています。というのは結 果はどうあれ、みんな切り捨てなり四捨五入なりで、誤差を持っていま す。k8も16階調を想定してリニアに変換したけど、実際は階調不足で、 つぶれてしまっただけで、これも変換側としては意図しない不本意な結 果なのです。つまりこれらはすべて誤差の扱いの違いでしかないと僕は 思っています。 > 画面モードが違うと同じRGB値でも違う値になるかもしれないと言って >RGB値が変わってもいいやと最初から投げ出すのは問題がある姿勢だと思い >ます。減色ルーチンに求められているのは「RGBで入力しRGBで精度良く出力 >すること」なのではないのでしょうか。そうであるならパレットの設定を >考慮して減色しなければなりません。 それは、「I.Tak.さんが」減色ルーチンに求めていることであって、 一般的なことではないと僕は思います。少なくとも、僕はI.Tak.さんのよ うな意味での精度を求めていません。誤差のために、c0までしかパレット が使えない状況下では(仮に0〜c0まではたくさんの階調が利用できたと しても)、それ以上の輝度をあえてc0で飽和させるのをよしとするような なのが多くの人に共通に求められているというのも、僕には全く信じがた いです。 > 川合さんは基本発想がどうのとかパレットを変えたらどうのとか机上の >空論を振り回している気がします。一体、画面モードによって発色が大い >に変化するモニタがあるのですか。OSASKのパレット設定を毎回ころころ >変えたりするのですか。 ええと、うちのTOWNSのモニタ(純正ではなく、今使っているモニタ、 という意味です)は、大いに変化しています。黒の黒さも違いますし。 だから画面モードによってパレットを調節する機能は、あったほうが便 利だろうなあと思っていました。画面モードを変えたら全体的に暗くな るとか明るくなる、ということを経験しないほうが今は普通なんでしょ うか(AT互換機でも、VGAモードと8bitカラーモードで多少の差を感じ たりしませんか?うちでは、ちょっとVGAモードのほうが明るい気がし ています。パレット値は同じはずなのに)。ちょっとうらやましいです 。・・・だから机上の空論だって思ったのかなあ。・・・僕は水平垂直 周波数ごとにディスプレイの明るさやコントラストの設定などがあるの は、てっきりそういう誤差をディスプレイ側で吸収するための高級機能 だと思っていたのですが・・・。 基本発想は僕には非常に重要に思えます。どういう意図で変換を考え るかで、どのアルゴリズムがベストなのかということが決まると思いま す。パレットで変換された後のRGB値との差を最小にすることを意図す れば、必然的にI.Tak.さんのアルゴリズムがベストになるでしょう。ま た僕のように、そんなことはどうでもよくて、00からffまでのグラデー ションパターンに対して、変換後の面積が均等に出るような変換を意図 すれば、n8のようなアルゴリズムがベストになるでしょう。 これを机上の空論だといって片づけようとする姿勢こそ、僕はまずい ように思いますが・・・。まあ見解の相違っぽいので、この辺は深入り しないことにします。 >> 僕は高速性も確かに重要だと思います。でも、高速モードが別にある >> 以上、変換速度によほどの大差が付かない限りは、「変換結果の見栄え >> の良い(=元の絵を見てうける印象に近い)」アルゴリズムを使おうと >> 思います。プログラムやアルゴリズムが美しいかどうかは別です。誤差 >> が大きいか小さいかも全く考えていません。 > > 誤差が大きい減色処理をしたら受ける印象もまるで変わってしまいます。 >逆に「受ける印象が元の絵に近い」減色処理はすなわち誤差の少ない >減色であるはずです。客観的に「近さ」を評価する手段も、誤差の大きさ >によるしかありません。 I.Tak.さんは常に誤差のみで印象を評価する、という視点から抜けら れないだけなのかもしれません。 たとえば僕は、減色処理をする以上、かならず変換前には存在しなか った色境界が現われるということを前提にしています。その境界が、グ ラデーションに対して、均等に存在していれば、それを見た人は、ああ 、これはリニアなグラデーションなんだな、と理解することを想定して います。むしろ、実際の色ではなく、色境界を等高線のように見立てて て、色の差の程度を認識することもあると思うくらいです。だから、僕 は階調数にこだわるのであって、実際の色だけを考えているわけではな いのです(もちろん、実際の色も重要です。階調数だけ一致すればいい とか言って、色を反転させたりはしません)。暗い色の活用に消極的な のも、ここに起因します。 人間の目から受けるRGBの認識というのは、結局は周囲との相対的な 比で決まるものだと、僕は思います(もちろん絶対的な明るさもある程 度認識できますが)。つまり、00-ffの絵を、00-7fしかないパレットで 変換するとした場合、誤差を最小にするために、80以上を7fでつぶして あとはリニア、にするのではなく、ffを半分の7fに変換するようなアル ゴリズムを使うほうが、「受ける印象が元の絵に近い」と僕は思います 。だから変換前後の値の誤差ではなく、変換後に使える階調をめいいっ ぱい使うことを「僕は」意図するわけです。 こんな性質の違いもあります。 n系のアルゴリズムの場合、256階調の絵を、128階調に減色し、それ をさらに64階調に減色し、それをさらに32階調に減色し・・・とやって 仮に最終的に2階調に減色したとしましょう。この結果と、最初の256階 調の絵をいきなり2階調に減色した場合とで、全く差は生じません。 itak系のアルゴリズムでは、途中に他の変換を施してから最終結果に 至っても、結果は不変、という変換の組み合わせは事実上ありません( もちろん、最後に1階調にするなどの自明的なものはありますが)。 僕はこういう性質が「一種の誤差の累積」のような気がするのです。 もちろんn系でも、256階調を13階調にしてそれから5階調にしたら、い きなり5階調にした場合とは結果が違います。だから誤差がないという わけではありません。しかし、いくつかの変換に対して、最終結果を不 変に保つような変換経路が他にあるケースが原則としてない(k8系、it ak系)というのと、条件が揃えばある(n系)というのとでは、基本的 なアルゴリズムとして、変換誤差に違いがあるのではないか、というこ とが暗示されているような気がします。 もちろん、実際はこんなまだるっこしい変換はしませんし(だからま さに机上の空論であります)、そもそも僕は数値的誤差だけがすべてで はないと思っているので、僕がこの点をそれほど重視しているわけでは ありません。そういう観点もあるな、というだけのことです。 数値的に最近値を利用するようにすることと、絵の減色処理としての 変換誤差を最小にしようとすることは、常に一致するとは限らない、と 僕は考えております。だからn8やk8が切り捨てであり、itak8が四捨五 入だと言われても(それは正しい)、それを理由にitak8が誤差が小さ くて高品位なのだという点に関しては、全く賛成しないわけです。 そんなわけで、そこにこだわって僕に主張しても、議論は平行線を たどると思われます。 > ところで私が分析した結果、n8とi8は多少の違いしかないことが分かり >ました。その違いとは四捨五入と切り捨てです。どちらも、入力値に適当 >な係数をかけて、それから丸めているだけです。少なくとも、そういう >方法で実装できます。だから、発想がどうのとかいう話はi8とn8の比較で >は無意味です。結局、同じようなところに行き着いたのです。 僕としてはこの、「n8とi8は多少の違いしかない」というのは基本的 に同感です。しかし、その後の「だから、発想がどうのとかいう話はi8 とn8の比較では無意味です。結局、同じようなところに行き着いたので す。」の部分は全く同意できません。僕に言わせれば、これは同じよう なところに行き着いたのではなく、最初からk8、itak8、n8は、その程 度には同じだったのです。 そしてこれらのうちのどれがふさわしいかと判断する根本は、まさに どういう変換をしたいのかということであって、だから発想の違いこそ が(例えば変換前後の数値的誤差をどう考えるかとかが)、n8とitak8 とわけているのです。お互いにお互いの狙ったところに落ち着いている わけで、どちらもそれぞれにとっては十分に満足の行くものなのではな いでしょうか? それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! imasy.org Homepage http://www.imasy.org/~kawai/