Quantcast
Channel: ずるやすみねこのリサイズ研究
Viewing all articles
Browse latest Browse all 1278

RGB空間で、広がりが大きい方向に座標軸を向けてメディアンカット

$
0
0
メディアンカットに久々にとりくんだ。
まず画像をRGB3軸の色空間にプロットしたときに広がりが大きい方向に、座標軸を回転させることを
行ってからメディアンカットを行った。
結果は良好である。
そのあとKMEANすると、かなりよい。

広がりが大きい方向に座標軸を向ける手法は、主成分分析における、第一主成分の方向ベクトルを求めて、

座標軸をその方向に回転させて行った。

すると最悪で255√2の値をとるのと、重心を中心に回転するので、マイナスの値をとる場合がある。

そこでオフセット400をたして、必ず正の整数になるようにした。

ヒストグラム配列は800x800x800とった。-400~400の値をとってもヒストグラムをつくれると

いうわけである。

おじさんのメディアンカットは、もう少しソースを修正しなくては、ならない。

パレットに所属する色が0個になったとき、その領域を削除して、さらに分割するというアルゴリズムに

なっているのだが、それでも、0個になることがあるというバグがある。現在は暫定的に、所属画素数

が0個になったパレットを再び乱数できめて、KMEANをかけて、乱数がはずれた値をだすと、

再びパレットの所属色は0になる。

KMEANをイテレーションするたびに乱数でパレットを割り当て、あたりだと、所属色が0個の

パレットが減る。イテレーションしていくと256個のパレットが割り当てられる

画像によっては、100回イテレーションしても254個の色しか割り当てられないことがある。

このパレットに所属する色が0個になるバグの原因をつきとめないと、きがすまないので、ログを

バリバリにだしてデバッグしていこうと思ってます。ちなみに、乱数系列を初期化してないので、

毎回違う画像ができるということはないです。

一応必ず、256色のパレットが選択されるようにプログラムを修正した。

256にパレットの数が満たない場合、乱数でパレットを割り当て、イテレーションするごとにだん

だんパレット数が256に近づいていく。256に達したらさらに50回イテレーションして、KMEAN

ループを抜けるようにプログラムを修正した。色距離が近いピクセルが多い画像だと、256にみたない

色数のパレットが選ばれてしまう。なぜなら、画素とパレットの色距離が近いため、隣のパレットの

方が近くなってしまうことが起こって、パレットが256決まっても、パレットの所属色数が0になっ

てしまうようである。

ようやく、必ずパレットが256色選ばれるようになった。しかし、KMEANするとパレットが減って

しまう。乱数でパレットを割り当てると、256色になるということは最適化が甘いということだと

思うが、これは、第二主成分軸方向ベクトル方向にも軸を選んだらどうなるかである。

なお、ボックスの所属画素数が最大のボックスを次に分割すると、1点に同じ色がたくさん分布して

いると、体積1のボックスになって、それ以上分割できないのに何度もトライしてで無限ループに

入ってしまう。そこで、体積が1より大きいボックスと条件を加えたら、結果が悪くなった。

そこで、体積が一番大きいものを分割するというアルゴリズムに変更したら、問題は回避できた。

しかし、256のパレットが選ばれるものの、KMEANSをかけると色が減ってしまう。そこで

乱数で残りのパレットを割り当て、あたりが出て、256個のパレットになって、KMEANループ50回で

ループを抜けるというアルゴリズムにした。再帰的主成分軸2分割方よりよい場合もあるし、悪い場合も

あり、万能ではない。今のところベストは、ベクターにあげたずるねこの画像減色!256色にするよ

003がよいようである。padieはKMEANを加えればさらによくなる可能性を秘めている。IZYNESの改変を

行うこともいつかやってみたい。

Viewing all articles
Browse latest Browse all 1278

Latest Images

Trending Articles