メディアンカットによる減色

http://hp.vector.co.jp/authors/VA017815/imagekouza2.htm
メディアンというのは中央という意味で、その名の通り色空間を中央で分割していく手法。
ということで実装してみた。



どうせならこれを真似よう!てな感じで適当に実装。


分割して実装するのがめんどくさかったが、デバッグが楽だったしビジュアライズすると理解が深まるのですごくいいと思った。


http://takamatsu.cool.ne.jp/tattyu/p55/mediancut/
http://takamatsu.cool.ne.jp/tattyu/p55/mediancut/MedianCut.pde
id:mokehehe氏に説明がさっぱりしすぎてると指摘されたのでソースのリンクもつけておくw


メディアンカットするとカットした色空間がBSP木になるので、最終的に色をマップし直すときは分割したときの面より表か裏か判断してツリーを辿るだけで近似色が求められるのですごく簡単。
辿るツリーの深さを変えるだけで16色とか簡単に実装できるのもいいね。


色空間を565の16bitにしたせいもあってあんまり綺麗じゃないね。。
proce55ingはユーザーに割り当てられてるメモリがそんなに大きくないっぽく、色空間を24bit(た64MB)にできなかった。


近似色を求める段階で発生した誤差は誤差拡散するだけでかなり綺麗になると思う。
というか誤差拡散するようにしてみた。


α値込みの時は4次元の色空間でやればいいのかな?
32bitをフルにマップすると16GBとかでかすぎだな。565+8の24bitとかかな。


あと分割面を割り当てるときの軸の求め方は主成分分析して最初の主軸を出すといいらしい。


減色は奥が深いぜ。。。