Точечный продукт Matx33d не работает в OpenCV

мой print функция определяется как:

void print(std::string matname, cv::Matx33d A) {
fprintf(stdout, "%s = [\n", matname.c_str());
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
fprintf(stdout, "%15.10lf", A(i,j));
}
fprintf(stdout, "\n");
}
fprintf(stdout, "];\n");
}

и я разработал матрицу H и использовал его в следующем коде:

print("H", H);
cv::Matx33d Hinv = H.inv();
print("H^-1", Hinv);

cv::Matx33d HdHinv(H.ddot(Hinv));
print("H*H^-1", HdHinv);

cv::Matx33d HinvdH(Hinv.ddot(H));
print("H^-1*H", HinvdH);

Тем не менее, вывод выглядит следующим образом:

H = [
0.0386192492   0.1756336675   0.0245675072
0.1756336675   1.3649487597  -0.2727645303
0.0245675072  -0.2727645303  -0.5635269575
];
H^-1 = [
45.9140372920  -5.0221718200   4.4325541956
-5.0221718200   1.2173491959  -0.8081812555
4.4325541956  -0.8081812555  -1.1901116767
];
H*H^-1 = [
3.0000000000   0.0000000000   0.0000000000
0.0000000000   0.0000000000   0.0000000000
0.0000000000   0.0000000000   0.0000000000
];
H^-1*H = [
3.0000000000   0.0000000000   0.0000000000
0.0000000000   0.0000000000   0.0000000000
0.0000000000   0.0000000000   0.0000000000
];

Кажется, что обратное работает правильно, но почему я получаю эти значения от точечного продукта? Я использую ddot неправильно? Я проверил этот точечный продукт в Matlab и я получаю единичную матрицу (до 10 десятичных знаков точности), поэтому я считаю, что H а также Hinv генерируются правильно.

0

Решение

«Dot product»! = «Матричное умножение». По факту, cv::Matx33d::ddot () даже не возвращает матрицу, а скаляр. Я не пробовал это, но, вероятно, operator* будет делать то, что вы собираетесь — вот так:

cv::Matx33d HdHinv = H * Hinv;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]