@@ -544,27 +544,27 @@ cv::RotatedRect cv::fitEllipseAMS( InputArray _points )
544
544
// Select the eigen vector {a,b,c,d,e} which has the lowest eigenvalue
545
545
int minpos = 0 ;
546
546
double normi, normEVali, normMinpos, normEValMinpos;
547
- normMinpos = sqrt (eVec.at <double >(0 , minpos)*eVec.at <double >(0 , minpos) + eVec.at <double >(1 , minpos)*eVec.at <double >(1 , minpos) + \
548
- eVec.at <double >(2 , minpos)*eVec.at <double >(2 , minpos) + eVec.at <double >(3 , minpos)*eVec.at <double >(3 , minpos) + \
549
- eVec.at <double >(4 , minpos)*eVec.at <double >(4 , minpos) );
550
- normEValMinpos = eVal.at <double >(0 , minpos) * normMinpos;
547
+ normMinpos = sqrt (eVec.at <double >(minpos, 0 )*eVec.at <double >(minpos, 0 ) + eVec.at <double >(minpos, 1 )*eVec.at <double >(minpos, 1 ) + \
548
+ eVec.at <double >(minpos, 2 )*eVec.at <double >(minpos, 2 ) + eVec.at <double >(minpos, 3 )*eVec.at <double >(minpos, 3 ) + \
549
+ eVec.at <double >(minpos, 4 )*eVec.at <double >(minpos, 4 ) );
550
+ normEValMinpos = eVal.at <double >(minpos, 0 ) * normMinpos;
551
551
for (i=1 ; i<5 ; i++) {
552
- normi = sqrt (eVec.at <double >(0 ,i )*eVec.at <double >(0 ,i ) + eVec.at <double >(1 ,i )*eVec.at <double >(1 ,i ) + \
553
- eVec.at <double >(2 ,i )*eVec.at <double >(2 ,i ) + eVec.at <double >(3 ,i )*eVec.at <double >(3 ,i ) + \
554
- eVec.at <double >(4 ,i )*eVec.at <double >(4 ,i ) );
555
- normEVali = eVal.at <double >(0 ,i ) * normi;
552
+ normi = sqrt (eVec.at <double >(i, 0 )*eVec.at <double >(i, 0 ) + eVec.at <double >(i, 1 )*eVec.at <double >(i, 1 ) + \
553
+ eVec.at <double >(i, 2 )*eVec.at <double >(i, 2 ) + eVec.at <double >(i, 3 )*eVec.at <double >(i, 3 ) + \
554
+ eVec.at <double >(i, 4 )*eVec.at <double >(i, 4 ) );
555
+ normEVali = eVal.at <double >(i, 0 ) * normi;
556
556
if (normEVali < normEValMinpos) {
557
557
minpos = i;
558
558
normMinpos=normi;
559
559
normEValMinpos=normEVali;
560
560
}
561
561
};
562
562
563
- pVec (0 ) =eVec.at <double >(0 , minpos) / normMinpos;
564
- pVec (1 ) =eVec.at <double >(1 , minpos) / normMinpos;
565
- pVec (2 ) =eVec.at <double >(2 , minpos) / normMinpos;
566
- pVec (3 ) =eVec.at <double >(3 , minpos) / normMinpos;
567
- pVec (4 ) =eVec.at <double >(4 , minpos) / normMinpos;
563
+ pVec (0 ) =eVec.at <double >(minpos, 0 ) / normMinpos;
564
+ pVec (1 ) =eVec.at <double >(minpos, 1 ) / normMinpos;
565
+ pVec (2 ) =eVec.at <double >(minpos, 2 ) / normMinpos;
566
+ pVec (3 ) =eVec.at <double >(minpos, 3 ) / normMinpos;
567
+ pVec (4 ) =eVec.at <double >(minpos, 4 ) / normMinpos;
568
568
569
569
coeffs (0 ) =pVec (0 ) ;
570
570
coeffs (1 ) =pVec (1 ) ;
@@ -715,19 +715,19 @@ cv::RotatedRect cv::fitEllipseDirect( InputArray _points )
715
715
716
716
// Select the eigen vector {a,b,c} which satisfies 4ac-b^2 > 0
717
717
double cond[3 ];
718
- cond[0 ]=(4.0 * eVec.at <double >(0 ,0 ) * eVec.at <double >(2 , 0 ) - eVec.at <double >(1 , 0 ) * eVec.at <double >(1 , 0 ));
719
- cond[1 ]=(4.0 * eVec.at <double >(0 , 1 ) * eVec.at <double >(2 , 1 ) - eVec.at <double >(1 ,1 ) * eVec.at <double >(1 ,1 ));
720
- cond[2 ]=(4.0 * eVec.at <double >(0 , 2 ) * eVec.at <double >(2 ,2 ) - eVec.at <double >(1 , 2 ) * eVec.at <double >(1 , 2 ));
718
+ cond[0 ]=(4.0 * eVec.at <double >(0 ,0 ) * eVec.at <double >(0 , 2 ) - eVec.at <double >(0 , 1 ) * eVec.at <double >(0 , 1 ));
719
+ cond[1 ]=(4.0 * eVec.at <double >(1 , 0 ) * eVec.at <double >(1 , 2 ) - eVec.at <double >(1 ,1 ) * eVec.at <double >(1 ,1 ));
720
+ cond[2 ]=(4.0 * eVec.at <double >(2 , 0 ) * eVec.at <double >(2 ,2 ) - eVec.at <double >(2 , 1 ) * eVec.at <double >(2 , 1 ));
721
721
if (cond[0 ]<cond[1 ]) {
722
722
i = (cond[1 ]<cond[2 ]) ? 2 : 1 ;
723
723
} else {
724
724
i = (cond[0 ]<cond[2 ]) ? 2 : 0 ;
725
725
}
726
- double norm = std::sqrt (eVec.at <double >(0 ,i )*eVec.at <double >(0 ,i ) + eVec.at <double >(1 ,i )*eVec.at <double >(1 ,i ) + eVec.at <double >(2 ,i )*eVec.at <double >(2 ,i ));
727
- if (((eVec.at <double >(0 ,i )<0.0 ? -1 : 1 ) * (eVec.at <double >(1 ,i )<0.0 ? -1 : 1 ) * (eVec.at <double >(2 ,i )<0.0 ? -1 : 1 )) <= 0.0 ) {
726
+ double norm = std::sqrt (eVec.at <double >(i, 0 )*eVec.at <double >(i, 0 ) + eVec.at <double >(i, 1 )*eVec.at <double >(i, 1 ) + eVec.at <double >(i, 2 )*eVec.at <double >(i, 2 ));
727
+ if (((eVec.at <double >(i, 0 )<0.0 ? -1 : 1 ) * (eVec.at <double >(i, 1 )<0.0 ? -1 : 1 ) * (eVec.at <double >(i, 2 )<0.0 ? -1 : 1 )) <= 0.0 ) {
728
728
norm=-1.0 *norm;
729
729
}
730
- pVec (0 ) =eVec.at <double >(0 ,i )/norm; pVec (1 ) =eVec.at <double >(1 ,i )/norm;pVec (2 ) =eVec.at <double >(2 ,i )/norm;
730
+ pVec (0 ) =eVec.at <double >(i, 0 )/norm; pVec (1 ) =eVec.at <double >(i, 1 )/norm;pVec (2 ) =eVec.at <double >(i, 2 )/norm;
731
731
732
732
// Q = (TM . pVec)/Ts;
733
733
Q (0 ,0 ) = (TM (0 ,0 )*pVec (0 ) +TM (0 ,1 )*pVec (1 ) +TM (0 ,2 )*pVec (2 ) )/Ts;
0 commit comments