2011年9月 6日 (火) われら<積>を盗みし者
おはようございます。
けだるい朝に、“求める”だの“求められる”だのを連発した文章をしたためながら、やや官能的な気分になっちゃってます、本日の当番、プログラマーのM.L.Kです(LはLechのLです。Lech!&Lech!)。
さてさて、相変わらずメディアンカットでございます。
前回は、主成分分析に必要な固有ベクトルを求めるために、3次方程式の解の計算について扱いました。
なんだか面倒な計算をくどくどと説明したにも関わらず、実は主成分分析について言えば、道半ばといったところです。
つ~か、肝心の固有ベクトルはまだ求められていないし!
というわけでその続きです。
前回のブログでは、3チャンネルの分割をするには、「3次方程式を解いて、3元の連立方程式を解かなくっちゃ」とか、「大変だわ~」的な事をしれっと言っていたんですが、アレ、嘘です(しれっ)。
嘘ちゅ~か、3元の連立方程式を解くのは、いわゆる真っ当なやり方でして、実際のところ、ちょっとズルすることができます。
例えば、3×3の行列Aを、
としたとして、Aの固有値のひとつをλ、その固有ベクトルを(x,y,z)とすると、以下の関係が成り立ちます。
つまり、これが3元の連立方程式、
となるワケですね。
まあ、素直にこの連立方程式を解けば良いようなものなのですが、コンピュータで連立方程式を解くには、通常、逆行列を求めることになるので、ちょっと面倒臭いです。
掛け算いっぱいする必要があるし。
で、何とか計算を減らそうと足掻くワケなのですが、実は、3×3行列の3つの固有値、λ0、λ1、λ2 が判っていたなら、その固有ベクトルの1つ、例えば、λ0の固有ベクトルは、
(A-λ1E)(A-λ2E)
の列ベクトルによって求められるらしいのです(へぇ~!)。
つまり、
なので、この行列の積の結果を列をベクトルとしてとりだすということですから(取り出すのは3つある列のいずれでも構いません)
になります(上の例では第1列を取り出しました)。
このようにして求められた固有ベクトルを正規化した結果と、それぞれの色のチャンネル値をベクトル化したものとの内積値を求めることによって、その色が分布の中央からどれくらい離れているかを示す値を得ることができます。
(このあたりの説明は、以前のブログ“The First Flight of Vector Eigen”を参照して下さいね)
あとは、この値使ってメディアンカットを行なうだけというわけです!
で、結果がこれだっ!
あれれ~?なにかへんだよ~?
ちなみにオリジナルはこれ。
う~ん。こりゃ困ったね。
一般的に「あれれ~」は、実のところ答えが分かっているにも関わらず、周囲に対して敢えて疑問を提起する際に使用されるのが適切な用法とされていますので、もう今更な白々しいカンジなんですけど、そういうワケで次回に続きます。
| 固定リンク | コメント (0) | トラックバック (0)
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。
コメント