我在OpenCV中有一个非方矩阵。 我想计算它的等级。 我知道你需要进行SVD分解并计算行或其中一个部分?不确定... 我真的可以在OpenCV(C / C ++)中使用代码示例,因为我有太多的空间来制作错误...... 我找到了这个帖子...... opencv calculate matrix rank
但它没有代码示例......
所以,如果没有代码示例,你可以解释一下在OpenCV中找到非方阵的排名的步骤吗?
答案 0 :(得分: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;
}