1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-31 08:13:04 +04:00

Merge branch 4.x

This commit is contained in:
Alexander Smorkalov
2024-02-28 17:57:46 +03:00
14 changed files with 450 additions and 102 deletions
+6 -6
View File
@@ -934,8 +934,8 @@ cv::Vec3d cv::RQDecomp3x3( InputArray _Marr,
Qx = ( 0 c s ), c = m33/sqrt(m32^2 + m33^2), s = m32/sqrt(m32^2 + m33^2)
( 0 -s c )
*/
s = M(2, 1);
c = M(2, 2);
s = std::abs(M(2, 1)) > DBL_EPSILON ? M(2, 1): 0.;
c = std::abs(M(2, 1)) > DBL_EPSILON ? M(2, 2): 1.;
z = 1./std::sqrt(c * c + s * s + DBL_EPSILON);
c *= z;
s *= z;
@@ -952,8 +952,8 @@ cv::Vec3d cv::RQDecomp3x3( InputArray _Marr,
Qy = ( 0 1 0 ), c = m33/sqrt(m31^2 + m33^2), s = -m31/sqrt(m31^2 + m33^2)
( s 0 c )
*/
s = -R(2, 0);
c = R(2, 2);
s = std::abs(R(2, 0)) > DBL_EPSILON ? -R(2, 0): 0.;
c = std::abs(R(2, 0)) > DBL_EPSILON ? R(2, 2): 1.;
z = 1./std::sqrt(c * c + s * s + DBL_EPSILON);
c *= z;
s *= z;
@@ -971,8 +971,8 @@ cv::Vec3d cv::RQDecomp3x3( InputArray _Marr,
( 0 0 1 )
*/
s = M(1, 0);
c = M(1, 1);
s = std::abs(M(1, 0)) > DBL_EPSILON ? M(1, 0): 0.;
c = std::abs(M(1, 0)) > DBL_EPSILON ? M(1, 1): 1.;
z = 1./std::sqrt(c * c + s * s + DBL_EPSILON);
c *= z;
s *= z;
@@ -141,4 +141,23 @@ TEST(Calib3d_DecomposeProjectionMatrix, accuracy)
test.safe_run();
}
TEST(Calib3d_DecomposeProjectionMatrix, degenerate_cases)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
cv::Matx34d P;
P(0, i) = 1;
P(1, (i + j + 1) % 3) = 1;
P(2, (i + 2 * j + 2) % 3) = 1;
cv::Matx33d K, R;
cv::Vec4d t;
decomposeProjectionMatrix(P, K, R, t);
EXPECT_LT(cv::norm(K * R, P.get_minor<3, 3>(0, 0), cv::NORM_INF), 1e-6);
}
}
}
}} // namespace