OpenCV SVD возвращает результат, отличный от MATLAB

Я использую функцию 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, и вы можете помочь мне решить эту проблему?

Спасибо.


person user2168    schedule 17.05.2014    source источник


Ответы (2)


Это может быть связано с тем, что сингулярные значения упорядочены по-разному, т. Е. В A = u w vt диагональная матрица w (сингулярных значений) имеет элементы, упорядоченные иначе, чем в MATLAB. В MATLAB сингулярные числа упорядочены по главной диагонали в порядке убывания.

person vsoftco    schedule 17.05.2014

Разложение по единственному значению определено только до знака; знаки U и V произвольны, и если они различаются между MATLAB и OpenCV, это не указывает на проблему.

person Sam Roberts    schedule 17.05.2014