diff --git a/src/phg/sift/sift.cpp b/src/phg/sift/sift.cpp index 7204771..b340b46 100755 --- a/src/phg/sift/sift.cpp +++ b/src/phg/sift/sift.cpp @@ -16,6 +16,9 @@ // 3) https://github.com/opencv/opencv/blob/1834eed8098aa2c595f4d1099eeaa0992ce8b321/modules/features2d/src/sift.dispatch.cpp // 4) https://github.com/opencv/opencv/blob/1834eed8098aa2c595f4d1099eeaa0992ce8b321/modules/features2d/src/sift.simd.hpp +#define ENABLE_EXACT_NFEATURES_RECOVERY 1 +#define ENABLE_INCREMENTAL_OCTAVE_GAUSSIAN_BLUR 0 + namespace { cv::Mat upsample2x(const cv::Mat& src) @@ -108,16 +111,22 @@ std::vector phg::buildOctaves(const cv::Mat& img, const phg:: // можно подумать, как сделать эффективнее - для построения n+1 слоя доблюревать уже поблюренный n-ый слой, так чтобы в итоге получилась такая же сигма // это будет немного быстрее, тк нужно более маленькое ядро свертки на каждый шаг for (int i = 1; i < n_layers; i++) { - // TODO double sigma_layer = sigma0 * корень из двух нужной степени, чтобы при i==s получали удвоение базового блюра; - // // вычтем sigma0 чтобы размыть ровно до нужной суммарной сигмы - // TODO sigma_layer = ... (вычитаем как в sigma base); - // cv::GaussianBlur(oct.layers[0], oct.layers[i], cv::Size(), sigma_layer, sigma_layer); + double sigma_layer = sigma0 * std::pow(2.0, (double)i / s); +#if ENABLE_INCREMENTAL_OCTAVE_GAUSSIAN_BLUR + double prev_sigma_layer = sigma0 * std::pow(2.0, (double)(i - 1) / s); + sigma_layer = std::sqrt(sigma_layer * sigma_layer - prev_sigma_layer * prev_sigma_layer); + cv::GaussianBlur(oct.layers[i - 1], oct.layers[i], cv::Size(), sigma_layer, sigma_layer); +#else + // вычтем sigma0 чтобы размыть ровно до нужной суммарной сигмы + sigma_layer = std::sqrt(sigma_layer * sigma_layer - sigma0 * sigma0); + cv::GaussianBlur(oct.layers[0], oct.layers[i], cv::Size(), sigma_layer, sigma_layer); +#endif } // подготавливаем базовый слой для следующей октавы if (o + 1 < n_octaves) { // используется в opencv, формула для пересчета ключевых точек: pt_upscaled = 2^o * pt_downscaled - // TODO cv::resize(даунскейлим текущий слой в два раза, без интерполяции, просто сабсепмлинг); + base = downsample2x(oct.layers[s]); // можно использовать и downsample2x_avg(oct.layers[s]), это позволяет потом заапскейлить слои обратно до оригинального разрешения без сдвига // но потребуется везде изменить формулу для пересчета ключевых точек: pt_upscaled = (pt_downscaled + 0.5) * 2^o - 0.5 @@ -138,7 +147,9 @@ std::vector phg::buildDoG(const std::vector phg::findScaleSpaceExtrema(const std::vector phg::findScaleSpaceExtrema(const std::vector(yi, xi + 1) + cL.at(yi, xi - 1) - 2.f * resp_center; -// float dyy = TODO; -// float dss = TODO; -// -// float dxy = (cL.at(yi + 1, xi + 1) - cL.at(yi + 1, xi - 1) - cL.at(yi - 1, xi + 1) + cL.at(yi - 1, xi - 1)) * 0.25f; -// float dxs = TODO; -// float dys = TODO; + dxx = cL.at(yi, xi + 1) + cL.at(yi, xi - 1) - 2.f * resp_center; + dyy = cL.at(yi + 1, xi) + cL.at(yi - 1, xi) - 2.f * resp_center; + dss = nL.at(yi, xi) + pL.at(yi, xi) - 2.f * resp_center; + + dxy = (cL.at(yi + 1, xi + 1) - cL.at(yi + 1, xi - 1) - cL.at(yi - 1, xi + 1) + cL.at(yi - 1, xi - 1)) * 0.25f; + dxs = (nL.at(yi, xi + 1) - nL.at(yi, xi - 1) - pL.at(yi, xi + 1) + pL.at(yi, xi - 1)) * 0.25f; + dys = (nL.at(yi + 1, xi) - nL.at(yi - 1, xi) - pL.at(yi + 1, xi) + pL.at(yi - 1, xi)) * 0.25f; cv::Matx33f H(dxx, dxy, dxs, dxy, dyy, dys, dxs, dys, dss); @@ -273,21 +307,21 @@ std::vector phg::findScaleSpaceExtrema(const std::vector (r + 1.f) * (r + 1.f) / r) + break; } // скейлим координаты точек обратно до родных размеров картинки @@ -379,39 +413,42 @@ std::vector phg::computeOrientations(const std::vector(py, px + 1) - img.at(py, px - 1); -// float gy = img.at(py + 1, px) - img.at(py - 1, px); -// -// float mag = TODO; -// float angle = std::atan2(TODO); // [-pi, pi] -// -// float angle_deg = angle * 180.f / (float) CV_PI; -// if (angle_deg < 0.f) angle_deg += 360.f; -// -// // гауссово взвешивание голоса точки с затуханием к краям -// float weight = std::exp(-(TODO) / (2.f * sigma_win * sigma_win)); -// if (!params.enable_orientation_gaussian_weighting) { -// weight = 1.f; -// } -// -// // голосуем в гистограмме направлений. находим два ближайших бина и гладко распределяем голос между ними -// // в таком случае, голос попавший близко к границе между бинами, проголосует поровну за оба бина -// float bin = TODO; -// if (bin >= n_bins) bin -= n_bins; -// int bin0 = (int) bin; -// int bin1 = (bin0 + 1) % n_bins; -// -// float frac = bin - bin0; -// if (!params.enable_orientation_bin_interpolation) { -// frac = 0.f; -// } -// -// histogram[bin0] += TODO; -// histogram[bin1] += TODO; + int px = xi + dx; + int py = yi + dy; + + // градиент + float gx = img.at(py, px + 1) - img.at(py, px - 1); + float gy = img.at(py + 1, px) - img.at(py - 1, px); + + float mag = std::sqrt(gx * gx + gy * gy); + float angle = std::atan2(gy, gx); // [-pi, pi] + + float angle_deg = angle * 180.f / (float) CV_PI; + if (angle_deg < 0.f) + angle_deg += 360.f; + + // гауссово взвешивание голоса точки с затуханием к краям + float weight = std::exp(-(dx * dx + dy * dy) / (2.f * sigma_win * sigma_win)); + if (!params.enable_orientation_gaussian_weighting) { + weight = 1.f; + } + + // голосуем в гистограмме направлений. находим два ближайших бина и гладко распределяем голос между ними + // в таком случае, голос попавший близко к границе между бинами, проголосует поровну за оба бина + float bin = angle_deg * n_bins / 360.f; + if (bin >= n_bins) + bin -= n_bins; + int bin0 = (int) bin; + int bin1 = (bin0 + 1) % n_bins; + + float frac = bin - bin0; + if (!params.enable_orientation_bin_interpolation) { + frac = 0.f; + } + + float weighted_mag = mag * weight; + histogram[bin0] += weighted_mag * (1.f - frac); + histogram[bin1] += weighted_mag * frac; } } @@ -450,20 +487,24 @@ std::vector phg::computeOrientations(const std::vector a = (left + right - 2 * center) / 2 // f(1) - f(-1) = 2b -> b = (right - left) / 2 -// float offset = TODO; -// if (!params.enable_orientation_subpixel_localization) { -// offset = 0.f; -// } -// -// float bin_real = i + offset; -// if (bin_real < 0.f) bin_real += n_bins; -// if (bin_real >= n_bins) bin_real -= n_bins; -// -// float angle = bin_real * 360.f / n_bins; -// -// cv::KeyPoint new_kp = kp; -// new_kp.angle = angle; -// oriented_kpts.push_back(new_kp); + float offset = 0.f; + float denom = 2.f * (left + right - 2.f * center); + if (std::abs(denom) > 1e-7f) { + offset = (left - right) / denom; + } + if (!params.enable_orientation_subpixel_localization) { + offset = 0.f; + } + + float bin_real = i + offset; + if (bin_real < 0.f) bin_real += n_bins; + if (bin_real >= n_bins) bin_real -= n_bins; + + float angle = bin_real * 360.f / n_bins; + + cv::KeyPoint new_kp = kp; + new_kp.angle = angle; + oriented_kpts.push_back(new_kp); } } } @@ -574,11 +615,11 @@ std::pair> phg::computeDescriptors(const std: bin_o -= n_orient_bins; // семплы вблизи края патча взвешиваем с меньшим весом -// float weight = std::exp(-(TODO) / (2.f * sigma_desc * sigma_desc)); -// if (!params.enable_descriptor_gaussian_weighting) { -// weight = 1.f; -// } -// float weighted_mag = mag * weight; + float weight = std::exp(-(rot_x * rot_x + rot_y * rot_y) / (2.f * sigma_desc * sigma_desc)); + if (!params.enable_descriptor_gaussian_weighting) { + weight = 1.f; + } + float weighted_mag = mag * weight; if (params.enable_descriptor_bin_interpolation) { // размажем вклад weighted_mag по пространственным бинам и по бинам гистограммок трилинейной интерполяцией @@ -609,8 +650,8 @@ std::pair> phg::computeDescriptors(const std: io += n_orient_bins; float wo = (dio == 0) ? (1.f - fo) : fo; -// int idx = TODO; -// desc[idx] += TODO; + int idx = (iy * n_spatial_bins + ix) * n_orient_bins + io; + desc[idx] += weighted_mag * wx * wy * wo; } } } @@ -620,9 +661,8 @@ std::pair> phg::computeDescriptors(const std: int io_nearest = (int)std::round(bin_o) % n_orient_bins; if (ix_nearest >= 0 && ix_nearest < n_spatial_bins && iy_nearest >= 0 && iy_nearest < n_spatial_bins) { - // TODO uncomment -// int idx = (iy_nearest * n_spatial_bins + ix_nearest) * n_orient_bins + io_nearest; -// desc[idx] += weighted_mag; + int idx = (iy_nearest * n_spatial_bins + ix_nearest) * n_orient_bins + io_nearest; + desc[idx] += weighted_mag; } } } @@ -712,6 +752,75 @@ void phg::SIFT::detectAndCompute(const cv::Mat& img, const cv::Mat& mask, std::v savePyramid("pyramidDoG/03_dog_octave", dog, true); kpts = findScaleSpaceExtrema(dog, p, verbose_level); + +#if ENABLE_EXACT_NFEATURES_RECOVERY + // Почему раньше могли вернуть меньше чем nfeatures: + // 1) в computeOrientations() часть точек может отброситься по условию в строке 408 (если окно вышло за границы слоя), + // 2) в computeDescriptors() часть точек может отброситься по условию в строке 564 (патч дескриптора вышел за границы слоя), + // 3) а у нас пайплайн был такой: + // - находим space-scale экстремумы; + // - в selectTopKeypoints() берём топ-nfeatures из них; + // - делаем computeOrientations(), после чего у нас уже может стать меньше чем nfeatures точек (но могло стать и больше, + // если пиков ориентаций было взято несколько для одного и того же кандидата); + // - делаем selectTopKeypoints() - опять имеем <= nfeatures точек; + // - делаем computeDescriptors(), после которого у нас также может стать меньше чем nfeatures точек. + // + // Получаем, что если заранее жестко отрезать до nfeatures, "резервных" кандидатов не остается и финальный набор недобирается. + // + // Что делаем: не отрезаем :) + // Но гоняем computeOrientations() и computeDescriptors() батчами, начиная с самых сильных, чтобы не просесть по производительности. + // Если после очередного батча все еще недобор, добираем следующую порцию. + // Так мы обычно считаем почти столько же, сколько раньше, но при необходимости можем добрать до ровно nfeatures + // (если в принципе хватит валидных точек после всех фильтраций). + + std::vector extrema_kpts = std::move(kpts); + if (p.nfeatures > 0) { + std::vector ranked_idx(extrema_kpts.size()); + std::iota(ranked_idx.begin(), ranked_idx.end(), 0); + std::sort(ranked_idx.begin(), ranked_idx.end(), [&extrema_kpts](const int& a, const int& b) { + float ra = std::abs(extrema_kpts[a].response); + float rb = std::abs(extrema_kpts[b].response); + if (ra != rb) + return ra > rb; + return a < b; + }); + kpts.clear(); + desc.release(); + + size_t processed = 0; + size_t batch_size = std::max(32, p.nfeatures); + while (kpts.size() < p.nfeatures && processed < ranked_idx.size()) { + size_t next_processed = std::min(ranked_idx.size(), processed + batch_size); + std::vector batch_extrema; + batch_extrema.reserve(next_processed - processed); + for (size_t i = processed; i < next_processed; ++i) { + batch_extrema.push_back(extrema_kpts[ranked_idx[i]]); + } + + std::vector batch_oriented = computeOrientations(batch_extrema, octaves, p, verbose_level); + cv::Mat batch_desc; + std::vector batch_valid_kpts; + std::tie(batch_desc, batch_valid_kpts) = computeDescriptors(batch_oriented, octaves, p, verbose_level); + if (!batch_desc.empty()) { + desc.push_back(batch_desc); + } + + kpts.insert(kpts.end(), batch_valid_kpts.begin(), batch_valid_kpts.end()); + processed = next_processed; + if (kpts.size() < p.nfeatures) { + batch_size = std::max(32, 2 * (p.nfeatures - kpts.size())); + } + } + + if (kpts.size() > p.nfeatures) { + kpts.resize(p.nfeatures); + desc = desc.rowRange(0, p.nfeatures).clone(); + } + } else { + kpts = computeOrientations(extrema_kpts, octaves, p, verbose_level); + std::tie(desc, kpts) = computeDescriptors(kpts, octaves, p, verbose_level); + } +#else // ориентация ключевых точек это довольно дорогая операция // в случае если пользователь просит малое количество лучших точек (например, 1000, а без порога нашлось 20000), // то по производительности очень оправдано сразу их здесь и выбрать, чтобы не тащить до самого конца где все равно отбросим @@ -721,6 +830,7 @@ void phg::SIFT::detectAndCompute(const cv::Mat& img, const cv::Mat& mask, std::v // после подсчета ориентаций количество могло возрасти (и скорее всего возросло) // нужно снова выбрать лучшие точки чтобы уложиться в бюджет kpts = selectTopKeypoints(kpts, p, verbose_level); +#endif if (verbose_level >= 2) { cv::Mat kpts_img; @@ -728,10 +838,10 @@ void phg::SIFT::detectAndCompute(const cv::Mat& img, const cv::Mat& mask, std::v saveImg("04_keypoints.jpg", kpts_img); } +#if !ENABLE_EXACT_NFEATURES_RECOVERY std::tie(desc, kpts) = computeDescriptors(kpts, octaves, p, verbose_level); +#endif - // TODO всегда ли мы получаем ровно столько точек сколько запросили в параметре nfeatures? в каких случаях это не так и в какую сторону? - // как подкрутить алгоритм, чтобы всегда выдавать ровно запрошенное количество точек (когда это в принципе возможно) но не сильно просесть в производительности? } void phg::SIFT::saveImg(const std::string& name, const cv::Mat& img) const diff --git a/tests/logs/0999.log b/tests/logs/0999.log new file mode 100644 index 0000000..9d1a5bd --- /dev/null +++ b/tests/logs/0999.log @@ -0,0 +1,273 @@ +Note: Google Test filter = SIFT.*-SIFT.DetectionDescriptionSteps:SIFT.PairMatching:SIFT.DetectionSmokeTest +[==========] Running 22 tests from 1 test suite. +[----------] Global test environment set-up. +[----------] 22 tests from SIFT +[ RUN ] SIFT.MovedTheSameImage +[ORB_OCV] Points detected: 500 -> 500 (in 0.038195 sec) +[ORB_OCV] 493/500 (recall=0.986) with average error=0.0520289 +[ORB_OCV] average size ratio between matched points: 1.00185 +[ORB_OCV] average angle difference between matched points: 0.145135 degrees +[ORB_OCV] average descriptor distance between matched points: 8.8073 (random distance: 127.325) => differentiability=0.0691721 +[SIFTOCV] Points detected: 385 -> 394 (in 0.116707 sec) +[SIFTOCV] 368/385 (recall=0.955844) with average error=0.046925 +[SIFTOCV] average size ratio between matched points: 0.998047 +[SIFTOCV] average angle difference between matched points: 0.405249 degrees +[SIFTOCV] average descriptor distance between matched points: 17.7114 (random distance: 518.844) => differentiability=0.0341363 +[ OK ] SIFT.MovedTheSameImage (210 ms) +[ RUN ] SIFT.MovedImageRight +[ORB_OCV] Points detected: 500 -> 500 (in 0.007648 sec) +[ORB_OCV] 471/500 (recall=0.942) with average error=0.502929 +[ORB_OCV] average size ratio between matched points: 0.992385 +[ORB_OCV] average angle difference between matched points: -0.67963 degrees +[ORB_OCV] average descriptor distance between matched points: 31.7219 (random distance: 127.724) => differentiability=0.248363 +[SIFTOCV] Points detected: 385 -> 385 (in 0.091896 sec) +[SIFTOCV] 359/377 (recall=0.952255) with average error=0.109341 +[SIFTOCV] average size ratio between matched points: 1.01202 +[SIFTOCV] average angle difference between matched points: 0.37287 degrees +[SIFTOCV] average descriptor distance between matched points: 28.0423 (random distance: 515.705) => differentiability=0.0543767 +[ OK ] SIFT.MovedImageRight (159 ms) +[ RUN ] SIFT.MovedImageLeft +[ORB_OCV] Points detected: 500 -> 500 (in 0.007286 sec) +[ORB_OCV] 466/498 (recall=0.935743) with average error=0.485198 +[ORB_OCV] average size ratio between matched points: 1.0061 +[ORB_OCV] average angle difference between matched points: -2.01597 degrees +[ORB_OCV] average descriptor distance between matched points: 30.279 (random distance: 126.457) => differentiability=0.239441 +[SIFTOCV] Points detected: 385 -> 383 (in 0.088907 sec) +[SIFTOCV] 351/373 (recall=0.941019) with average error=0.0804017 +[SIFTOCV] average size ratio between matched points: 0.99759 +[SIFTOCV] average angle difference between matched points: 0.287732 degrees +[SIFTOCV] average descriptor distance between matched points: 27.8077 (random distance: 521.273) => differentiability=0.0533457 +[ OK ] SIFT.MovedImageLeft (148 ms) +[ RUN ] SIFT.MovedImageUpHalfPixel +[ORB_OCV] Points detected: 500 -> 500 (in 0.007319 sec) +[ORB_OCV] 460/497 (recall=0.925553) with average error=0.710802 +[ORB_OCV] average size ratio between matched points: 1.01167 +[ORB_OCV] average angle difference between matched points: 0.857323 degrees +[ORB_OCV] average descriptor distance between matched points: 42.9087 (random distance: 123.602) => differentiability=0.347152 +[SIFTOCV] Points detected: 385 -> 424 (in 0.092558 sec) +[SIFTOCV] 312/378 (recall=0.825397) with average error=0.38935 +[SIFTOCV] average size ratio between matched points: 1.04734 +[SIFTOCV] average angle difference between matched points: 0.874912 degrees +[SIFTOCV] average descriptor distance between matched points: 96.2549 (random distance: 523.982) => differentiability=0.183699 +[ OK ] SIFT.MovedImageUpHalfPixel (156 ms) +[ RUN ] SIFT.MovedImageDownHalfPixel +[ORB_OCV] Points detected: 500 -> 500 (in 0.007282 sec) +[ORB_OCV] 442/478 (recall=0.924686) with average error=0.648609 +[ORB_OCV] average size ratio between matched points: 0.971097 +[ORB_OCV] average angle difference between matched points: -1.00358 degrees +[ORB_OCV] average descriptor distance between matched points: 42.586 (random distance: 125.477) => differentiability=0.339392 +[SIFTOCV] Points detected: 385 -> 425 (in 0.08923 sec) +[SIFTOCV] 317/376 (recall=0.843085) with average error=0.433961 +[SIFTOCV] average size ratio between matched points: 1.05648 +[SIFTOCV] average angle difference between matched points: 0.600276 degrees +[SIFTOCV] average descriptor distance between matched points: 106.539 (random distance: 519.07) => differentiability=0.20525 +[ OK ] SIFT.MovedImageDownHalfPixel (151 ms) +[ RUN ] SIFT.Rotate10 +[ORB_OCV] Points detected: 500 -> 500 (in 0.008445 sec) +[ORB_OCV] 475/500 (recall=0.95) with average error=0.932881 +[ORB_OCV] average size ratio between matched points: 1.00527 +[ORB_OCV] average angle difference between matched points: 8.46336 degrees +[ORB_OCV] average descriptor distance between matched points: 56.6295 (random distance: 122.783) => differentiability=0.461215 +[SIFTOCV] Points detected: 385 -> 457 (in 0.086789 sec) +[SIFTOCV] 308/383 (recall=0.804178) with average error=0.478137 +[SIFTOCV] average size ratio between matched points: 1.0446 +[SIFTOCV] average angle difference between matched points: 8.28068 degrees +[SIFTOCV] average descriptor distance between matched points: 113.55 (random distance: 522.932) => differentiability=0.217141 +[ OK ] SIFT.Rotate10 (148 ms) +[ RUN ] SIFT.Rotate20 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007524 sec) +[ORB_OCV] 456/491 (recall=0.928717) with average error=0.860867 +[ORB_OCV] average size ratio between matched points: 0.968872 +[ORB_OCV] average angle difference between matched points: 19.4252 degrees +[ORB_OCV] average descriptor distance between matched points: 58.3224 (random distance: 125.59) => differentiability=0.464387 +[SIFTOCV] Points detected: 385 -> 456 (in 0.118033 sec) +[SIFTOCV] 294/376 (recall=0.781915) with average error=0.517421 +[SIFTOCV] average size ratio between matched points: 1.06356 +[SIFTOCV] average angle difference between matched points: 16.4794 degrees +[SIFTOCV] average descriptor distance between matched points: 128.095 (random distance: 525.902) => differentiability=0.243572 +[ OK ] SIFT.Rotate20 (199 ms) +[ RUN ] SIFT.Rotate30 +[ORB_OCV] Points detected: 500 -> 500 (in 0.00767 sec) +[ORB_OCV] 446/479 (recall=0.931106) with average error=0.954674 +[ORB_OCV] average size ratio between matched points: 0.971588 +[ORB_OCV] average angle difference between matched points: 25.313 degrees +[ORB_OCV] average descriptor distance between matched points: 56.7668 (random distance: 125.177) => differentiability=0.453492 +[SIFTOCV] Points detected: 385 -> 428 (in 0.093021 sec) +[SIFTOCV] 301/374 (recall=0.804813) with average error=0.62647 +[SIFTOCV] average size ratio between matched points: 1.0552 +[SIFTOCV] average angle difference between matched points: 24.1679 degrees +[SIFTOCV] average descriptor distance between matched points: 139.444 (random distance: 517.49) => differentiability=0.269462 +[ OK ] SIFT.Rotate30 (153 ms) +[ RUN ] SIFT.Rotate40 +[ORB_OCV] Points detected: 500 -> 500 (in 0.010826 sec) +[ORB_OCV] 445/475 (recall=0.936842) with average error=0.927974 +[ORB_OCV] average size ratio between matched points: 0.992927 +[ORB_OCV] average angle difference between matched points: 35.1473 degrees +[ORB_OCV] average descriptor distance between matched points: 57.0315 (random distance: 125.292) => differentiability=0.455188 +[SIFTOCV] Points detected: 385 -> 412 (in 0.106487 sec) +[SIFTOCV] 279/370 (recall=0.754054) with average error=0.726889 +[SIFTOCV] average size ratio between matched points: 1.07965 +[SIFTOCV] average angle difference between matched points: 28.8403 degrees +[SIFTOCV] average descriptor distance between matched points: 148.753 (random distance: 518.131) => differentiability=0.287094 +[ OK ] SIFT.Rotate40 (176 ms) +[ RUN ] SIFT.Rotate45 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006953 sec) +[ORB_OCV] 427/475 (recall=0.898947) with average error=0.913293 +[ORB_OCV] average size ratio between matched points: 0.999695 +[ORB_OCV] average angle difference between matched points: 40.7936 degrees +[ORB_OCV] average descriptor distance between matched points: 57.0351 (random distance: 126.834) => differentiability=0.449684 +[SIFTOCV] Points detected: 385 -> 443 (in 0.087779 sec) +[SIFTOCV] 295/366 (recall=0.806011) with average error=0.722539 +[SIFTOCV] average size ratio between matched points: 1.06195 +[SIFTOCV] average angle difference between matched points: 37.5812 degrees +[SIFTOCV] average descriptor distance between matched points: 142.709 (random distance: 531.264) => differentiability=0.268622 +[ OK ] SIFT.Rotate45 (143 ms) +[ RUN ] SIFT.Rotate90 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006638 sec) +[ORB_OCV] 406/475 (recall=0.854737) with average error=0.794018 +[ORB_OCV] average size ratio between matched points: 0.926186 +[ORB_OCV] average angle difference between matched points: 81.2045 degrees +[ORB_OCV] average descriptor distance between matched points: 52.2069 (random distance: 126.239) => differentiability=0.413556 +[SIFTOCV] Points detected: 385 -> 372 (in 0.084346 sec) +[SIFTOCV] 341/367 (recall=0.929155) with average error=0.589335 +[SIFTOCV] average size ratio between matched points: 0.9972 +[SIFTOCV] average angle difference between matched points: 86.1901 degrees +[SIFTOCV] average descriptor distance between matched points: 49.631 (random distance: 522.565) => differentiability=0.0949758 +[ OK ] SIFT.Rotate90 (141 ms) +[ RUN ] SIFT.Scale50 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006697 sec) +[ORB_OCV] 463/500 (recall=0.926) with average error=0.927987 +[ORB_OCV] average size ratio between matched points: 0.829127 +[ORB_OCV] average angle difference between matched points: 2.9143 degrees +[ORB_OCV] average descriptor distance between matched points: 89.7322 (random distance: 124.84) => differentiability=0.718776 +[SIFTOCV] Points detected: 385 -> 162 (in 0.079069 sec) +[SIFTOCV] 202/385 (recall=0.524675) with average error=1.79627 +[SIFTOCV] average size ratio between matched points: 0.919287 +[SIFTOCV] average angle difference between matched points: 1.52171 degrees +[SIFTOCV] average descriptor distance between matched points: 344.742 (random distance: 531.506) => differentiability=0.648614 +[ OK ] SIFT.Scale50 (134 ms) +[ RUN ] SIFT.Scale70 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006747 sec) +[ORB_OCV] 488/500 (recall=0.976) with average error=0.902066 +[ORB_OCV] average size ratio between matched points: 0.884398 +[ORB_OCV] average angle difference between matched points: 1.14689 degrees +[ORB_OCV] average descriptor distance between matched points: 70.2889 (random distance: 124.695) => differentiability=0.563688 +[SIFTOCV] Points detected: 385 -> 278 (in 0.079333 sec) +[SIFTOCV] 255/385 (recall=0.662338) with average error=1.18739 +[SIFTOCV] average size ratio between matched points: 0.937014 +[SIFTOCV] average angle difference between matched points: -1.32973 degrees +[SIFTOCV] average descriptor distance between matched points: 235.34 (random distance: 525.863) => differentiability=0.447532 +[ OK ] SIFT.Scale70 (139 ms) +[ RUN ] SIFT.Scale90 +[ORB_OCV] Points detected: 500 -> 500 (in 0.00678 sec) +[ORB_OCV] 489/500 (recall=0.978) with average error=0.823308 +[ORB_OCV] average size ratio between matched points: 0.970324 +[ORB_OCV] average angle difference between matched points: -0.183516 degrees +[ORB_OCV] average descriptor distance between matched points: 60.3333 (random distance: 125.059) => differentiability=0.482438 +[SIFTOCV] Points detected: 385 -> 407 (in 0.078391 sec) +[SIFTOCV] 301/385 (recall=0.781818) with average error=0.642545 +[SIFTOCV] average size ratio between matched points: 1.01085 +[SIFTOCV] average angle difference between matched points: -1.59491 degrees +[SIFTOCV] average descriptor distance between matched points: 149.916 (random distance: 517.016) => differentiability=0.289965 +[ OK ] SIFT.Scale90 (131 ms) +[ RUN ] SIFT.Scale110 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006782 sec) +[ORB_OCV] 462/500 (recall=0.924) with average error=0.912118 +[ORB_OCV] average size ratio between matched points: 1.02967 +[ORB_OCV] average angle difference between matched points: -0.905967 degrees +[ORB_OCV] average descriptor distance between matched points: 59.7468 (random distance: 125.225) => differentiability=0.477115 +[SIFTOCV] Points detected: 385 -> 500 (in 0.085135 sec) +[SIFTOCV] 293/372 (recall=0.787634) with average error=0.55879 +[SIFTOCV] average size ratio between matched points: 1.16432 +[SIFTOCV] average angle difference between matched points: -1.39771 degrees +[SIFTOCV] average descriptor distance between matched points: 133.248 (random distance: 526.285) => differentiability=0.253187 +[ OK ] SIFT.Scale110 (139 ms) +[ RUN ] SIFT.Scale130 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006849 sec) +[ORB_OCV] 400/475 (recall=0.842105) with average error=1.02537 +[ORB_OCV] average size ratio between matched points: 1.10237 +[ORB_OCV] average angle difference between matched points: -4.78444 degrees +[ORB_OCV] average descriptor distance between matched points: 67.4875 (random distance: 126.4) => differentiability=0.53392 +[SIFTOCV] Points detected: 385 -> 500 (in 0.082103 sec) +[SIFTOCV] 242/351 (recall=0.689459) with average error=0.538303 +[SIFTOCV] average size ratio between matched points: 1.37952 +[SIFTOCV] average angle difference between matched points: -0.631644 degrees +[SIFTOCV] average descriptor distance between matched points: 120.25 (random distance: 522.019) => differentiability=0.230356 +[ OK ] SIFT.Scale130 (135 ms) +[ RUN ] SIFT.Scale150 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006822 sec) +[ORB_OCV] 325/445 (recall=0.730337) with average error=1.18695 +[ORB_OCV] average size ratio between matched points: 1.16446 +[ORB_OCV] average angle difference between matched points: -1.92861 degrees +[ORB_OCV] average descriptor distance between matched points: 75.4954 (random distance: 125.905) => differentiability=0.599624 +[SIFTOCV] Points detected: 385 -> 500 (in 0.082087 sec) +[SIFTOCV] 193/330 (recall=0.584848) with average error=0.514564 +[SIFTOCV] average size ratio between matched points: 1.58428 +[SIFTOCV] average angle difference between matched points: 1.65215 degrees +[SIFTOCV] average descriptor distance between matched points: 120.89 (random distance: 528.77) => differentiability=0.228625 +[ OK ] SIFT.Scale150 (138 ms) +[ RUN ] SIFT.Scale175 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006867 sec) +[ORB_OCV] 235/380 (recall=0.618421) with average error=1.3217 +[ORB_OCV] average size ratio between matched points: 1.25586 +[ORB_OCV] average angle difference between matched points: 4.13008 degrees +[ORB_OCV] average descriptor distance between matched points: 84.1617 (random distance: 124.894) => differentiability=0.673867 +[SIFTOCV] Points detected: 385 -> 500 (in 0.081887 sec) +[SIFTOCV] 170/300 (recall=0.566667) with average error=0.536976 +[SIFTOCV] average size ratio between matched points: 1.81545 +[SIFTOCV] average angle difference between matched points: -0.0531282 degrees +[SIFTOCV] average descriptor distance between matched points: 122.891 (random distance: 526.429) => differentiability=0.233443 +[ OK ] SIFT.Scale175 (137 ms) +[ RUN ] SIFT.Scale200 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007116 sec) +[ORB_OCV] 174/333 (recall=0.522523) with average error=1.36043 +[ORB_OCV] average size ratio between matched points: 1.34374 +[ORB_OCV] average angle difference between matched points: -3.78969 degrees +[ORB_OCV] average descriptor distance between matched points: 86.1954 (random distance: 126.011) => differentiability=0.684028 +[SIFTOCV] Points detected: 385 -> 500 (in 0.082443 sec) +[SIFTOCV] 162/274 (recall=0.591241) with average error=0.556679 +[SIFTOCV] average size ratio between matched points: 2.0394 +[SIFTOCV] average angle difference between matched points: -4.26259 degrees +[SIFTOCV] average descriptor distance between matched points: 99.0094 (random distance: 526.638) => differentiability=0.188003 +[ OK ] SIFT.Scale200 (139 ms) +[ RUN ] SIFT.Rotate10Scale90 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006753 sec) +[ORB_OCV] 486/500 (recall=0.972) with average error=0.862656 +[ORB_OCV] average size ratio between matched points: 1.00909 +[ORB_OCV] average angle difference between matched points: 12.1602 degrees +[ORB_OCV] average descriptor distance between matched points: 61.9033 (random distance: 126.477) => differentiability=0.489442 +[SIFTOCV] Points detected: 385 -> 394 (in 0.079139 sec) +[SIFTOCV] 290/385 (recall=0.753247) with average error=0.652913 +[SIFTOCV] average size ratio between matched points: 0.972783 +[SIFTOCV] average angle difference between matched points: 8.41556 degrees +[SIFTOCV] average descriptor distance between matched points: 154.724 (random distance: 527.209) => differentiability=0.293477 +[ OK ] SIFT.Rotate10Scale90 (132 ms) +[ RUN ] SIFT.Rotate30Scale75 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006706 sec) +[ORB_OCV] 471/500 (recall=0.942) with average error=0.873322 +[ORB_OCV] average size ratio between matched points: 0.882831 +[ORB_OCV] average angle difference between matched points: 32.7295 degrees +[ORB_OCV] average descriptor distance between matched points: 68.9915 (random distance: 123.987) => differentiability=0.55644 +[SIFTOCV] Points detected: 385 -> 302 (in 0.079743 sec) +[SIFTOCV] 265/385 (recall=0.688312) with average error=0.995207 +[SIFTOCV] average size ratio between matched points: 0.979378 +[SIFTOCV] average angle difference between matched points: 19.5607 degrees +[SIFTOCV] average descriptor distance between matched points: 207.53 (random distance: 525.691) => differentiability=0.394776 +[ OK ] SIFT.Rotate30Scale75 (130 ms) +[ RUN ] SIFT.HerzJesu19RotateM40 +[ORB_OCV] Points detected: 500 -> 500 (in 0.080186 sec) +[ORB_OCV] 494/500 (recall=0.988) with average error=1.25431 +[ORB_OCV] average size ratio between matched points: 1.00708 +[ORB_OCV] average angle difference between matched points: -36.7101 degrees +[ORB_OCV] average descriptor distance between matched points: 48.3603 (random distance: 121.69) => differentiability=0.397405 +[SIFTOCV] Points detected: 500 -> 500 (in 3.52565 sec) +[SIFTOCV] 384/429 (recall=0.895105) with average error=2.40066 +[SIFTOCV] average size ratio between matched points: 1.04042 +[SIFTOCV] average angle difference between matched points: -33.5724 degrees +[SIFTOCV] average descriptor distance between matched points: 146.801 (random distance: 530.239) => differentiability=0.276858 +[ OK ] SIFT.HerzJesu19RotateM40 (5061 ms) +[----------] 22 tests from SIFT (8200 ms total) + +[----------] Global test environment tear-down +[==========] 22 tests from 1 test suite ran. (8200 ms total) +[ PASSED ] 22 tests. diff --git a/tests/logs/descriptor_matching.log b/tests/logs/descriptor_matching.log new file mode 100644 index 0000000..806b3a5 --- /dev/null +++ b/tests/logs/descriptor_matching.log @@ -0,0 +1,282 @@ +[==========] Running 25 tests from 1 test suite. +[----------] Global test environment set-up. +[----------] 25 tests from SIFT +[ RUN ] SIFT.MovedTheSameImage +[ORB_OCV] Points detected: 500 -> 500 (in 0.03743 sec) +[ORB_OCV] 493/500 (recall=0.986) with average error=0.0520289 +[ORB_OCV] average size ratio between matched points: 1.00185 +[ORB_OCV] average angle difference between matched points: 0.526519 degrees +[ORB_OCV] average descriptor distance between matched points: 8.8073 (random distance: 127.325) => differentiability=0.0691721 +[SIFTOCV] Points detected: 453 -> 465 (in 0.092094 sec) +[SIFTOCV] 436/453 (recall=0.962472) with average error=0.0435686 +[SIFTOCV] average size ratio between matched points: 0.998252 +[SIFTOCV] average angle difference between matched points: -0.128614 degrees +[SIFTOCV] average descriptor distance between matched points: 90.3355 (random distance: 523.008) => differentiability=0.172723 +[ OK ] SIFT.MovedTheSameImage (188 ms) +[ RUN ] SIFT.MovedImageRight +[ORB_OCV] Points detected: 500 -> 500 (in 0.007709 sec) +[ORB_OCV] 471/500 (recall=0.942) with average error=0.502929 +[ORB_OCV] average size ratio between matched points: 0.992385 +[ORB_OCV] average angle difference between matched points: -0.711678 degrees +[ORB_OCV] average descriptor distance between matched points: 31.7219 (random distance: 127.724) => differentiability=0.248363 +[SIFTOCV] Points detected: 453 -> 447 (in 0.082962 sec) +[SIFTOCV] 421/442 (recall=0.952489) with average error=0.107924 +[SIFTOCV] average size ratio between matched points: 1.01134 +[SIFTOCV] average angle difference between matched points: 0.361078 degrees +[SIFTOCV] average descriptor distance between matched points: 90.1555 (random distance: 527.86) => differentiability=0.170794 +[ OK ] SIFT.MovedImageRight (143 ms) +[ RUN ] SIFT.MovedImageLeft +[ORB_OCV] Points detected: 500 -> 500 (in 0.007142 sec) +[ORB_OCV] 466/498 (recall=0.935743) with average error=0.485198 +[ORB_OCV] average size ratio between matched points: 1.0061 +[ORB_OCV] average angle difference between matched points: -1.04915 degrees +[ORB_OCV] average descriptor distance between matched points: 30.279 (random distance: 126.457) => differentiability=0.239441 +[SIFTOCV] Points detected: 453 -> 447 (in 0.082649 sec) +[SIFTOCV] 417/441 (recall=0.945578) with average error=0.0855277 +[SIFTOCV] average size ratio between matched points: 0.997577 +[SIFTOCV] average angle difference between matched points: -0.461582 degrees +[SIFTOCV] average descriptor distance between matched points: 97.5722 (random distance: 523.97) => differentiability=0.186217 +[ OK ] SIFT.MovedImageLeft (141 ms) +[ RUN ] SIFT.MovedImageUpHalfPixel +[ORB_OCV] Points detected: 500 -> 500 (in 0.007244 sec) +[ORB_OCV] 460/497 (recall=0.925553) with average error=0.710802 +[ORB_OCV] average size ratio between matched points: 1.01167 +[ORB_OCV] average angle difference between matched points: -0.290587 degrees +[ORB_OCV] average descriptor distance between matched points: 42.9087 (random distance: 123.602) => differentiability=0.347152 +[SIFTOCV] Points detected: 453 -> 500 (in 0.079778 sec) +[SIFTOCV] 367/445 (recall=0.824719) with average error=0.398716 +[SIFTOCV] average size ratio between matched points: 1.0449 +[SIFTOCV] average angle difference between matched points: 0.281815 degrees +[SIFTOCV] average descriptor distance between matched points: 152.166 (random distance: 530.014) => differentiability=0.287097 +[ OK ] SIFT.MovedImageUpHalfPixel (139 ms) +[ RUN ] SIFT.MovedImageDownHalfPixel +[ORB_OCV] Points detected: 500 -> 500 (in 0.00709 sec) +[ORB_OCV] 442/478 (recall=0.924686) with average error=0.648609 +[ORB_OCV] average size ratio between matched points: 0.971097 +[ORB_OCV] average angle difference between matched points: 1.08285 degrees +[ORB_OCV] average descriptor distance between matched points: 42.586 (random distance: 125.477) => differentiability=0.339392 +[SIFTOCV] Points detected: 453 -> 500 (in 0.081573 sec) +[SIFTOCV] 374/439 (recall=0.851936) with average error=0.445461 +[SIFTOCV] average size ratio between matched points: 1.05024 +[SIFTOCV] average angle difference between matched points: 1.44735 degrees +[SIFTOCV] average descriptor distance between matched points: 165.511 (random distance: 529.613) => differentiability=0.312513 +[ OK ] SIFT.MovedImageDownHalfPixel (137 ms) +[ RUN ] SIFT.Rotate10 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007111 sec) +[ORB_OCV] 475/500 (recall=0.95) with average error=0.932881 +[ORB_OCV] average size ratio between matched points: 1.00527 +[ORB_OCV] average angle difference between matched points: 8.9931 degrees +[ORB_OCV] average descriptor distance between matched points: 56.6295 (random distance: 122.783) => differentiability=0.461215 +[SIFTOCV] Points detected: 453 -> 500 (in 0.075131 sec) +[SIFTOCV] 350/451 (recall=0.776053) with average error=0.501799 +[SIFTOCV] average size ratio between matched points: 1.03657 +[SIFTOCV] average angle difference between matched points: 9.41985 degrees +[SIFTOCV] average descriptor distance between matched points: 178.858 (random distance: 521.738) => differentiability=0.342812 +[ OK ] SIFT.Rotate10 (131 ms) +[ RUN ] SIFT.Rotate20 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007128 sec) +[ORB_OCV] 456/491 (recall=0.928717) with average error=0.860867 +[ORB_OCV] average size ratio between matched points: 0.968872 +[ORB_OCV] average angle difference between matched points: 19.8609 degrees +[ORB_OCV] average descriptor distance between matched points: 58.3224 (random distance: 125.59) => differentiability=0.464387 +[SIFTOCV] Points detected: 453 -> 500 (in 0.07548 sec) +[SIFTOCV] 337/443 (recall=0.760722) with average error=0.556804 +[SIFTOCV] average size ratio between matched points: 1.04965 +[SIFTOCV] average angle difference between matched points: 13.8479 degrees +[SIFTOCV] average descriptor distance between matched points: 186.303 (random distance: 531.487) => differentiability=0.350531 +[ OK ] SIFT.Rotate20 (132 ms) +[ RUN ] SIFT.Rotate30 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007378 sec) +[ORB_OCV] 446/479 (recall=0.931106) with average error=0.954674 +[ORB_OCV] average size ratio between matched points: 0.971588 +[ORB_OCV] average angle difference between matched points: 28.3797 degrees +[ORB_OCV] average descriptor distance between matched points: 56.7668 (random distance: 125.177) => differentiability=0.453492 +[SIFTOCV] Points detected: 453 -> 500 (in 0.076006 sec) +[SIFTOCV] 356/441 (recall=0.807256) with average error=0.635313 +[SIFTOCV] average size ratio between matched points: 1.04861 +[SIFTOCV] average angle difference between matched points: 22.6383 degrees +[SIFTOCV] average descriptor distance between matched points: 194.029 (random distance: 529.795) => differentiability=0.366233 +[ OK ] SIFT.Rotate30 (131 ms) +[ RUN ] SIFT.Rotate40 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007174 sec) +[ORB_OCV] 445/475 (recall=0.936842) with average error=0.927974 +[ORB_OCV] average size ratio between matched points: 0.992927 +[ORB_OCV] average angle difference between matched points: 37.8999 degrees +[ORB_OCV] average descriptor distance between matched points: 57.0315 (random distance: 125.292) => differentiability=0.455188 +[SIFTOCV] Points detected: 453 -> 470 (in 0.079921 sec) +[SIFTOCV] 335/436 (recall=0.768349) with average error=0.722947 +[SIFTOCV] average size ratio between matched points: 1.07134 +[SIFTOCV] average angle difference between matched points: 28.1711 degrees +[SIFTOCV] average descriptor distance between matched points: 189.937 (random distance: 524.78) => differentiability=0.361937 +[ OK ] SIFT.Rotate40 (138 ms) +[ RUN ] SIFT.Rotate45 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007143 sec) +[ORB_OCV] 427/475 (recall=0.898947) with average error=0.913293 +[ORB_OCV] average size ratio between matched points: 0.999695 +[ORB_OCV] average angle difference between matched points: 44.5806 degrees +[ORB_OCV] average descriptor distance between matched points: 57.0351 (random distance: 126.834) => differentiability=0.449684 +[SIFTOCV] Points detected: 453 -> 500 (in 0.079777 sec) +[SIFTOCV] 344/431 (recall=0.798144) with average error=0.735095 +[SIFTOCV] average size ratio between matched points: 1.04736 +[SIFTOCV] average angle difference between matched points: 38.6116 degrees +[SIFTOCV] average descriptor distance between matched points: 189.73 (random distance: 526.815) => differentiability=0.360145 +[ OK ] SIFT.Rotate45 (139 ms) +[ RUN ] SIFT.Rotate90 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007141 sec) +[ORB_OCV] 406/475 (recall=0.854737) with average error=0.794018 +[ORB_OCV] average size ratio between matched points: 0.926186 +[ORB_OCV] average angle difference between matched points: 87.3904 degrees +[ORB_OCV] average descriptor distance between matched points: 52.2069 (random distance: 126.239) => differentiability=0.413556 +[SIFTOCV] Points detected: 453 -> 429 (in 0.074407 sec) +[SIFTOCV] 397/428 (recall=0.92757) with average error=0.597669 +[SIFTOCV] average size ratio between matched points: 0.994223 +[SIFTOCV] average angle difference between matched points: 85.9039 degrees +[SIFTOCV] average descriptor distance between matched points: 109.39 (random distance: 522.253) => differentiability=0.209459 +[ OK ] SIFT.Rotate90 (132 ms) +[ RUN ] SIFT.Scale50 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006664 sec) +[ORB_OCV] 463/500 (recall=0.926) with average error=0.927987 +[ORB_OCV] average size ratio between matched points: 0.829127 +[ORB_OCV] average angle difference between matched points: 0.243979 degrees +[ORB_OCV] average descriptor distance between matched points: 89.7322 (random distance: 124.84) => differentiability=0.718776 +[SIFTOCV] Points detected: 453 -> 191 (in 0.072397 sec) +[SIFTOCV] 235/453 (recall=0.518764) with average error=1.81213 +[SIFTOCV] average size ratio between matched points: 0.90594 +[SIFTOCV] average angle difference between matched points: 0.126219 degrees +[SIFTOCV] average descriptor distance between matched points: 362.817 (random distance: 526.31) => differentiability=0.68936 +[ OK ] SIFT.Scale50 (127 ms) +[ RUN ] SIFT.Scale70 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006592 sec) +[ORB_OCV] 488/500 (recall=0.976) with average error=0.902066 +[ORB_OCV] average size ratio between matched points: 0.884398 +[ORB_OCV] average angle difference between matched points: 1.67147 degrees +[ORB_OCV] average descriptor distance between matched points: 70.2889 (random distance: 124.695) => differentiability=0.563688 +[SIFTOCV] Points detected: 453 -> 335 (in 0.072242 sec) +[SIFTOCV] 307/453 (recall=0.677704) with average error=1.1649 +[SIFTOCV] average size ratio between matched points: 0.92551 +[SIFTOCV] average angle difference between matched points: 0.682746 degrees +[SIFTOCV] average descriptor distance between matched points: 272.272 (random distance: 530.603) => differentiability=0.513138 +[ OK ] SIFT.Scale70 (125 ms) +[ RUN ] SIFT.Scale90 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006778 sec) +[ORB_OCV] 489/500 (recall=0.978) with average error=0.823308 +[ORB_OCV] average size ratio between matched points: 0.970324 +[ORB_OCV] average angle difference between matched points: -1.10786 degrees +[ORB_OCV] average descriptor distance between matched points: 60.3333 (random distance: 125.059) => differentiability=0.482438 +[SIFTOCV] Points detected: 453 -> 469 (in 0.07171 sec) +[SIFTOCV] 354/453 (recall=0.781457) with average error=0.59984 +[SIFTOCV] average size ratio between matched points: 1.00052 +[SIFTOCV] average angle difference between matched points: 1.23403 degrees +[SIFTOCV] average descriptor distance between matched points: 193.204 (random distance: 523.29) => differentiability=0.369209 +[ OK ] SIFT.Scale90 (126 ms) +[ RUN ] SIFT.Scale110 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006687 sec) +[ORB_OCV] 462/500 (recall=0.924) with average error=0.912118 +[ORB_OCV] average size ratio between matched points: 1.02967 +[ORB_OCV] average angle difference between matched points: -2.21074 degrees +[ORB_OCV] average descriptor distance between matched points: 59.7468 (random distance: 125.225) => differentiability=0.477115 +[SIFTOCV] Points detected: 453 -> 500 (in 0.073027 sec) +[SIFTOCV] 307/434 (recall=0.707373) with average error=0.561683 +[SIFTOCV] average size ratio between matched points: 1.15716 +[SIFTOCV] average angle difference between matched points: 0.0277976 degrees +[SIFTOCV] average descriptor distance between matched points: 182.143 (random distance: 530.492) => differentiability=0.343347 +[ OK ] SIFT.Scale110 (361 ms) +[ RUN ] SIFT.Scale130 +[ORB_OCV] Points detected: 500 -> 500 (in 0.00871 sec) +[ORB_OCV] 400/475 (recall=0.842105) with average error=1.02537 +[ORB_OCV] average size ratio between matched points: 1.10237 +[ORB_OCV] average angle difference between matched points: -0.0928462 degrees +[ORB_OCV] average descriptor distance between matched points: 67.4875 (random distance: 126.4) => differentiability=0.53392 +[SIFTOCV] Points detected: 453 -> 500 (in 0.081611 sec) +[SIFTOCV] 253/409 (recall=0.618582) with average error=0.533529 +[SIFTOCV] average size ratio between matched points: 1.37601 +[SIFTOCV] average angle difference between matched points: -0.510379 degrees +[SIFTOCV] average descriptor distance between matched points: 175.173 (random distance: 529.43) => differentiability=0.33087 +[ OK ] SIFT.Scale130 (158 ms) +[ RUN ] SIFT.Scale150 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007242 sec) +[ORB_OCV] 325/445 (recall=0.730337) with average error=1.18695 +[ORB_OCV] average size ratio between matched points: 1.16446 +[ORB_OCV] average angle difference between matched points: -0.709934 degrees +[ORB_OCV] average descriptor distance between matched points: 75.4954 (random distance: 125.905) => differentiability=0.599624 +[SIFTOCV] Points detected: 453 -> 500 (in 0.081615 sec) +[SIFTOCV] 208/387 (recall=0.537468) with average error=0.519869 +[SIFTOCV] average size ratio between matched points: 1.56537 +[SIFTOCV] average angle difference between matched points: -1.0201 degrees +[SIFTOCV] average descriptor distance between matched points: 178.951 (random distance: 530.33) => differentiability=0.337433 +[ OK ] SIFT.Scale150 (144 ms) +[ RUN ] SIFT.Scale175 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007775 sec) +[ORB_OCV] 235/380 (recall=0.618421) with average error=1.3217 +[ORB_OCV] average size ratio between matched points: 1.25586 +[ORB_OCV] average angle difference between matched points: 3.49119 degrees +[ORB_OCV] average descriptor distance between matched points: 84.1617 (random distance: 124.894) => differentiability=0.673867 +[SIFTOCV] Points detected: 453 -> 501 (in 0.079356 sec) +[SIFTOCV] 189/354 (recall=0.533898) with average error=0.530545 +[SIFTOCV] average size ratio between matched points: 1.79649 +[SIFTOCV] average angle difference between matched points: 0.375372 degrees +[SIFTOCV] average descriptor distance between matched points: 182.373 (random distance: 522.122) => differentiability=0.349291 +[ OK ] SIFT.Scale175 (141 ms) +[ RUN ] SIFT.Scale200 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007598 sec) +[ORB_OCV] 174/333 (recall=0.522523) with average error=1.36043 +[ORB_OCV] average size ratio between matched points: 1.34374 +[ORB_OCV] average angle difference between matched points: 0.387991 degrees +[ORB_OCV] average descriptor distance between matched points: 86.1954 (random distance: 126.011) => differentiability=0.684028 +[SIFTOCV] Points detected: 453 -> 500 (in 0.077906 sec) +[SIFTOCV] 178/324 (recall=0.549383) with average error=0.536323 +[SIFTOCV] average size ratio between matched points: 2.03968 +[SIFTOCV] average angle difference between matched points: -3.44031 degrees +[SIFTOCV] average descriptor distance between matched points: 167.42 (random distance: 528.219) => differentiability=0.316952 +[ OK ] SIFT.Scale200 (138 ms) +[ RUN ] SIFT.Rotate10Scale90 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007465 sec) +[ORB_OCV] 486/500 (recall=0.972) with average error=0.862656 +[ORB_OCV] average size ratio between matched points: 1.00909 +[ORB_OCV] average angle difference between matched points: 10.8416 degrees +[ORB_OCV] average descriptor distance between matched points: 61.9033 (random distance: 126.477) => differentiability=0.489442 +[SIFTOCV] Points detected: 453 -> 464 (in 0.077476 sec) +[SIFTOCV] 351/453 (recall=0.774834) with average error=0.660494 +[SIFTOCV] average size ratio between matched points: 0.970697 +[SIFTOCV] average angle difference between matched points: 10.0653 degrees +[SIFTOCV] average descriptor distance between matched points: 210.278 (random distance: 528.178) => differentiability=0.39812 +[ OK ] SIFT.Rotate10Scale90 (136 ms) +[ RUN ] SIFT.Rotate30Scale75 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007044 sec) +[ORB_OCV] 471/500 (recall=0.942) with average error=0.873322 +[ORB_OCV] average size ratio between matched points: 0.882831 +[ORB_OCV] average angle difference between matched points: 29.9983 degrees +[ORB_OCV] average descriptor distance between matched points: 68.9915 (random distance: 123.987) => differentiability=0.55644 +[SIFTOCV] Points detected: 453 -> 373 (in 0.078585 sec) +[SIFTOCV] 318/453 (recall=0.701987) with average error=0.961622 +[SIFTOCV] average size ratio between matched points: 0.958296 +[SIFTOCV] average angle difference between matched points: 21.1272 degrees +[SIFTOCV] average descriptor distance between matched points: 241.741 (random distance: 528.552) => differentiability=0.457364 +[ OK ] SIFT.Rotate30Scale75 (138 ms) +[ RUN ] SIFT.HerzJesu19RotateM40 +[ORB_OCV] Points detected: 500 -> 500 (in 0.077833 sec) +[ORB_OCV] 494/500 (recall=0.988) with average error=1.25431 +[ORB_OCV] average size ratio between matched points: 1.00708 +[ORB_OCV] average angle difference between matched points: -29.9254 degrees +[ORB_OCV] average descriptor distance between matched points: 48.3603 (random distance: 121.69) => differentiability=0.397405 +[SIFTOCV] Points detected: 500 -> 500 (in 3.40811 sec) +[SIFTOCV] 377/435 (recall=0.866667) with average error=2.85298 +[SIFTOCV] average size ratio between matched points: 1.00886 +[SIFTOCV] average angle difference between matched points: -29.3651 degrees +[SIFTOCV] average descriptor distance between matched points: 212.589 (random distance: 537.412) => differentiability=0.395579 +[ OK ] SIFT.HerzJesu19RotateM40 (5121 ms) +[ RUN ] SIFT.DetectionSmokeTest +ENABLE_MY_SIFT_TESTING is disabled, test skipped +[ OK ] SIFT.DetectionSmokeTest (0 ms) +[ RUN ] SIFT.DetectionDescriptionSteps +ENABLE_MY_SIFT_TESTING is disabled, test skipped +[ OK ] SIFT.DetectionDescriptionSteps (0 ms) +[ RUN ] SIFT.PairMatching +ENABLE_MY_SIFT_TESTING is disabled, test skipped +Final score: UNKNOWN +[ OK ] SIFT.PairMatching (0 ms) +[----------] 25 tests from SIFT (8268 ms total) + +[----------] Global test environment tear-down +[==========] 25 tests from 1 test suite ran. (8268 ms total) +[ PASSED ] 25 tests. diff --git a/tests/logs/original.log b/tests/logs/original.log new file mode 100644 index 0000000..d5e55f1 --- /dev/null +++ b/tests/logs/original.log @@ -0,0 +1,282 @@ +[==========] Running 25 tests from 1 test suite. +[----------] Global test environment set-up. +[----------] 25 tests from SIFT +[ RUN ] SIFT.MovedTheSameImage +[ORB_OCV] Points detected: 500 -> 500 (in 0.038255 sec) +[ORB_OCV] 493/500 (recall=0.986) with average error=0.0520289 +[ORB_OCV] average size ratio between matched points: 1.00185 +[ORB_OCV] average angle difference between matched points: 0.145135 degrees +[ORB_OCV] average descriptor distance between matched points: 8.8073 (random distance: 127.325) => differentiability=0.0691721 +[SIFTOCV] Points detected: 453 -> 465 (in 0.084385 sec) +[SIFTOCV] 436/453 (recall=0.962472) with average error=0.0435686 +[SIFTOCV] average size ratio between matched points: 0.998252 +[SIFTOCV] average angle difference between matched points: -4.7478 degrees +[SIFTOCV] average descriptor distance between matched points: 90.3355 (random distance: 523.008) => differentiability=0.172723 +[ OK ] SIFT.MovedTheSameImage (176 ms) +[ RUN ] SIFT.MovedImageRight +[ORB_OCV] Points detected: 500 -> 500 (in 0.007215 sec) +[ORB_OCV] 471/500 (recall=0.942) with average error=0.502929 +[ORB_OCV] average size ratio between matched points: 0.992385 +[ORB_OCV] average angle difference between matched points: -0.67963 degrees +[ORB_OCV] average descriptor distance between matched points: 31.7219 (random distance: 127.724) => differentiability=0.248363 +[SIFTOCV] Points detected: 453 -> 447 (in 0.07736 sec) +[SIFTOCV] 421/442 (recall=0.952489) with average error=0.107924 +[SIFTOCV] average size ratio between matched points: 1.01134 +[SIFTOCV] average angle difference between matched points: -3.58242 degrees +[SIFTOCV] average descriptor distance between matched points: 90.1555 (random distance: 527.86) => differentiability=0.170794 +[ OK ] SIFT.MovedImageRight (138 ms) +[ RUN ] SIFT.MovedImageLeft +[ORB_OCV] Points detected: 500 -> 500 (in 0.007141 sec) +[ORB_OCV] 466/498 (recall=0.935743) with average error=0.485198 +[ORB_OCV] average size ratio between matched points: 1.0061 +[ORB_OCV] average angle difference between matched points: -2.01597 degrees +[ORB_OCV] average descriptor distance between matched points: 30.279 (random distance: 126.457) => differentiability=0.239441 +[SIFTOCV] Points detected: 453 -> 447 (in 0.077483 sec) +[SIFTOCV] 417/441 (recall=0.945578) with average error=0.0855277 +[SIFTOCV] average size ratio between matched points: 0.997577 +[SIFTOCV] average angle difference between matched points: -6.43682 degrees +[SIFTOCV] average descriptor distance between matched points: 97.5722 (random distance: 523.97) => differentiability=0.186217 +[ OK ] SIFT.MovedImageLeft (132 ms) +[ RUN ] SIFT.MovedImageUpHalfPixel +[ORB_OCV] Points detected: 500 -> 500 (in 0.007232 sec) +[ORB_OCV] 460/497 (recall=0.925553) with average error=0.710802 +[ORB_OCV] average size ratio between matched points: 1.01167 +[ORB_OCV] average angle difference between matched points: 0.857323 degrees +[ORB_OCV] average descriptor distance between matched points: 42.9087 (random distance: 123.602) => differentiability=0.347152 +[SIFTOCV] Points detected: 453 -> 500 (in 0.076186 sec) +[SIFTOCV] 367/445 (recall=0.824719) with average error=0.398716 +[SIFTOCV] average size ratio between matched points: 1.0449 +[SIFTOCV] average angle difference between matched points: 0.114179 degrees +[SIFTOCV] average descriptor distance between matched points: 152.166 (random distance: 530.014) => differentiability=0.287097 +[ OK ] SIFT.MovedImageUpHalfPixel (132 ms) +[ RUN ] SIFT.MovedImageDownHalfPixel +[ORB_OCV] Points detected: 500 -> 500 (in 0.007206 sec) +[ORB_OCV] 442/478 (recall=0.924686) with average error=0.648609 +[ORB_OCV] average size ratio between matched points: 0.971097 +[ORB_OCV] average angle difference between matched points: -1.00358 degrees +[ORB_OCV] average descriptor distance between matched points: 42.586 (random distance: 125.477) => differentiability=0.339392 +[SIFTOCV] Points detected: 453 -> 500 (in 0.076776 sec) +[SIFTOCV] 374/439 (recall=0.851936) with average error=0.445461 +[SIFTOCV] average size ratio between matched points: 1.05024 +[SIFTOCV] average angle difference between matched points: 0.589903 degrees +[SIFTOCV] average descriptor distance between matched points: 165.511 (random distance: 529.613) => differentiability=0.312513 +[ OK ] SIFT.MovedImageDownHalfPixel (134 ms) +[ RUN ] SIFT.Rotate10 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007204 sec) +[ORB_OCV] 475/500 (recall=0.95) with average error=0.932881 +[ORB_OCV] average size ratio between matched points: 1.00527 +[ORB_OCV] average angle difference between matched points: 8.46336 degrees +[ORB_OCV] average descriptor distance between matched points: 56.6295 (random distance: 122.783) => differentiability=0.461215 +[SIFTOCV] Points detected: 453 -> 500 (in 0.080769 sec) +[SIFTOCV] 350/451 (recall=0.776053) with average error=0.501799 +[SIFTOCV] average size ratio between matched points: 1.03657 +[SIFTOCV] average angle difference between matched points: 6.5729 degrees +[SIFTOCV] average descriptor distance between matched points: 178.858 (random distance: 521.738) => differentiability=0.342812 +[ OK ] SIFT.Rotate10 (138 ms) +[ RUN ] SIFT.Rotate20 +[ORB_OCV] Points detected: 500 -> 500 (in 0.00735 sec) +[ORB_OCV] 456/491 (recall=0.928717) with average error=0.860867 +[ORB_OCV] average size ratio between matched points: 0.968872 +[ORB_OCV] average angle difference between matched points: 19.4252 degrees +[ORB_OCV] average descriptor distance between matched points: 58.3224 (random distance: 125.59) => differentiability=0.464387 +[SIFTOCV] Points detected: 453 -> 500 (in 0.079375 sec) +[SIFTOCV] 337/443 (recall=0.760722) with average error=0.556804 +[SIFTOCV] average size ratio between matched points: 1.04965 +[SIFTOCV] average angle difference between matched points: 1.4678 degrees +[SIFTOCV] average descriptor distance between matched points: 186.303 (random distance: 531.487) => differentiability=0.350531 +[ OK ] SIFT.Rotate20 (135 ms) +[ RUN ] SIFT.Rotate30 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007226 sec) +[ORB_OCV] 446/479 (recall=0.931106) with average error=0.954674 +[ORB_OCV] average size ratio between matched points: 0.971588 +[ORB_OCV] average angle difference between matched points: 25.313 degrees +[ORB_OCV] average descriptor distance between matched points: 56.7668 (random distance: 125.177) => differentiability=0.453492 +[SIFTOCV] Points detected: 453 -> 500 (in 0.080099 sec) +[SIFTOCV] 356/441 (recall=0.807256) with average error=0.635313 +[SIFTOCV] average size ratio between matched points: 1.04861 +[SIFTOCV] average angle difference between matched points: 9.58379 degrees +[SIFTOCV] average descriptor distance between matched points: 194.029 (random distance: 529.795) => differentiability=0.366233 +[ OK ] SIFT.Rotate30 (138 ms) +[ RUN ] SIFT.Rotate40 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007173 sec) +[ORB_OCV] 445/475 (recall=0.936842) with average error=0.927974 +[ORB_OCV] average size ratio between matched points: 0.992927 +[ORB_OCV] average angle difference between matched points: 35.1473 degrees +[ORB_OCV] average descriptor distance between matched points: 57.0315 (random distance: 125.292) => differentiability=0.455188 +[SIFTOCV] Points detected: 453 -> 470 (in 0.084055 sec) +[SIFTOCV] 335/436 (recall=0.768349) with average error=0.722947 +[SIFTOCV] average size ratio between matched points: 1.07134 +[SIFTOCV] average angle difference between matched points: 12.1292 degrees +[SIFTOCV] average descriptor distance between matched points: 189.937 (random distance: 524.78) => differentiability=0.361937 +[ OK ] SIFT.Rotate40 (142 ms) +[ RUN ] SIFT.Rotate45 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007422 sec) +[ORB_OCV] 427/475 (recall=0.898947) with average error=0.913293 +[ORB_OCV] average size ratio between matched points: 0.999695 +[ORB_OCV] average angle difference between matched points: 40.7936 degrees +[ORB_OCV] average descriptor distance between matched points: 57.0351 (random distance: 126.834) => differentiability=0.449684 +[SIFTOCV] Points detected: 453 -> 500 (in 0.082223 sec) +[SIFTOCV] 344/431 (recall=0.798144) with average error=0.735095 +[SIFTOCV] average size ratio between matched points: 1.04736 +[SIFTOCV] average angle difference between matched points: 25.7374 degrees +[SIFTOCV] average descriptor distance between matched points: 189.73 (random distance: 526.815) => differentiability=0.360145 +[ OK ] SIFT.Rotate45 (140 ms) +[ RUN ] SIFT.Rotate90 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006792 sec) +[ORB_OCV] 406/475 (recall=0.854737) with average error=0.794018 +[ORB_OCV] average size ratio between matched points: 0.926186 +[ORB_OCV] average angle difference between matched points: 81.2045 degrees +[ORB_OCV] average descriptor distance between matched points: 52.2069 (random distance: 126.239) => differentiability=0.413556 +[SIFTOCV] Points detected: 453 -> 429 (in 0.105262 sec) +[SIFTOCV] 397/428 (recall=0.92757) with average error=0.597669 +[SIFTOCV] average size ratio between matched points: 0.994223 +[SIFTOCV] average angle difference between matched points: 68.2509 degrees +[SIFTOCV] average descriptor distance between matched points: 109.39 (random distance: 522.253) => differentiability=0.209459 +[ OK ] SIFT.Rotate90 (176 ms) +[ RUN ] SIFT.Scale50 +[ORB_OCV] Points detected: 500 -> 500 (in 0.008428 sec) +[ORB_OCV] 463/500 (recall=0.926) with average error=0.927987 +[ORB_OCV] average size ratio between matched points: 0.829127 +[ORB_OCV] average angle difference between matched points: 2.9143 degrees +[ORB_OCV] average descriptor distance between matched points: 89.7322 (random distance: 124.84) => differentiability=0.718776 +[SIFTOCV] Points detected: 453 -> 191 (in 0.076658 sec) +[SIFTOCV] 235/453 (recall=0.518764) with average error=1.81213 +[SIFTOCV] average size ratio between matched points: 0.90594 +[SIFTOCV] average angle difference between matched points: -0.218442 degrees +[SIFTOCV] average descriptor distance between matched points: 362.817 (random distance: 526.31) => differentiability=0.68936 +[ OK ] SIFT.Scale50 (134 ms) +[ RUN ] SIFT.Scale70 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006651 sec) +[ORB_OCV] 488/500 (recall=0.976) with average error=0.902066 +[ORB_OCV] average size ratio between matched points: 0.884398 +[ORB_OCV] average angle difference between matched points: 1.14689 degrees +[ORB_OCV] average descriptor distance between matched points: 70.2889 (random distance: 124.695) => differentiability=0.563688 +[SIFTOCV] Points detected: 453 -> 335 (in 0.071259 sec) +[SIFTOCV] 307/453 (recall=0.677704) with average error=1.1649 +[SIFTOCV] average size ratio between matched points: 0.92551 +[SIFTOCV] average angle difference between matched points: -8.88537 degrees +[SIFTOCV] average descriptor distance between matched points: 272.272 (random distance: 530.603) => differentiability=0.513138 +[ OK ] SIFT.Scale70 (124 ms) +[ RUN ] SIFT.Scale90 +[ORB_OCV] Points detected: 500 -> 500 (in 0.00671 sec) +[ORB_OCV] 489/500 (recall=0.978) with average error=0.823308 +[ORB_OCV] average size ratio between matched points: 0.970324 +[ORB_OCV] average angle difference between matched points: -0.183516 degrees +[ORB_OCV] average descriptor distance between matched points: 60.3333 (random distance: 125.059) => differentiability=0.482438 +[SIFTOCV] Points detected: 453 -> 469 (in 0.076825 sec) +[SIFTOCV] 354/453 (recall=0.781457) with average error=0.59984 +[SIFTOCV] average size ratio between matched points: 1.00052 +[SIFTOCV] average angle difference between matched points: -4.5203 degrees +[SIFTOCV] average descriptor distance between matched points: 193.204 (random distance: 523.29) => differentiability=0.369209 +[ OK ] SIFT.Scale90 (132 ms) +[ RUN ] SIFT.Scale110 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006781 sec) +[ORB_OCV] 462/500 (recall=0.924) with average error=0.912118 +[ORB_OCV] average size ratio between matched points: 1.02967 +[ORB_OCV] average angle difference between matched points: -0.905967 degrees +[ORB_OCV] average descriptor distance between matched points: 59.7468 (random distance: 125.225) => differentiability=0.477115 +[SIFTOCV] Points detected: 453 -> 500 (in 0.074938 sec) +[SIFTOCV] 307/434 (recall=0.707373) with average error=0.561683 +[SIFTOCV] average size ratio between matched points: 1.15716 +[SIFTOCV] average angle difference between matched points: 1.13854 degrees +[SIFTOCV] average descriptor distance between matched points: 182.143 (random distance: 530.492) => differentiability=0.343347 +[ OK ] SIFT.Scale110 (130 ms) +[ RUN ] SIFT.Scale130 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006976 sec) +[ORB_OCV] 400/475 (recall=0.842105) with average error=1.02537 +[ORB_OCV] average size ratio between matched points: 1.10237 +[ORB_OCV] average angle difference between matched points: -4.78444 degrees +[ORB_OCV] average descriptor distance between matched points: 67.4875 (random distance: 126.4) => differentiability=0.53392 +[SIFTOCV] Points detected: 453 -> 500 (in 0.076654 sec) +[SIFTOCV] 253/409 (recall=0.618582) with average error=0.533529 +[SIFTOCV] average size ratio between matched points: 1.37601 +[SIFTOCV] average angle difference between matched points: -2.24977 degrees +[SIFTOCV] average descriptor distance between matched points: 175.173 (random distance: 529.43) => differentiability=0.33087 +[ OK ] SIFT.Scale130 (135 ms) +[ RUN ] SIFT.Scale150 +[ORB_OCV] Points detected: 500 -> 500 (in 0.00682 sec) +[ORB_OCV] 325/445 (recall=0.730337) with average error=1.18695 +[ORB_OCV] average size ratio between matched points: 1.16446 +[ORB_OCV] average angle difference between matched points: -1.92861 degrees +[ORB_OCV] average descriptor distance between matched points: 75.4954 (random distance: 125.905) => differentiability=0.599624 +[SIFTOCV] Points detected: 453 -> 500 (in 0.0792 sec) +[SIFTOCV] 208/387 (recall=0.537468) with average error=0.519869 +[SIFTOCV] average size ratio between matched points: 1.56537 +[SIFTOCV] average angle difference between matched points: 2.7434 degrees +[SIFTOCV] average descriptor distance between matched points: 178.951 (random distance: 530.33) => differentiability=0.337433 +[ OK ] SIFT.Scale150 (134 ms) +[ RUN ] SIFT.Scale175 +[ORB_OCV] Points detected: 500 -> 500 (in 0.00707 sec) +[ORB_OCV] 235/380 (recall=0.618421) with average error=1.3217 +[ORB_OCV] average size ratio between matched points: 1.25586 +[ORB_OCV] average angle difference between matched points: 4.13008 degrees +[ORB_OCV] average descriptor distance between matched points: 84.1617 (random distance: 124.894) => differentiability=0.673867 +[SIFTOCV] Points detected: 453 -> 501 (in 0.079173 sec) +[SIFTOCV] 189/354 (recall=0.533898) with average error=0.530545 +[SIFTOCV] average size ratio between matched points: 1.79649 +[SIFTOCV] average angle difference between matched points: -2.33097 degrees +[SIFTOCV] average descriptor distance between matched points: 182.373 (random distance: 522.122) => differentiability=0.349291 +[ OK ] SIFT.Scale175 (136 ms) +[ RUN ] SIFT.Scale200 +[ORB_OCV] Points detected: 500 -> 500 (in 0.007015 sec) +[ORB_OCV] 174/333 (recall=0.522523) with average error=1.36043 +[ORB_OCV] average size ratio between matched points: 1.34374 +[ORB_OCV] average angle difference between matched points: -3.78969 degrees +[ORB_OCV] average descriptor distance between matched points: 86.1954 (random distance: 126.011) => differentiability=0.684028 +[SIFTOCV] Points detected: 453 -> 500 (in 0.077291 sec) +[SIFTOCV] 178/324 (recall=0.549383) with average error=0.536323 +[SIFTOCV] average size ratio between matched points: 2.03968 +[SIFTOCV] average angle difference between matched points: -1.02503 degrees +[SIFTOCV] average descriptor distance between matched points: 167.42 (random distance: 528.219) => differentiability=0.316952 +[ OK ] SIFT.Scale200 (132 ms) +[ RUN ] SIFT.Rotate10Scale90 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006837 sec) +[ORB_OCV] 486/500 (recall=0.972) with average error=0.862656 +[ORB_OCV] average size ratio between matched points: 1.00909 +[ORB_OCV] average angle difference between matched points: 12.1602 degrees +[ORB_OCV] average descriptor distance between matched points: 61.9033 (random distance: 126.477) => differentiability=0.489442 +[SIFTOCV] Points detected: 453 -> 464 (in 0.077303 sec) +[SIFTOCV] 351/453 (recall=0.774834) with average error=0.660494 +[SIFTOCV] average size ratio between matched points: 0.970697 +[SIFTOCV] average angle difference between matched points: 0.36928 degrees +[SIFTOCV] average descriptor distance between matched points: 210.278 (random distance: 528.178) => differentiability=0.39812 +[ OK ] SIFT.Rotate10Scale90 (131 ms) +[ RUN ] SIFT.Rotate30Scale75 +[ORB_OCV] Points detected: 500 -> 500 (in 0.006681 sec) +[ORB_OCV] 471/500 (recall=0.942) with average error=0.873322 +[ORB_OCV] average size ratio between matched points: 0.882831 +[ORB_OCV] average angle difference between matched points: 32.7295 degrees +[ORB_OCV] average descriptor distance between matched points: 68.9915 (random distance: 123.987) => differentiability=0.55644 +[SIFTOCV] Points detected: 453 -> 373 (in 0.074213 sec) +[SIFTOCV] 318/453 (recall=0.701987) with average error=0.961622 +[SIFTOCV] average size ratio between matched points: 0.958296 +[SIFTOCV] average angle difference between matched points: 6.75176 degrees +[SIFTOCV] average descriptor distance between matched points: 241.741 (random distance: 528.552) => differentiability=0.457364 +[ OK ] SIFT.Rotate30Scale75 (126 ms) +[ RUN ] SIFT.HerzJesu19RotateM40 +[ORB_OCV] Points detected: 500 -> 500 (in 0.078168 sec) +[ORB_OCV] 494/500 (recall=0.988) with average error=1.25431 +[ORB_OCV] average size ratio between matched points: 1.00708 +[ORB_OCV] average angle difference between matched points: -36.7101 degrees +[ORB_OCV] average descriptor distance between matched points: 48.3603 (random distance: 121.69) => differentiability=0.397405 +[SIFTOCV] Points detected: 500 -> 500 (in 3.69454 sec) +[SIFTOCV] 377/435 (recall=0.866667) with average error=2.85298 +[SIFTOCV] average size ratio between matched points: 1.00886 +[SIFTOCV] average angle difference between matched points: -16.179 degrees +[SIFTOCV] average descriptor distance between matched points: 212.589 (random distance: 537.412) => differentiability=0.395579 +[ OK ] SIFT.HerzJesu19RotateM40 (5429 ms) +[ RUN ] SIFT.DetectionSmokeTest +ENABLE_MY_SIFT_TESTING is disabled, test skipped +[ OK ] SIFT.DetectionSmokeTest (0 ms) +[ RUN ] SIFT.DetectionDescriptionSteps +ENABLE_MY_SIFT_TESTING is disabled, test skipped +[ OK ] SIFT.DetectionDescriptionSteps (0 ms) +[ RUN ] SIFT.PairMatching +ENABLE_MY_SIFT_TESTING is disabled, test skipped +Final score: UNKNOWN +[ OK ] SIFT.PairMatching (0 ms) +[----------] 25 tests from SIFT (8324 ms total) + +[----------] Global test environment tear-down +[==========] 25 tests from 1 test suite ran. (8324 ms total) +[ PASSED ] 25 tests. diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_0.png new file mode 100644 index 0000000..dea0c49 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_1.png new file mode 100644 index 0000000..5e8485e Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_2.png new file mode 100644 index 0000000..d82fdd9 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_3.png new file mode 100644 index 0000000..6a979f2 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_4.png new file mode 100644 index 0000000..f20c02e Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_5.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_5.png new file mode 100644 index 0000000..5ea7291 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_0_layer_5.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_0.png new file mode 100644 index 0000000..78da7cf Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_1.png new file mode 100644 index 0000000..a8679af Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_2.png new file mode 100644 index 0000000..3738a36 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_3.png new file mode 100644 index 0000000..253cd09 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_4.png new file mode 100644 index 0000000..20b6170 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_5.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_5.png new file mode 100644 index 0000000..3d752bb Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_1_layer_5.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_0.png new file mode 100644 index 0000000..704bbf3 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_1.png new file mode 100644 index 0000000..3e7fa5f Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_2.png new file mode 100644 index 0000000..bfa23a5 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_3.png new file mode 100644 index 0000000..05f24b1 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_4.png new file mode 100644 index 0000000..5a3e3d4 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_5.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_5.png new file mode 100644 index 0000000..e237957 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_2_layer_5.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_0.png new file mode 100644 index 0000000..31b0db6 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_1.png new file mode 100644 index 0000000..055ab05 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_2.png new file mode 100644 index 0000000..ee12a3c Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_3.png new file mode 100644 index 0000000..c5ef1cf Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_4.png new file mode 100644 index 0000000..7f3f2c6 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_5.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_5.png new file mode 100644 index 0000000..b87ca7a Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_3_layer_5.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_0.png new file mode 100644 index 0000000..76f79f3 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_1.png new file mode 100644 index 0000000..c9c2db1 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_2.png new file mode 100644 index 0000000..e9c7447 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_3.png new file mode 100644 index 0000000..56532b7 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_4.png new file mode 100644 index 0000000..75cf58b Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_5.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_5.png new file mode 100644 index 0000000..6e57153 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_4_layer_5.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_0.png new file mode 100644 index 0000000..a730fc3 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_1.png new file mode 100644 index 0000000..fda230a Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_2.png new file mode 100644 index 0000000..94af5b5 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_3.png new file mode 100644 index 0000000..04dd28c Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_4.png new file mode 100644 index 0000000..1aed428 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_5.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_5.png new file mode 100644 index 0000000..afdb993 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_5_layer_5.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_0.png new file mode 100644 index 0000000..ef9303f Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_1.png new file mode 100644 index 0000000..24c5d0e Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_2.png new file mode 100644 index 0000000..3a75ba4 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_3.png new file mode 100644 index 0000000..2e419d2 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_4.png new file mode 100644 index 0000000..389b168 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_5.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_5.png new file mode 100644 index 0000000..0adec12 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_6_layer_5.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_0.png new file mode 100644 index 0000000..5af0511 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_1.png new file mode 100644 index 0000000..d36b282 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_2.png new file mode 100644 index 0000000..e8ed2d6 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_3.png new file mode 100644 index 0000000..6c9df0e Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_4.png new file mode 100644 index 0000000..c9c12b3 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_5.png b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_5.png new file mode 100644 index 0000000..fb21386 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramid/02_octave_7_layer_5.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_0.png new file mode 100644 index 0000000..3b766e4 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_1.png new file mode 100644 index 0000000..1712adc Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_2.png new file mode 100644 index 0000000..fd73b9e Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_3.png new file mode 100644 index 0000000..19cef3c Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_4.png new file mode 100644 index 0000000..096f2d5 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_0_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_0.png new file mode 100644 index 0000000..4747383 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_1.png new file mode 100644 index 0000000..86f070c Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_2.png new file mode 100644 index 0000000..682ff1e Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_3.png new file mode 100644 index 0000000..3cfb310 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_4.png new file mode 100644 index 0000000..5871b89 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_1_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_0.png new file mode 100644 index 0000000..b12753d Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_1.png new file mode 100644 index 0000000..c963ddd Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_2.png new file mode 100644 index 0000000..70afbfb Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_3.png new file mode 100644 index 0000000..ee252e9 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_4.png new file mode 100644 index 0000000..1d4d52f Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_2_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_0.png new file mode 100644 index 0000000..2bbd702 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_1.png new file mode 100644 index 0000000..e0b0c23 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_2.png new file mode 100644 index 0000000..c1a212f Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_3.png new file mode 100644 index 0000000..1277970 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_4.png new file mode 100644 index 0000000..67bd9bc Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_3_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_0.png new file mode 100644 index 0000000..01d8f87 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_1.png new file mode 100644 index 0000000..80628f0 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_2.png new file mode 100644 index 0000000..6c2293a Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_3.png new file mode 100644 index 0000000..ff34a9f Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_4.png new file mode 100644 index 0000000..1583b14 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_4_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_0.png new file mode 100644 index 0000000..263c3e5 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_1.png new file mode 100644 index 0000000..0566dd3 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_2.png new file mode 100644 index 0000000..62a1a9d Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_3.png new file mode 100644 index 0000000..5770227 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_4.png new file mode 100644 index 0000000..373a168 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_5_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_0.png new file mode 100644 index 0000000..9e772b1 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_1.png new file mode 100644 index 0000000..5cf7547 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_2.png new file mode 100644 index 0000000..650e236 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_3.png new file mode 100644 index 0000000..3a6a35f Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_4.png new file mode 100644 index 0000000..1dadd7a Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_6_layer_4.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_0.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_0.png new file mode 100644 index 0000000..91e7ffd Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_0.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_1.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_1.png new file mode 100644 index 0000000..f2c19cd Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_1.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_2.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_2.png new file mode 100644 index 0000000..62d8a13 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_2.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_3.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_3.png new file mode 100644 index 0000000..2c18f4b Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_3.png differ diff --git a/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_4.png b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_4.png new file mode 100644 index 0000000..5c3b801 Binary files /dev/null and b/tests/pyramids_from_first_layer_octave_base/pyramidDoG/03_dog_octave_7_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_0.png new file mode 100644 index 0000000..dea0c49 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_1.png new file mode 100644 index 0000000..5e8485e Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_2.png new file mode 100644 index 0000000..1224452 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_3.png new file mode 100644 index 0000000..051142f Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_4.png new file mode 100644 index 0000000..bff7b91 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_5.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_5.png new file mode 100644 index 0000000..f10c529 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_0_layer_5.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_0.png new file mode 100644 index 0000000..6860c24 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_1.png new file mode 100644 index 0000000..e92b0d1 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_2.png new file mode 100644 index 0000000..36f4118 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_3.png new file mode 100644 index 0000000..09c3c81 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_4.png new file mode 100644 index 0000000..cf0e4f1 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_5.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_5.png new file mode 100644 index 0000000..43fcc82 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_1_layer_5.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_0.png new file mode 100644 index 0000000..fb13263 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_1.png new file mode 100644 index 0000000..b285fd0 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_2.png new file mode 100644 index 0000000..c802684 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_3.png new file mode 100644 index 0000000..363b0a5 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_4.png new file mode 100644 index 0000000..6f642fb Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_5.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_5.png new file mode 100644 index 0000000..7ebc9c8 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_2_layer_5.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_0.png new file mode 100644 index 0000000..11a8396 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_1.png new file mode 100644 index 0000000..e6b3d9a Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_2.png new file mode 100644 index 0000000..4d465f9 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_3.png new file mode 100644 index 0000000..4dd4bd8 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_4.png new file mode 100644 index 0000000..0b54a60 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_5.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_5.png new file mode 100644 index 0000000..05a78ff Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_3_layer_5.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_0.png new file mode 100644 index 0000000..3ee9811 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_1.png new file mode 100644 index 0000000..36b8d66 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_2.png new file mode 100644 index 0000000..e0629de Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_3.png new file mode 100644 index 0000000..184422d Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_4.png new file mode 100644 index 0000000..345fa7c Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_5.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_5.png new file mode 100644 index 0000000..bb3538d Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_4_layer_5.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_0.png new file mode 100644 index 0000000..38c7a61 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_1.png new file mode 100644 index 0000000..58e5aa7 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_2.png new file mode 100644 index 0000000..e052dfe Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_3.png new file mode 100644 index 0000000..eaf783c Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_4.png new file mode 100644 index 0000000..bc4cecd Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_5.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_5.png new file mode 100644 index 0000000..c3dd837 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_5_layer_5.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_0.png new file mode 100644 index 0000000..09451f7 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_1.png new file mode 100644 index 0000000..ef136a7 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_2.png new file mode 100644 index 0000000..7825507 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_3.png new file mode 100644 index 0000000..f614f19 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_4.png new file mode 100644 index 0000000..83058d5 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_5.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_5.png new file mode 100644 index 0000000..17e2aa5 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_6_layer_5.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_0.png new file mode 100644 index 0000000..67399d0 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_1.png new file mode 100644 index 0000000..9ff7c88 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_2.png new file mode 100644 index 0000000..3c7a550 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_3.png new file mode 100644 index 0000000..c4b75d9 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_4.png new file mode 100644 index 0000000..3a85a16 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_5.png b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_5.png new file mode 100644 index 0000000..7f1c865 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramid/02_octave_7_layer_5.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_0.png new file mode 100644 index 0000000..3b766e4 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_1.png new file mode 100644 index 0000000..ec3497f Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_2.png new file mode 100644 index 0000000..60b3be0 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_3.png new file mode 100644 index 0000000..74108e8 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_4.png new file mode 100644 index 0000000..bc8ce7c Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_0_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_0.png new file mode 100644 index 0000000..bbd1386 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_1.png new file mode 100644 index 0000000..a3bd21b Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_2.png new file mode 100644 index 0000000..e5935a9 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_3.png new file mode 100644 index 0000000..210d267 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_4.png new file mode 100644 index 0000000..217b082 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_1_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_0.png new file mode 100644 index 0000000..0ff94ac Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_1.png new file mode 100644 index 0000000..cffcbb1 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_2.png new file mode 100644 index 0000000..fe13ae4 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_3.png new file mode 100644 index 0000000..77e7b60 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_4.png new file mode 100644 index 0000000..02d2aaf Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_2_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_0.png new file mode 100644 index 0000000..95d0902 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_1.png new file mode 100644 index 0000000..cbd5bb2 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_2.png new file mode 100644 index 0000000..2514483 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_3.png new file mode 100644 index 0000000..d0b7c3e Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_4.png new file mode 100644 index 0000000..f71c984 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_3_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_0.png new file mode 100644 index 0000000..2882056 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_1.png new file mode 100644 index 0000000..99cdc03 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_2.png new file mode 100644 index 0000000..572f325 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_3.png new file mode 100644 index 0000000..847982f Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_4.png new file mode 100644 index 0000000..b8db526 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_4_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_0.png new file mode 100644 index 0000000..787838f Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_1.png new file mode 100644 index 0000000..9a63742 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_2.png new file mode 100644 index 0000000..8714018 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_3.png new file mode 100644 index 0000000..312bc19 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_4.png new file mode 100644 index 0000000..32ba3f3 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_5_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_0.png new file mode 100644 index 0000000..721dcd2 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_1.png new file mode 100644 index 0000000..8195e30 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_2.png new file mode 100644 index 0000000..d64d203 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_3.png new file mode 100644 index 0000000..76065df Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_4.png new file mode 100644 index 0000000..fde81a1 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_6_layer_4.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_0.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_0.png new file mode 100644 index 0000000..b2bfd8c Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_0.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_1.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_1.png new file mode 100644 index 0000000..c22f5e7 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_1.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_2.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_2.png new file mode 100644 index 0000000..242f6c4 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_2.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_3.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_3.png new file mode 100644 index 0000000..ca22f64 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_3.png differ diff --git a/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_4.png b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_4.png new file mode 100644 index 0000000..9f72375 Binary files /dev/null and b/tests/pyramids_incremental_octave_layers/pyramidDoG/03_dog_octave_7_layer_4.png differ diff --git a/tests/test_sift.cpp b/tests/test_sift.cpp index cf3bd7d..ba8bdc0 100755 --- a/tests/test_sift.cpp +++ b/tests/test_sift.cpp @@ -25,10 +25,12 @@ #define GAUSSIAN_NOISE_STDDEV 1.0 +#define USE_DESCRIPTOR_MATCHING_FOR_ANGLE_DIFF 0 + // TODO ENABLE ME // TODO ENABLE ME // TODO ENABLE ME -#define ENABLE_MY_SIFT_TESTING 0 +#define ENABLE_MY_SIFT_TESTING 1 #define DENY_CREATE_REF_DATA 1 @@ -239,12 +241,27 @@ void evaluateDetection(const cv::Mat& M, double minRecall, cv::Mat img0 = cv::Ma ptrdiff_t closest_j = -1; // будем искать ближайшую точку детектированную на искаженном изображении double min_error = std::numeric_limits::max(); +#if USE_DESCRIPTOR_MATCHING_FOR_ANGLE_DIFF + ptrdiff_t best_angle_j = -1; // лучший по дескриптору кандидат среди геометрически допустимых + double best_angle_desc_dist = std::numeric_limits::max(); + cv::Mat angle_d0 = desc0.rowRange(cv::Range(i, i + 1)); +#endif for (ptrdiff_t j = 0; j < kps1.size(); ++j) { double error = cv::norm(kps1[j].pt - p01); if (error < min_error) { min_error = error; closest_j = j; } +#if USE_DESCRIPTOR_MATCHING_FOR_ANGLE_DIFF + if (error <= MAX_ACCEPTED_PIXEL_ERROR * width) { + cv::Mat angle_d1 = desc1.rowRange(cv::Range(j, j + 1)); + double angle_desc_dist = cv::norm(angle_d0, angle_d1, (method_name == "ORB") ? cv::NORM_HAMMING : cv::NORM_L2); + if (angle_desc_dist < best_angle_desc_dist) { + best_angle_desc_dist = angle_desc_dist; + best_angle_j = j; + } + } +#endif } if (closest_j != -1 && min_error <= MAX_ACCEPTED_PIXEL_ERROR * width) { // мы нашли что-то достаточно близкое - успех! @@ -258,7 +275,11 @@ void evaluateDetection(const cv::Mat& M, double minRecall, cv::Mat img0 = cv::Ma if (kps0[i].size != 0.0) { size_ratio_sum += kps1[closest_j].size / kps0[i].size; } +#if USE_DESCRIPTOR_MATCHING_FOR_ANGLE_DIFF + angle_diff_sum += diffAngles(kps0[i].angle, kps1[best_angle_j].angle); +#else angle_diff_sum += diffAngles(kps0[i].angle, kps1[closest_j].angle); +#endif cv::Mat d0 = desc0.rowRange(cv::Range(i, i + 1)); cv::Mat d1 = desc1.rowRange(cv::Range(closest_j, closest_j + 1));