void testAffine(const Mat& img1) { Mat img2; // Warp original image Matx<double, 2, 2> linTr(1., 0.1, -0.01, 1.); Vec<double, 2> shift(1., 1.); MapAffine mapTest(linTr, shift); mapTest.warp(img1, img2); showDifference(img1, img2, DIFF_IM); // Register MapperGradAffine mapper; MapperPyramid mappPyr(mapper); Ptr<Map> mapPtr; mappPyr.calculate(img1, img2, mapPtr); // Print result MapAffine* mapAff = dynamic_cast<MapAffine*>(mapPtr.get()); cout << endl << "--- Testing affine mapper ---" << endl; cout << Mat(linTr) << endl; cout << Mat(shift) << endl; cout << Mat(mapAff->getLinTr()) << endl; cout << Mat(mapAff->getShift()) << endl; // Display registration accuracy Mat dest; mapAff->inverseWarp(img2, dest); showDifference(img1, dest, DIFF_REGPIX_IM); waitKey(0); cvDestroyWindow(DIFF_IM); cvDestroyWindow(DIFF_REGPIX_IM); }
void testSimilarity(const Mat& img1) { Mat img2; // Warp original image double theta = 3*M_PI/180; double scale = 0.95; double a = scale*cos(theta); double b = scale*sin(theta); Matx<double, 2, 2> linTr(a, -b, b, a); Vec<double, 2> shift(5., 5.); MapAffine mapTest(linTr, shift); mapTest.warp(img1, img2); showDifference(img1, img2, DIFF_IM); // Register MapperGradSimilar mapper; MapperPyramid mappPyr(mapper); Ptr<Map> mapPtr; mappPyr.calculate(img1, img2, mapPtr); // Print result MapAffine* mapAff = dynamic_cast<MapAffine*>(mapPtr.get()); cout << endl << "--- Testing similarity mapper ---" << endl; cout << Mat(linTr) << endl; cout << Mat(shift) << endl; cout << Mat(mapAff->getLinTr()) << endl; cout << Mat(mapAff->getShift()) << endl; // Display registration accuracy Mat dest; mapAff->inverseWarp(img2, dest); showDifference(img1, dest, DIFF_REGPIX_IM); waitKey(0); cvDestroyWindow(DIFF_IM); cvDestroyWindow(DIFF_REGPIX_IM); }
void testEuclidean(const Mat& img1) { Mat img2; // Warp original image double theta = 3*M_PI/180; double cosT = cos(theta); double sinT = sin(theta); Matx<double, 2, 2> linTr(cosT, -sinT, sinT, cosT); Vec<double, 2> shift(5., 5.); MapAffine mapTest(linTr, shift); mapTest.warp(img1, img2); showDifference(img1, img2, DIFF_IM); // Register MapperGradEuclid mapper; MapperPyramid mappPyr(mapper); Ptr<Map> mapPtr(0); mappPyr.calculate(img1, img2, mapPtr); // Print result MapAffine* mapAff = dynamic_cast<MapAffine*>(mapPtr.obj); cout << endl << "--- Testing Euclidean mapper ---" << endl; cout << Mat(linTr) << endl; cout << Mat(shift) << endl; cout << Mat(mapAff->getLinTr()) << endl; cout << Mat(mapAff->getShift()) << endl; // Display registration accuracy Mat dest; mapAff->inverseWarp(img2, dest); showDifference(img1, dest, DIFF_REGPIX_IM); waitKey(0); cvDestroyWindow(DIFF_IM); cvDestroyWindow(DIFF_REGPIX_IM); }