c++ - OpenCV SVD 返回与 MATLAB 不同的结果

标签 c++ matlab opencv svd

<分区>

我正在使用 SVD 函数来获取值。 在我的 Opencv 中,我写了

Mat w, u, vt;
SVD::compute(A, w, u, vt);

将值与 MATLAB 进行比较后,似乎 u 和 vt 矩阵与 MATLAB 返回的不匹配。这些值实际上匹配,但有时 U(:1) 和 VT(:1) 从 OpenCV 返回的结果中取反。有时,VT 元素会被取反和翻转。虽然 U*VT 返回与 MATLAB 相同的值,但 U 和 VT 本身与 MATLAB 不同(随机),我不确定是什么原因造成的。我正在使用 OpenCV 2.4,你能帮我解决这个问题吗?

谢谢。

最佳答案

这可能是因为奇异值的排序不同,即在 A = u w vt 中,对角矩阵 w(奇异值)的条目排序不同于MATLAB。在 MATLAB 中,奇异值在主对角线上按降序排列。

关于c++ - OpenCV SVD 返回与 MATLAB 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23707755/

相关文章:

matlab调用scala函数

visual-studio-2010 - VS10上的OpenCV打开然后关闭

c++ - 如何将 char 分配给 const char*

c++ - 模板整数参数构造函数

c++ - 使用不可复制值类型进行 boost::fusion::map 初始化的生成器

matlab - 使用 Matlab 在世界地图上绘制纬度和经度网格

c++ - 使一个类或结构成为所有模板实例化类的 friend ?

arrays - 根据计数进行逐元素数组复制

c - OpenCV 2.4.4 和 GPU 支持人脸检测

python - OpenCV,更改为图像中最接近的颜色