Commit a1d66714 authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

fixed bug #1370

parent 39533a0b
...@@ -674,7 +674,7 @@ JacobiSVDImpl_(_Tp* At, size_t astep, _Tp* W, _Tp* Vt, size_t vstep, int m, int ...@@ -674,7 +674,7 @@ JacobiSVDImpl_(_Tp* At, size_t astep, _Tp* W, _Tp* Vt, size_t vstep, int m, int
if( !Vt ) if( !Vt )
return; return;
RNG rng; RNG rng(0x12345678);
for( i = 0; i < n1; i++ ) for( i = 0; i < n1; i++ )
{ {
s = i < n ? W[i] : 0; s = i < n ? W[i] : 0;
...@@ -687,7 +687,7 @@ JacobiSVDImpl_(_Tp* At, size_t astep, _Tp* W, _Tp* Vt, size_t vstep, int m, int ...@@ -687,7 +687,7 @@ JacobiSVDImpl_(_Tp* At, size_t astep, _Tp* W, _Tp* Vt, size_t vstep, int m, int
const _Tp val0 = (_Tp)(1./m); const _Tp val0 = (_Tp)(1./m);
for( k = 0; k < m; k++ ) for( k = 0; k < m; k++ )
{ {
_Tp val = (rng.next() & 256) ? val0 : -val0; _Tp val = (rng.next() & 256) != 0 ? val0 : -val0;
At[i*astep + k] = val; At[i*astep + k] = val;
} }
for( iter = 0; iter < 2; iter++ ) for( iter = 0; iter < 2; iter++ )
...@@ -1476,7 +1476,10 @@ static void _SVDcompute( InputArray _aarr, OutputArray _w, ...@@ -1476,7 +1476,10 @@ static void _SVDcompute( InputArray _aarr, OutputArray _w,
if( compute_uv ) if( compute_uv )
temp_v = Mat(n, n, type, alignPtr(buf + urows*astep + n*esz, 16), vstep); temp_v = Mat(n, n, type, alignPtr(buf + urows*astep + n*esz, 16), vstep);
if( urows > n )
temp_u = Scalar::all(0);
if( !at ) if( !at )
transpose(src, temp_a); transpose(src, temp_a);
else else
...@@ -1484,12 +1487,12 @@ static void _SVDcompute( InputArray _aarr, OutputArray _w, ...@@ -1484,12 +1487,12 @@ static void _SVDcompute( InputArray _aarr, OutputArray _w,
if( type == CV_32F ) if( type == CV_32F )
{ {
JacobiSVD(temp_a.ptr<float>(), temp_a.step, temp_w.ptr<float>(), JacobiSVD(temp_a.ptr<float>(), temp_u.step, temp_w.ptr<float>(),
temp_v.ptr<float>(), temp_v.step, m, n, compute_uv ? urows : 0); temp_v.ptr<float>(), temp_v.step, m, n, compute_uv ? urows : 0);
} }
else else
{ {
JacobiSVD(temp_a.ptr<double>(), temp_a.step, temp_w.ptr<double>(), JacobiSVD(temp_a.ptr<double>(), temp_u.step, temp_w.ptr<double>(),
temp_v.ptr<double>(), temp_v.step, m, n, compute_uv ? urows : 0); temp_v.ptr<double>(), temp_v.step, m, n, compute_uv ? urows : 0);
} }
temp_w.copyTo(_w); temp_w.copyTo(_w);
......
...@@ -877,8 +877,10 @@ Mat _InputArray::getMat(int i) const ...@@ -877,8 +877,10 @@ Mat _InputArray::getMat(int i) const
if( k == MAT ) if( k == MAT )
{ {
CV_Assert( i < 0 ); const Mat* m = (const Mat*)obj;
return *(const Mat*)obj; if( i < 0 )
return *m;
return m->row(i);
} }
if( k == EXPR ) if( k == EXPR )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment