Я пытаюсь извлечь матрицу 3x3 вращения из матрицы покоя 3x4, которую я имею. Однако два значения отличаются друг от друга, хотя у меня очень простая настройка кода одна на другую. Я стучу головой о стену, потому что я понятия не имею, почему это происходит. Вот код:Не удается определить логическую ошибку, связанную с установкой матрицы вращения
std::cout << "Camera pose matrix from optical flow homography" << std::endl;
for (int e = 0; e < pose.rows; e++) {
for (int f = 0; f < pose.cols; f++) {
std::cout << pose.at<double>(e,f) << " " << e << " " << f;
std::cout << " ";
}
std::cout << "\n" << std::endl;
}
std::cout << "Creating rotation matrix" << std::endl;
Mat rotvec = Mat::eye(3, 3, CV_32FC1);
for (int s = 0; s < pose.rows; s++) {
for (int g = 0; g < pose.cols-1; g++) {
rotvec.at<double>(s, g) = pose.at<double>(s,g);
std::cout << rotvec.at<double>(s,g) << " " << s << " " << g;
std::cout << " ";
}
std::cout << "\n" << std::endl;
}
std::cout << "Rotation matrix" << std::endl;
for (int e = 0; e < pose.rows; e++) {
for (int f = 0; f < pose.cols-1; f++) {
std::cout << rotvec.at<double>(e,f) << " " << e << " " << f;
std::cout << " ";
std::cout << pose.at<double>(e,f) << " " << e << " " << f;
std::cout << " ";
}
std::cout << "\n" << std::endl;
}
Вот результат:
Camera pose matrix from optical flow homography
5.26354e-315 0 0 0 0 1 0.0078125 0 2 0 0 3
0.0078125 1 0 0 1 1 0 1 2 5.26354e-315 1 3
0 2 0 5.26354e-315 2 1 1.97626e-323 2 2 7.64868e-309 2 3
Creating rotation matrix
5.26354e-315 0 0 0 0 1 0.0078125 0 2
0.0078125 1 0 0 1 1 0 1 2
0 2 0 5.26354e-315 2 1 1.97626e-323 2 2
Rotation matrix
5.26354e-315 0 0 5.26354e-315 0 0 0 0 1 0 0 1 5.26354e-315 0 2 0.0078125 0 2
0.0078125 1 0 0.0078125 1 0 0 1 1 0 1 1 0.0078125 1 2 0 1 2
0 2 0 0 2 0 5.26354e-315 2 1 5.26354e-315 2 1 1.97626e-323 2 2 1.97626e-323 2 2
Здесь вы можете увидеть, что я пытаюсь сохранить первые три столбца представляют в rotvec матрицу. Когда я фактически устанавливаю матрицу вращения равную позе для этих трех столбцов, я получаю правильную матрицу, так как вторая матрица равна первым трем столбцам первой матрицы. Однако, когда я снова проверю матрицу вращения, (третья матрица), это не то же самое, что и результат, требуемый для координат (0, 2) и (1, 2). (Я вывел номер матрицы rotvec рядом с номером матрицы позы, и вы можете видеть, что в этих координатах числа не совпадают). Я не уверен, почему это происходит, может кто-то, пожалуйста, помогите мне?
'Mat rotvec = Mat :: eye (3, 3, CV_32FC1)' <- это * float * Mat, вы не должны иметь к нему доступ: 'rotvec.at (s, g)' –
berak
Should Я использую 'rotvec.at (s, g)'? –
ksivakumar
yes;) ........ – berak