こんばんは、川合です。 I.Tak. さんは 2003/12/02 16:18:11 の「[osask 6728] Re: Jenny2.」 で書きました: > i8はRGB値の差を最小にすることではなく、単にリニア性を求めて作ら >れています。基本の数式が線形なのです。最大値が0xc0だったら飽和させ >よう、などという仮定の話は忘れてください。i8にそんな仕掛けはない >からです。 忘れてもいいんですが、ようするに何を目指しているかが明確になる と思ったので、質問してみたわけです。つまりはその辺の理解が変わっ たということなんでしょうか。 ・・・ということは、全体的に暗くなろうが明るくなろうが、リニア 変換であることこそ本質である、つまりc0が最大値ならffがc0に変換さ れるような変換を選択する、というのが今の見解である、としていいで すか?(先を読む限りではこれで良さそうな感じですね)。 > では、入力と出力の差を無視してリニア性の観点に立ちます。しかし >依然i8はリニアです。利用できる階調を、パレットのある点から等分に >配しています。n8ではパレットの守備半径が場所によって異なる、とい >うか偏心してます (昔同じことを主張した気が……)。 うん、その主張は読みましたし、今でもよく覚えています。パレット の守備範囲が場所によって異なる、というのがよくわかりません。・・ ・いやその、わからないという言い方も不適切っぽいので補足します。 I.Tak.さんはパレットというか、階調を「点」で考えているのです。 点だと思えば、なるほど守備半径という議論は有効なのです。一方僕は 、階調を「範囲」で考えます。範囲っていう言い方もあまりうまくない なあ。ゾーン?ゾーンA、ゾーンB、ゾーンC、みたいな感じです。 だから僕は「ゾーンAとゾーンBをゾーン1に変換」みたいに考えている ので、数値がどうのこうのということをあまり気にしていないのです。 しかしどちらにしても、それは「丸め」の問題であって、リニア性に は影響していないと僕は思います。どちらもリニアです。 > たしかに、相対的に見ればi8はn8よりもコントラストを抑えています >(相対ですから、めりはりを*損なって*いるというのは違うと思います)。 確かに、「損なっている」は主観的くさい感じがしますね。すみませ ん。「相対だから」という理由じゃない気はしますが。 >しかし、コントラストを抑えても線形性は失われません (極端な場合を >除きます)。n8がリニアであるならi8もリニアです。そして、何度も言う そうです。だからどちらもリニアです。ただ同時にリニアにはならな いというだけです(I.Tak.さんが気にするレベルで見た場合)。 n8とi8の違いは、丸めの際の基準値のずれと、リニア変換係数の違い なのです。n8がリニアだと見る視点では、i8の変換は四捨五入にするた めの定数が加算されているように見えますし、逆に、i8をリニアだとす る場合は、n8を切り捨て相当にするための定数が加算されているように みえます。 >ようですが、コントラストを上げると上下が飽和して線形でなくなります。 >異質になるのです。したがってi8がリニアだからn8がリニアだとは限り >ません。私は、i8のコントラストが限界で、n8はめりはりを損なっている >と考えています。どちらが本当か、という問題なのです。 本当にn8は飽和しているのかなあ。コントラストを上げたら、飽和す ることがある、という主張は僕も理解できます。しかしグラデーション をn8変換したものをみる限りでは、「飽和した」という印象を持つこと ができません。この部分に関しては、できれば違う説明を期待します。 i8が限界だというのも根拠がほしいです(それがあれば、n8が飽和を 損なっていることが僕にも分かります)。僕はi8がすかすかに余ってい るようにみえます(すかすかというほどひどくはないですが)。域を十 分に使っていないというか。 i8では、0〜255を変換しているのではなく、-9〜264を変換している ように、僕には見えるのです。 > 「けしからん」と言われているとは思っていませんが、「気に入らない」 >というのは誤解に基づいていると感じています。何に対する誤解なのかと >いうと、理想の減色ルーチン、です。多分。 もちろん、僕が誤解している可能性はあります。 ということは、I.Tak.さんとしては筆の誤りとかそういうことではな くて、i8こそ優れている、というのが客観的に主張可能であると、本当 に思っているわけですね。 僕は「n8の方が客観的によい」という主張は最後までしません。しか し、「i8の方が客観的によい」というわけではない、という主張はしま す。・・・そうであれば、僕としては(主観に頼ることなく)n8とi8が 同程度であると主張するだけでいいので、楽です。 > 川合さんは、グラデーションパターンを減色したときの幾何学模様が >美しくなることに気を使っているのでしょうか。というのは、FUJI.JPGの >減色結果を見て「全ての階調が同等にまんべんなく使われ」ていることを >言い当てるのは困難だと思うからです。 「グラデーションパターンを減色したときの幾何学模様に配慮してい るのか?」というのは、ちょっと誤解に基づいている気もしますが、結 果的には良い所を付いています。 僕はテスト用のパターンにはあまり関心がありませんが、グラデーシ ョンは気にしています。16bitカラーやフルカラーが必要になる状況と いうのは、まさにグラデーションをきれいに出す必要がある状況だと思 っているのです。 そしてFUJI.JPGに関する指摘はまさにそのとおりです。FUJI.JPGの結 果は、補助的にしか見ていません。空のグラデーションは見ています。 >> 張を取り下げてはいません。つまり、「コントラストをもとよりも強く >> した」という解釈も可能だと思っているだけであって、僕はその解釈を >> 支持してはいません。だからその先の話はかみ合っていません。 > > 解釈の幅ではなく、紛れもなくコントラストを上げていると主張します。 うん、I.Tak.さんがそう主張しているのは分かりました。でも、僕は そういう見解も可能だと思いますが、それは相対的なものだと思ってい ます。I.Tak.さんからすると、i系はコントラスト不変で、n系は絶対的 にコントラストが上がっている、という主張なのでしょう。それは受け 入れていません。 僕はパレットによって結果的にRGB値がどうなったのかという所はあま り見ていません。それはパレットをいじればどうにでもなることです。だ から僕が考える減色処理は、全く異なる色空間への線形変換であり、空間 が異なる以上、もとの絵との「誤差」は重視しないのです(印象は気にし ますよ)。相似でありさえすればいい、という感じです(数値にこだわる わけではないので、相似こそ第一というわけでもないですが)。 > ↓で川合さんもおっしゃるとおり、n8とi8は同じリニア変換ですが、n8 >の方が係数が大きくなります。その係数は13/1020です。これは入力最大値 >と出力 (パレットインデックス) 最大値が小数点以下を含めて一致する係数 >3/255 (i8で採った値です。i8のコントラストが限界だと言うのはそういう >理由です) の 13/12倍であり、したがってn8は限界以上にコントラストを >高めて線形性を損ねています。 この部分をもう少し考えてみました。 I.Tak.さんの説明の式だと、タイルを含めた階調数を入れないで考え ています。僕はそれを含めて考えるほうが違いが分かりやすいと思って いるので、そうします。 k8の場合、ただの4bitシフトで、つまりは1/16です。もちろんこのせ いで階調不足が発生し、暗部をつぶしてしまいました。これは丸めの問 題ということにして、まずは変換係数だけを考えさせてください。 i8の場合、test043を見る限りでは、12/256のように見えます。 n8の場合、13/256です。 なるほど、I.Tak.さんのいうとおり、13/12倍のようです。 今度は、「入力最大値〜」のくだりを検討してみます。 k8では、8bitを4bitにすることだけを単純に考えたので、入力値に 0-255を、出力値に0-15を想定していました。まあこれは除外してもい いかな。 i8では、0-255を0-12にしているように見えます。n8では、0-255を0- 12にしている・・・というか、もっと厳密にやってみよう。 まず、入力をどう考えるかですが、とりあえず僕のモデルで行きます 。僕は0-255の入力を、0.00-255.99が切り捨てられたもの、と考えてい ます(本当はもっと桁がある)。というか、0-255というのではなく、 0.0〜1.0の実数があって、その小数部を8桁拾ってきた感じです。 だから(僕のモデルでは)、[0, 256)というのが厳密な入力値です。 さて、n8では、これを[0, 13)に変換したいのです。ということで、変 換係数は、13/256です。 y = (int) (13/256 * x) = (最近値) (13/256 * x - 0.499) i8だと、どんな式になるのかな。見た目で判断すると、 y = (int) (12/256 * x + 0.5) = (最近値) (12/256 * x) でしょうか?これはどういう出力を考えていることになるんだろう。 [0, 12)?あれ?これでいいのかな??? (以下考え) I.Tak.さんの説明には13階調を前提にした説明が無いから分かんない んだよなあ。僕なりに考えてみると、3/255を乗じて0.00-3.00の数値を 得て、さらにタイリングのために4倍して下2bitを拾って、それで四捨 五入かな?だから、255と256の違いはあるにしても、12という数字はあ っているのかもしれない。きっと、I.Tak.さんのモデルでは、入力が、 [0, 255]なんだろう。まあそれも一つの考えではある。 n8をタイリング階調を小数点以下に押し込んで説明したらどうなるん だ?上式からすると変換係数は、3.25ってことになる。 [0.000, 0.250) - まっくろ [0.250, 0.500) - 00と55の混合 [0.500, 0.750) - 混合 [0.750, 1.000) - 混合 [1.000, 1.250) - 55だけ [1.250, 1.500) - 混合 (中略) [3.000, 3.250) - ffだけ なるほどこうなるのか。同じ書き方をi8でやると、 (-.125, 0.125) - まっくろ [0.125, 0.375) - 00と55の混合 [0.375, 0.625) - 混合 [0.625, 0.875) - 混合 [0.875, 1.125) - 55だけ [1.125, 1.375) - 混合 (中略) [2.875, 3.125) - ffだけ なるほどこうなるのね。まあでも実際は、-.125とか3.12とかは出てこ ないわけだけれども。この辺をI.Tak.さんはどう思っているのかな。丸 めの都合で出現したおまけ領域で、表現可能な領域とは見なさない、み たいな感じなのかな。・・・僕は丸めで使えるようになる領域も含めて 考えているので、これがすかすかになっている原因だと思うわけです。 (以上考え) ええと僕は守備範囲とリニア性は別々の問題だと思っています。それ で守備範囲のことを独立して少し考えてみました。 例えばスキャナーやデジタルカメラは[0.00, 1.00)までの連続的な値 を256階調に「減色」しているわけですが、この時もI.Tak.さんは255倍 して四捨五入するのが「正しい」と思うでしょうか?僕はそれもありだ と思いますし、256倍して切り捨てるのもありだと思うのですが・・・ 。四捨五入のほうが絶対的にいいと思うんだろうなあ。・・・そのセン スは分からない・・・。 リニア性に戻ると、ようするに、変換係数的に見て飽和しているとい うのが、主張の根幹であるように思います。I.Tak.さんの方法だと、本 当に飽和したと主張するなら、変換係数は3.125/255.5のほうが妥当な 気がするのですが、これはどうでしょうか。I.Tak.さんにとって画面で 表現可能なのは、[0.00, 3.00]ではなく、(-.125, 3.125)のはずです。 これいっぱいに展開しないと、それより変換係数の大きいものを飽和し たとは主張できないように、僕には思えます(コントラストが上がった という主張は可能かもしれませんが、今のところは与えられた範囲でめ いいっぱいに展開する、という立場で合意していると僕は思っているの で、それは考慮しないことにします)。 入力を[0, 256)と考えるかどうかが、そして出力を[0, 13)と考える かどうかが分かれ道なんだろうなあ。こう考えると、n8のほうがリニア に思えると思うんだけど・・・。I.Tak.さんはどう思っていますか? > 川合さんが「変換後の各パレットの占有面積が均等になる変換」を意図 >した理由が私には理解できません。つまり、その変換が元画像に近い減色 >結果をもたらすと考えられた理由が私には分かりません。 これは僕が、そもそも入力を[0, 256)と考えているところに起因する でしょう。真っ暗から真っ白までのグラデーションをデジタルカメラや スキャナーに与えた場合、解像度が十分なら全ての輝度の本数が一致す るのが(一つの)理想だと思っているのです。 そして減色処理というのは、総じてそういうものだと思っているわけ です。そこに起因しています。しかし、I.Tak.さんみたいな変換もあっ ていいと思っています。 (等高線) > もちろん、川合さんがそういう"うっかりもの"に配慮すべきだと主張 >されるならそれはそれでいいと思います。しかし「受ける印象を元の絵に >近づける」という目標に関しては妥協したと言わざるを得ません。 > しかし"等高線"を見るために減色ルーチンを使うとは思ってもみません >でした。 情けないことを言いますが、僕は16bitカラーのときは、無意識に等 高線を数えています。緑だけは細かいんですよね。よく実感します。 「受ける印象」のターゲットが違うんでしょうねえ。ただ単に近い色 を出すことがgoodであると考えれば、使える色は何でも使うべきですし 飽和してでも、という発想は妥当です。16bitカラーからの減色でも、 緑をわざわざ5bitに落としてからやるのはRGB値を近くするという目的 からすると妥協になると思います(数値的な誤差は広がるわけで、リニ ア性を損ねている)。i8ではそうなっていないようですが。 ・・・というか僕がいわゆる「うっかりもの」なのかもしれません。 その一方で、I.Tak.さんはもしやRGB数値だけで絵を見ているのか!? という気がときどきします。 >> n系のアルゴリズムの場合、256階調の絵を、128階調に減色し、それ >> をさらに64階調に減色し、それをさらに32階調に減色し・・・とやって >> 仮に最終的に2階調に減色したとしましょう。この結果と、最初の256階 >> 調の絵をいきなり2階調に減色した場合とで、全く差は生じません。 > > タイリングしないときはそうでしょう。 そうです。タイリングしない場合の話です。僕にとって、タイリング は、画面に表現するときの手法であって、減色処理そのものではありま せん。それで上記のような表現をしました。だから、 > しかし、4個のパレットを使って減色する場合、13個の同じ大きさの >タイルブロックに分割するのがn系アルゴリズムです。実用上、そのよう >に差の生じない二段階変換があるのでしょうか。 それを含めて考えた場合の、このI.Tak.さんの言い分ももっともです。 >> itak系のアルゴリズムでは、途中に他の変換を施してから最終結果に >> 至っても、結果は不変、という変換の組み合わせは事実上ありません( >> もちろん、最後に1階調にするなどの自明的なものはありますが)。 > > それは誤解です。4階調パレットで減色してから2階調パレットで減色 >すると結果は不変です。i系には自己相似性があり、それ以上の階調でも >同じことです。 そうなのかな。つまり、フルカラーからi8をしてi4に行っても、フル カラーからいきなりi4に行っても同じだという主張ですよね? 例えば、c0c0c0の点を考えます。これはいきなりi4に行くと、ffffff になると思います。・・・一方、i8を経由すると、ffffffとaaaaaaのタ イルになると思われます。aaaaaaの色って、i4ではタイルになりません か?ということは必ずffffffになる、とはいえない気が・・・。場所に よっては変わりませんか? それとも、タイルは入れないという僕と同じ条件を使っているのかな 。そうだとしたら、どうなるんだろう?・・・ええと、ああ、ほんとだ 。I.Tak.さんのいう通りだ。 ごめんなさい、僕が勘違いしていました。この点についてはi系もn系 も同じです。 > ちなみに2階調のi系変換を平面に四つ並べれば、4階調のi系変換になり >ます。n系にはこうした自己相似性がありません。係数がタイリングの細か >さ (n8では4段階) に左右される (i系では左右されません) ことと合わせ >て、何か無理のあるアルゴリズムであることが暗示されていると思います。 ここの話がよくわからない・・・。 ああ、つまり、5階調(n4)と13階調(n8)は相似じゃないということで すか?そうですよ。だって、タイリングで作る色も原色と同じように扱 いますからねえ。4階調と16階調がもしあれば、相似になります(これ はi系にも言えることです、もちろん)。 とりあえず、自己相似性は僕には関心がないので、指摘されても、ふ ーん、という程度です。I.Tak.さんはそこも気にしているのですか? >> 僕はこういう性質が「一種の誤差の累積」のような気がするのです。 > > 「誤差が大きいか小さいかも全く考えていません」とおっしゃったのに >そういう「一種の誤差」を気にするとはどういうことでしょうか。 はい、僕は気にしていません。I.Tak.さんの立場(=誤差重視)に立 って問題を指摘しようとしただけです。でも、そもそも指摘が間違って いました。話を混乱させてすみません。 それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! imasy.org Homepage http://www.imasy.org/~kawai/