Skip to content

Task01 Вячеслав Григорович ITMO#16

Open
HackAss2002 wants to merge 1 commit intoPhotogrammetryCourse:task01from
HackAss2002:task01
Open

Task01 Вячеслав Григорович ITMO#16
HackAss2002 wants to merge 1 commit intoPhotogrammetryCourse:task01from
HackAss2002:task01

Conversation

@HackAss2002
Copy link

@HackAss2002 HackAss2002 commented Mar 5, 2026

  1. Почему SIFT менее точно угадывает средний угол отклонения? изменяется ли ситуация если выкрутить параметр ORIENTATION_VOTES_PEAK_RATIO=0.999? почему?

Если у нас будет большое значение, то мы будем реже из одной точки плодить несколько с разными направлениями. Это нужно т.к. мы все же считаем приближенно, у нас есть шумы, сглаживание гистограммы, да и в целом некоторые узоры могут иметь несколько направлений. Если мы не будем добавлять эти доп точки, то просто не сможем сопоставить одну и ту же точку с 2 разных картинок где за счет погрешности по-разному выбралось доминирующее направление. Если будет маленькое значение, то получим много мусора

Получилось за счет уменьшения значения увеличить final score

  1. Как надежно замерить во сколько раз распараллеливание через OpenMP ускоряет ваш вариант SIFT? Попробуйте сделать это на вашем компьютере, какое ускорение относительно однопоточной версии оказалось? Сколько у вашего процессора ядер и сколько потоков?

Выглядит так, что у нас нет io, есть много памяти, но последовательной, т.к. что нет random access, и много вычислений, так что мы тут больше cpu bound

В buildOctaves мы можем распараллелить слои в октаве, т.к. делаем не инкрементально и зависимостей тут особо нет. Дожидаемся последнего слоя и строим следующий октав

В buildDoG, иожем распараллелить все слои и октавы

В findScaleSpaceExtrema можем распараллелиться вплоть до пикселей, но тут будет нужно синхронизироваться в записи точек

В computeOrientations можем распараллелить по ключевым точкам. Вроде тут тоже синхронизация только при записи результата

В computeDescriptors, аналогично распараллеим по ключевым точкам, но тут надо синхронизироваться постоянно на запись точек и дескрипторов, поэтому стоит делать батчинг для более редкой синхронизации

В selectTopKeypoints, вроде особо не распараллелить

Будто бы большую часть кода можно ускорить в количество ядер раз, но надо уже смотреть соотношение операций по времени

Но для теста нужно сделать скрипт с множеством замеров на одних и тех же данных, которые уже загружены и готовы

Пробовать руки не дошли

  1. Правда ли можно строить каждый слой в Gaussian пирамиде из самого первого слоя этой октавы? Или нужно обязательно делать так как предложено в статье - дополняя размытие предыдущего слоя этой октавы? Совпадают ли пирамиды визуально?

Можно с математической точки зрения и даже визуально будут совпадать, т.к. погрешность с флотами здесь относительно небольшая. Но мне от одной мысли об этом уже плохо, уж сильно навозился за жизнь проблемами с точностью даблов, а вы тут хотите инкрементально менять флоты, страшно

  1. Какие ожидания от картинок в Gaussian пирамиде можно придумать? Как проверить что работает корректно? С какой другой картинкой предыдущей октавы должна визуально совпадать конкретная картинка конкретной октавы? Как их визуально сравнить, ведь они разного размера?

На первых октавах и на первых слоях картинка не сильно размыты. Чем дальше там больше мыла. В конце получим среднюю яркость изображения. Последний слой октавы равен первому слоя следующей октавы с учетом ресайза

  1. Почему в октаве Gaussian пирамиды s+3 картинки а не s+2 например?

