2016-06-18 7 views
0

私はOpenCVで非正方行列を持っています。 私はそれのランクを計算したいと思います。 SVD分解を行い、行数を計算する必要があると理解しましたか? ...私はこのスレッド... opencv calculate matrix rankOpenCVでマトリックスランクを計算するには?

を見つけ、あまりにも多くの部屋があるので、私はエラーを作るため 私は本当に ...、OpenCVの(C/C++)のコード例を使用することができます。しかし、それは確かにありませんコード例がありません...

コード例がない場合は、OpenCVで非正方行列のランクを見つける手順を説明できますか?

答えて

0

hereのように、非ゼロの特異値の数を見つける必要があります。ですから、まずSVD分解で特異値を見つけてから、非ゼロ値の数を数えます。数値エラーを処理するために小さなしきい値を適用する必要があります。

#include <opencv2\opencv.hpp> 
using namespace cv; 

int main() 
{ 
    // Your matrix 
    Mat1d M = (Mat1d(4,5) << 1, 0, 0, 0, 2, 
           0, 0, 3, 0, 0, 
           0, 0, 0, 0, 0, 
           0, 2, 0, 0, 0); 

    // Compute SVD 
    Mat1d w, u, vt; 
    SVD::compute(M, w, u, vt); 

    // w is the matrix of singular values 
    // Find non zero singular values. 

    // Use a small threshold to account for numeric errors 
    Mat1b nonZeroSingularValues = w > 0.0001; 

    // Count the number of non zero 
    int rank = countNonZero(nonZeroSingularValues); 

    return 0; 
} 
関連する問題