« プログラマー的デザイン表現(5) | トップページ | 文章力トレーニング »

2010年1月 7日 (木)すべての色ふたたび績まるるを待つ

各辺比率1:4:9の直方体が、木星の衛星エウロパでの生命の誕生&進化にいそしんでいるであろう今日この頃、みなさま如何お過ごしでしょうか?

前回のいいカンジで減色できたな~、と思いきや、なんかシミみたいなものが結果画像に発見されて、ガックリ、といった漫画のオチみたいな終わり方になってしまい、あまりのショックで「シミ対策します」などと口走りつつも、およそ2ヶ月の間に、「シミ?あ~、シミやらソバカスやらは気にしない、って飴みたいな名前のヒトが昔言ってた」などと低きに流れるがままヘタれて何にも考えてこなかったくせに、数日前にあわてて前回の記事を読み直して、自堕落な年末年始を過ごした自身への後悔のうちに本日の当番を迎えてしまいました、プログラマのM.L.Kです(LはLengthyのLです。Lengthy&Futile!)。

そんなこんなで、前回に続き、相変わらずメディアンカットで減色しちゃうのでございます。

減色の結果、画像に現れたシミ、あれは一体なんだったのでしょうか?(遠い目)

結論から言えば、あれは、数の論理によって無視されてしまった、アウトサイダーなヒト達なのです。

例えば、次のような極端な分布があったとして、

2010_0106_00 

これをメディアンカットでどんどん分割していったとします。

2010_0106_01_2
↓更に分割します
2010_0106_02
↓もっと分割します
2010_0106_03
↓どんどん分割します
2010_0106_04

そうすると、一番最後の図の赤い円で囲まれた部分は、薄い黄色のグループに入っていますが、値としては薄い緑のグループに含まれたほうがもっともらしい、というような結果になってしまいます。これこそが、例のシミなのです。

どうしてこんなことになってしまうのでしょうか…?

赤い円の部分は、最初の分割で右側のグループにされてしまいますが、数が少ないので、分割していく位置を決める際には、ほとんど相手にされません。

同じように最初の分割で左側のグループからは切り離されてしまっているので、分割が進んでいって緑のグループのように近しいグループができたとしても、仲間にして貰うきっかけさえありません。

あ、なんか、義務教育の頃を思い出して、目から嫌な汗が…。

対策はいくつか考えられますが、手っとり早くて分かりやすいのは、メディアンカットで256色を求めた後、元画像に含まれる全ての色ついて、256色のどの色に近いのか(どのグループに含まれるのか)を改めて見直す、という方法だと思われます。

ここで問題となるのは、色が近いor遠い、という感覚的な事柄を、どう表現するか、ということです。

今回は、最もスタンダードだと思われる、次の式を用います。

色0と色1について、赤緑青各チャンネルをそれぞれ、

色0:(r0,g0,b0)
色1:(r1,g1,b1


するとき、

D=√( (r1-r0)^2+(g1-g0)^2+(b1-b0)^2 )

つまり、Dは各チャンネルをそれぞれ別の次元として捉えた3次元空間上での距離を表すことになります。

距離なら、近いか遠いかを比べるのは単純な値の大小比較で済む、というワケです。

で、そうやって全ての色について見直しを行った結果が次のものです。

2010_0106_05

上の式では平方根(√)が含まれていますが、実際の処理では、これは省きます(省いても問題ない理由については、2009/3/25の記事「処理を減らすための数学」を参照してください)。

サンプルの画像でさえ約4万9千色×256色=約1258万8千回の計算をすることになりますので、できるだけ処理を軽減したいですよね?

さて、確かにシミはなくなっていますが、減色結果としては、どの程度の変化があったのでしょうか?確認の為、フリップで比較してみます。

2010_0106_06

ほわ~、思った以上に前のシミあり画像が荒れていたことを再確認。
これだけ結果に差があるということは、グループが見直された色が相当数ありそうですね。どれくらい見直しがあったか、見てみましょう。

2010_0106_07

グレーの部分がグループに変化がなかった部分、色がある部分が見直しされた部分です。

…だいたい10%くらい?

これだけの量の見直しがあるとなると、もともとのグループ分け自体が適切なものだったのかどうか、疑問に思えて来ます。
メディアンカットのやり方にも、まだまだ工夫の余地がありそうですね。

…う~ん、道のりはまだまだ長そう…。

突如黒い直方体が落下して来て、劇的に向上する方法とか思いつくようになったりして欲しいものです(←早速ヘタれてる)。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2010/01/post-239b.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

« プログラマー的デザイン表現(5) | トップページ | 文章力トレーニング »

プログラマー」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: すべての色ふたたび績まるるを待つ:

« プログラマー的デザイン表現(5) | トップページ | 文章力トレーニング »