Мы хотим s искать фичи на s слоях DoG, поэтому нам надо +2, чтобы искать экстремумы на предыдущем и следующем для крайних слоев и еще +1 при построении DoG, т.к. здесь один слой это разность 2 подряд Гауссов, то есть из 2 слоев получаем 1 разницу

  1. Какие ожидания от картинок в DoG пирамиде можно придумать?

Визуально на первых DoG мы должны отчетливо видеть мелкие детали, трава, нитки и т.д., которые очень быстро начнет исчезать с ростом октавы и слоя. На более поздних уже начнут исчезать большие объекты

  1. Почему порог контрастности должен уменьшаться при увеличении числа слоев в октаве?

Чем больше у нас слоев, тем меньше у нас разница между ними и мы будем выкидывать то, что выкидывать не стоило

  1. Какая строка ответственна за определение сигмы (или что почти то же самое - радиуса) которая задает окрестность по которой определяется ориентация ключевой точки?
        float kp_sigma_octave = (float)(sigma0 * std::pow(2.0, (double)layer / s));
        float sigma_win = 1.5f * kp_sigma_octave; // цитата из lowe: "Each sample added to the histogram is weighted by its gradient magnitude and by a Gaussian-weighted circular window with a σ that is 1.5 times that of the scale of the keypoint."
        int radius = (int)std::round(3.f * sigma_win);
  1. За какой строки вашего кода дескриптор инвариантен к повороту картинки?
                // инвариантность к повороту: повернем направление градиента на угол ключевой точки
                float angle_invariant = angle - kp_angle_rad;
  1. Всегда ли мы получаем ровно столько точек сколько запросили в параметре nfeatures? в каких случаях это не так и в какую сторону? Как подкрутить алгоритм, чтобы всегда выдавать ровно запрошенное количество точек (когда это в принципе возможно) но не сильно просесть в производительности?

Нет, т.к. количество точек может буть меньше. В картинке может не быть столько точек сколько нам надо. Точки близкие к границам могут выкидываться, т.к. их зона выходит за границы картинки

// дескриптор подсчитывается по более широкой окрестности. если она выходит за границы изображения, точка может быть отброшена, в результате чего массив kpts может измениться
std::pair<cv::Mat, std::vector<cv::KeyPoint>> phg::computeDescriptors(const std::vector<cv::KeyPoint>& kpts, const std::vector<phg::SIFT::Octave>& octaves, const phg::SIFTParams& params, int verbose_level)

Может предварительно выкинуть точки selectTopKeypoints, а потом понять, что по предудщему пункту уже не хватает

Чтобы не умереть при вычислении можем найти все экстремумы, посортить их, но не выкидывать. И начать по очереди(или батчами) их прогонять через весь последующий пайплайн пока не наберем нужное количество точек

Github Actions CI

