2

行列の階数を見つけようとしています。matlabでは、これはかなり簡単ですが、私はVisual Studio 2008(c ++)を使用しています。最近openCVをインストールしましたが、openCVを使用して行列のランクを取得する方法がわからない場合を除いて、これまでのほとんどの行列演算で機能します。オンラインでの調査で、明らかにcvSVDでランク http://www.emgu.com/wiki/files/1.3.0.0/html/55d6f4d2-223d-8c55-2770-2b6a9c6eefa2.htmが得られることがわかりました。

しかし、cvSVDがこの特定のプロパティをどのように返すかはわかりません。openCVからマトリックスランクを取得するためのアイデアはありますか?

ありがとう。

4

1 に答える 1

2

以下を読んで

http://en.wikipedia.org/wiki/Singular_value_decomposition#Applications_of_the_SVD

「範囲、ヌルスペース、ランク」セクションでは、特異値からランクを取得する方法について説明しています。このページの引用:

結果として、Mのランクはゼロ以外の特異値の数に等しくなります

したがって、基本的には、ゼロ以外の特異値の数を数えることができ、それがランクです。質問で提供するリンクによると、opencvのSVD計算関数は、特異値の行列またはベクトルを返す必要があります。それが行列の場合、特異値はこの行列の主対角線上にあります。ここからは大丈夫です。もっと簡単な方法があるかもしれませんが、私はopencvに精通していません。

于 2012-07-18T18:51:42.500 に答える