Run ./build/test_sift
Running main() from /home/runner/work/PhotogrammetryTasks2026/PhotogrammetryTasks2026/libs/3rdparty/libgtest/googletest/src/gtest_main.cc
[==========] 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.011869 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.090414 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
[SIFT_MY] Points detected: 424 -> 432 (in 0.17105 sec)
[SIFT_MY] 410/424 (recall=0.966981) with average error=0.0645888
[SIFT_MY] average size ratio between matched points: 0.999322
[SIFT_MY] average angle difference between matched points: -7.19133 degrees
[SIFT_MY] average descriptor distance between matched points: 0.164914 (random distance: 1.02065) => differentiability=0.161577
[       OK ] SIFT.MovedTheSameImage (347 ms)
[ RUN      ] SIFT.MovedImageRight
[ORB_OCV] Points detected: 500 -> 500 (in 0.010011 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.076689 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
[SIFT_MY] Points detected: 424 -> 415 (in 0.164175 sec)
[SIFT_MY] 401/422 (recall=0.950237) with average error=0.119777
[SIFT_MY] average size ratio between matched points: 1
[SIFT_MY] average angle difference between matched points: -6.2319 degrees
[SIFT_MY] average descriptor distance between matched points: 0.173259 (random distance: 1.02299) => differentiability=0.169366
[       OK ] SIFT.MovedImageRight (321 ms)
[ RUN      ] SIFT.MovedImageLeft
[ORB_OCV] Points detected: 500 -> 500 (in 0.010363 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.096901 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
[SIFT_MY] Points detected: 424 -> 424 (in 0.166774 sec)
[SIFT_MY] 395/418 (recall=0.944976) with average error=0.0888111
[SIFT_MY] average size ratio between matched points: 0.997471
[SIFT_MY] average angle difference between matched points: -5.67152 degrees
[SIFT_MY] average descriptor distance between matched points: 0.173879 (random distance: 1.02741) => differentiability=0.169241
[       OK ] SIFT.MovedImageLeft (354 ms)
[ RUN      ] SIFT.MovedImageUpHalfPixel
[ORB_OCV] Points detected: 500 -> 500 (in 0.011509 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.078951 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
[SIFT_MY] Points detected: 424 -> 481 (in 0.173666 sec)
[SIFT_MY] 357/420 (recall=0.85) with average error=0.359668
[SIFT_MY] average size ratio between matched points: 1.03447
[SIFT_MY] average angle difference between matched points: -4.75129 degrees
[SIFT_MY] average descriptor distance between matched points: 0.29788 (random distance: 1.03438) => differentiability=0.287979
[       OK ] SIFT.MovedImageUpHalfPixel (340 ms)
[ RUN      ] SIFT.MovedImageDownHalfPixel
[ORB_OCV] Points detected: 500 -> 500 (in 0.009637 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.081563 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
[SIFT_MY] Points detected: 424 -> 459 (in 0.171944 sec)
[SIFT_MY] 352/413 (recall=0.8523) with average error=0.451035
[SIFT_MY] average size ratio between matched points: 1.05379
[SIFT_MY] average angle difference between matched points: -5.30111 degrees
[SIFT_MY] average descriptor distance between matched points: 0.307035 (random distance: 1.03165) => differentiability=0.297617
[       OK ] SIFT.MovedImageDownHalfPixel (336 ms)
[ RUN      ] SIFT.Rotate10
[ORB_OCV] Points detected: 500 -> 500 (in 0.010033 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.077297 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
[SIFT_MY] Points detected: 424 -> 482 (in 0.174981 sec)
[SIFT_MY] 339/424 (recall=0.799528) with average error=0.467715
[SIFT_MY] average size ratio between matched points: 1.03169
[SIFT_MY] average angle difference between matched points: -6.28422 degrees
[SIFT_MY] average descriptor distance between matched points: 0.328515 (random distance: 1.02725) => differentiability=0.3198
[       OK ] SIFT.Rotate10 (334 ms)
[ RUN      ] SIFT.Rotate20
[ORB_OCV] Points detected: 500 -> 500 (in 0.009981 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.07723 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
[SIFT_MY] Points detected: 424 -> 487 (in 0.175882 sec)
[SIFT_MY] 330/418 (recall=0.789474) with average error=0.503367
[SIFT_MY] average size ratio between matched points: 1.09925
[SIFT_MY] average angle difference between matched points: -2.33944 degrees
[SIFT_MY] average descriptor distance between matched points: 0.346497 (random distance: 1.02904) => differentiability=0.336719
[       OK ] SIFT.Rotate20 (336 ms)
[ RUN      ] SIFT.Rotate30
[ORB_OCV] Points detected: 500 -> 500 (in 0.009947 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.07713 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
[SIFT_MY] Points detected: 424 -> 472 (in 0.174562 sec)
[SIFT_MY] 345/414 (recall=0.833333) with average error=0.643166
[SIFT_MY] average size ratio between matched points: 1.04556
[SIFT_MY] average angle difference between matched points: 13.8733 degrees
[SIFT_MY] average descriptor distance between matched points: 0.351628 (random distance: 1.028) => differentiability=0.342049
[       OK ] SIFT.Rotate30 (334 ms)
[ RUN      ] SIFT.Rotate40
[ORB_OCV] Points detected: 500 -> 500 (in 0.010102 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.077498 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
[SIFT_MY] Points detected: 424 -> 455 (in 0.173212 sec)
[SIFT_MY] 322/410 (recall=0.785366) with average error=0.680393
[SIFT_MY] average size ratio between matched points: 1.05489
[SIFT_MY] average angle difference between matched points: 18.9196 degrees
[SIFT_MY] average descriptor distance between matched points: 0.327883 (random distance: 1.02658) => differentiability=0.319395
[       OK ] SIFT.Rotate40 (333 ms)
[ RUN      ] SIFT.Rotate45
[ORB_OCV] Points detected: 500 -> 500 (in 0.01012 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.077773 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
[SIFT_MY] Points detected: 424 -> 480 (in 0.174233 sec)
[SIFT_MY] 338/406 (recall=0.832512) with average error=0.732464
[SIFT_MY] average size ratio between matched points: 1.03939
[SIFT_MY] average angle difference between matched points: 27.0998 degrees
[SIFT_MY] average descriptor distance between matched points: 0.350316 (random distance: 1.02175) => differentiability=0.342859
[       OK ] SIFT.Rotate45 (335 ms)
[ RUN      ] SIFT.Rotate90
[ORB_OCV] Points detected: 500 -> 500 (in 0.009954 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.076249 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
[SIFT_MY] Points detected: 424 -> 415 (in 0.167828 sec)
[SIFT_MY] 360/406 (recall=0.8867) with average error=0.657911
[SIFT_MY] average size ratio between matched points: 0.990658
[SIFT_MY] average angle difference between matched points: 73.7578 degrees
[SIFT_MY] average descriptor distance between matched points: 0.212183 (random distance: 1.02351) => differentiability=0.20731
[       OK ] SIFT.Rotate90 (325 ms)
[ RUN      ] SIFT.Scale50
[ORB_OCV] Points detected: 500 -> 500 (in 0.009599 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.073528 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
[SIFT_MY] Points detected: 424 -> 202 (in 0.140641 sec)
[SIFT_MY] 221/424 (recall=0.521226) with average error=1.93856
[SIFT_MY] average size ratio between matched points: 1.01373
[SIFT_MY] average angle difference between matched points: 2.83715 degrees
[SIFT_MY] average descriptor distance between matched points: 0.705017 (random distance: 1.02087) => differentiability=0.690601
[       OK ] SIFT.Scale50 (297 ms)
[ RUN      ] SIFT.Scale70
[ORB_OCV] Points detected: 500 -> 500 (in 0.009696 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.07528 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
[SIFT_MY] Points detected: 424 -> 337 (in 0.155568 sec)
[SIFT_MY] 299/424 (recall=0.705189) with average error=1.16399
[SIFT_MY] average size ratio between matched points: 0.938365
[SIFT_MY] average angle difference between matched points: -7.75999 degrees
[SIFT_MY] average descriptor distance between matched points: 0.537251 (random distance: 1.04724) => differentiability=0.513014
[       OK ] SIFT.Scale70 (312 ms)
[ RUN      ] SIFT.Scale90
[ORB_OCV] Points detected: 500 -> 500 (in 0.009913 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.076998 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
[SIFT_MY] Points detected: 424 -> 428 (in 0.170058 sec)
[SIFT_MY] 346/424 (recall=0.816038) with average error=0.681524
[SIFT_MY] average size ratio between matched points: 0.976275
[SIFT_MY] average angle difference between matched points: -5.07179 degrees
[SIFT_MY] average descriptor distance between matched points: 0.415445 (random distance: 1.03174) => differentiability=0.402665
[       OK ] SIFT.Scale90 (329 ms)
[ RUN      ] SIFT.Scale110
[ORB_OCV] Points detected: 500 -> 500 (in 0.010052 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.077295 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
[SIFT_MY] Points detected: 424 -> 490 (in 0.17614 sec)
[SIFT_MY] 304/421 (recall=0.72209) with average error=0.49934
[SIFT_MY] average size ratio between matched points: 1.13376
[SIFT_MY] average angle difference between matched points: -4.31778 degrees
[SIFT_MY] average descriptor distance between matched points: 0.388547 (random distance: 1.0235) => differentiability=0.379625
[       OK ] SIFT.Scale110 (336 ms)
[ RUN      ] SIFT.Scale130
[ORB_OCV] Points detected: 500 -> 500 (in 0.010089 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.078901 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
[SIFT_MY] Points detected: 424 -> 482 (in 0.177289 sec)
[SIFT_MY] 238/399 (recall=0.596491) with average error=0.516155
[SIFT_MY] average size ratio between matched points: 1.35138
[SIFT_MY] average angle difference between matched points: -3.55712 degrees
[SIFT_MY] average descriptor distance between matched points: 0.353341 (random distance: 1.03603) => differentiability=0.341053
[       OK ] SIFT.Scale130 (341 ms)
[ RUN      ] SIFT.Scale150
[ORB_OCV] Points detected: 500 -> 500 (in 0.010138 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.078055 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
[SIFT_MY] Points detected: 424 -> 482 (in 0.178598 sec)
[SIFT_MY] 205/382 (recall=0.536649) with average error=0.721309
[SIFT_MY] average size ratio between matched points: 1.50183
[SIFT_MY] average angle difference between matched points: -4.73953 degrees
[SIFT_MY] average descriptor distance between matched points: 0.401276 (random distance: 1.03505) => differentiability=0.387689
[       OK ] SIFT.Scale150 (341 ms)
[ RUN      ] SIFT.Scale175
[ORB_OCV] Points detected: 500 -> 500 (in 0.010169 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.078688 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
[SIFT_MY] Points detected: 424 -> 466 (in 0.180432 sec)
[SIFT_MY] 159/350 (recall=0.454286) with average error=0.520995
[SIFT_MY] average size ratio between matched points: 1.80701
[SIFT_MY] average angle difference between matched points: -2.07846 degrees
[SIFT_MY] average descriptor distance between matched points: 0.412126 (random distance: 1.03915) => differentiability=0.396598
[       OK ] SIFT.Scale175 (344 ms)
[ RUN      ] SIFT.Scale200
[ORB_OCV] Points detected: 500 -> 500 (in 0.010247 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.078668 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
[SIFT_MY] Points detected: 424 -> 469 (in 0.181028 sec)
[SIFT_MY] 149/323 (recall=0.4613) with average error=0.5261
[SIFT_MY] average size ratio between matched points: 2.02875
[SIFT_MY] average angle difference between matched points: -10.0007 degrees
[SIFT_MY] average descriptor distance between matched points: 0.314155 (random distance: 1.01596) => differentiability=0.30922
[       OK ] SIFT.Scale200 (345 ms)
[ RUN      ] SIFT.Rotate10Scale90
[ORB_OCV] Points detected: 500 -> 500 (in 0.010038 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.076977 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
[SIFT_MY] Points detected: 424 -> 433 (in 0.172736 sec)
[SIFT_MY] 342/424 (recall=0.806604) with average error=0.62958
[SIFT_MY] average size ratio between matched points: 0.966199
[SIFT_MY] average angle difference between matched points: -1.02059 degrees
[SIFT_MY] average descriptor distance between matched points: 0.428595 (random distance: 1.03213) => differentiability=0.415252
[       OK ] SIFT.Rotate10Scale90 (332 ms)
[ RUN      ] SIFT.Rotate30Scale75
[ORB_OCV] Points detected: 500 -> 500 (in 0.009958 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.078156 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
[SIFT_MY] Points detected: 424 -> 326 (in 0.155535 sec)
[SIFT_MY] 295/424 (recall=0.695755) with average error=1.02381
[SIFT_MY] average size ratio between matched points: 1.00393
[SIFT_MY] average angle difference between matched points: 6.06748 degrees
[SIFT_MY] average descriptor distance between matched points: 0.506931 (random distance: 1.01918) => differentiability=0.497393
[       OK ] SIFT.Rotate30Scale75 (316 ms)
[ RUN      ] SIFT.HerzJesu19RotateM40
[ORB_OCV] Points detected: 500 -> 500 (in 0.086792 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 2.77501 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
[SIFT_MY] Points detected: 452 -> 478 (in 2.68142 sec)
[SIFT_MY] 392/429 (recall=0.913753) with average error=2.63285
[SIFT_MY] average size ratio between matched points: 1.00236
[SIFT_MY] average angle difference between matched points: -17.8111 degrees
[SIFT_MY] average descriptor distance between matched points: 0.413919 (random distance: 1.04228) => differentiability=0.397128
[       OK ] SIFT.HerzJesu19RotateM40 (7355 ms)
[ RUN      ] SIFT.DetectionSmokeTest
upscaled image from 768x1024 to 1536x2048
new octave base size: 768
new octave base size: 384
new octave base size: 192
new octave base size: 96
new octave base size: 48
new octave base size: 24
new octave base size: 12
saving octave 0
saving octave 1
saving octave 2
saving octave 3
saving octave 4
saving octave 5
saving octave 6
saving octave 7
saving octave 0
saving octave 1
saving octave 2
saving octave 3
saving octave 4
saving octave 5
saving octave 6
saving octave 7
octave 0: 2960 keypoints so far
octave 1: 3792 keypoints so far
octave 2: 3939 keypoints so far
octave 3: 3966 keypoints so far
octave 4: 3989 keypoints so far
octave 5: 3996 keypoints so far
octave 6: 3998 keypoints so far
octave 7: 3998 keypoints so far
total keypoints: 3998
orientations: 3998 -> 4824 keypoints
descriptors: 4824 -> 4744 keypoints (some discarded due to border)
[       OK ] SIFT.DetectionSmokeTest (3173 ms)
[ RUN      ] SIFT.DetectionDescriptionSteps
loaded image of size: [384 x 512]
[  CHECK  ] buildOctaves: matched reference step1_octaves.yml.gz
[  CHECK  ] buildDoG: matched reference step2_dog.yml.gz
[  MATCH  ] findScaleSpaceExtrema: 158/190 matched (83.1579%), ref count=191
detected n keypoints: 190
[  MATCH  ] selectTopKeypoints_1: 158/190 matched (83.1579%), ref count=191
selected n keypoints: 190
[  MATCH  ] computeOrientations: 170/204 matched (83.3333%), ref count=202
oriented n keypoints: 204
[  MATCH  ] selectTopKeypoints_2: 170/204 matched (83.3333%), ref count=202
selected n keypoints: 204
[  MATCH  ] computeDescriptors: 150/182 matched (82.4176%), ref count=182 [with descriptors]
described n keypoints: 182
[       OK ] SIFT.DetectionDescriptionSteps (917 ms)
[ RUN      ] SIFT.PairMatching
image sizes: [1536 x 2048], [1536 x 2048]
matching using opencv orb...
N keypoints: left 10000, right 10000
Good matches:       352
Inlier matches:     242
matching using opencv sift...
N keypoints: left 7288, right 6398
Good matches:       1285
Inlier matches:     1172
matching using my sift...
N keypoints: left 8359, right 7304
Good matches:       1400
Inlier matches:     1307
Final score: 1307
[       OK ] SIFT.PairMatching (6709 ms)
[----------] 25 tests from SIFT (25142 ms total)

[----------] Global test environment tear-down
[==========] 25 tests from 1 test suite ran. (25142 ms total)
[  PASSED  ] 25 tests.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant