Skip to content

Task01 Дмитрий Оводок#158

Closed
dmitrio95 wants to merge 1 commit into
PhotogrammetryCourse:task01from
dmitrio95:task01
Closed

Task01 Дмитрий Оводок#158
dmitrio95 wants to merge 1 commit into
PhotogrammetryCourse:task01from
dmitrio95:task01

Conversation

@dmitrio95

@dmitrio95 dmitrio95 commented Jun 13, 2026

Copy link
Copy Markdown

Решение первой задачи (решение второй — в пулл-реквесте #157).

Перечислите идеи и коротко обозначьте мысли которые у вас возникали по мере выполнения задания, в частности попробуйте ответить на вопросы:

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

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

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

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

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

Здесь не вполне ясно: распараллеливание применяется к коду теста, а не самого SIFT. Следует ли измерять эффект для этого кода или следует внедрить OpenMP внутрь реализации SIFT и измерить полученный эффект?

В любом случае, процедура кажется вполне понятной: нужно убедиться, что сборка собрана с оптимизациями компилятора (желательно с CMAKE_BUILD_TYPE=Release), запустить варианты с нужными #pragma omp и без них и измерить либо время работы либо всей процедуры SIFT, либо конкретных распараллеленных участков кода.

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

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

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

Картинка номер i данной октавы должна совпадать с картинкой номер s+i предыдущей октавы. Визуально сравнить можно, например, увеличив в два раза размер меньшей картинки, что и делает в задании функция phg::SIFT::savePyramid.

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

Судя по применению в коде, s — целевое количество слоёв в октаве, доступных в DoG для оценки наличия локального максимума по значению пикселя в пирамиде. Для оценки наличия локального максимума у каждой из s картинок в DoG должно быть две соседние картинки. Следовательно, в октаву нужно добавить две крайние картинки, то есть в DoG в итоге должно быть s+2 картинки. Для получения s+2 картинок DoG нужно на одну размытую картинку больше, то есть s+3.

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

Не вполне ясно, что означает этот вопрос, но закон с совпадением i-й картинки с (s+i)-й для предыдущей октавы вполне должен выполняться и в случае с DoG.

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

Потому что порог применяется к разности изображений, пусть и размытых. Чем больше слоёв, тем меньше отличаются картинки между соседними слоями, и тем меньше будет разность пикселей. Следовательно, действительно кажется разумным масштабировать порог в зависимости от количества слоёв.

8) Какая строка ответственна за определение сигмы (или что почти то же самое - радиуса) которая задает окрестность по которой определяется ориентация ключевой точки?

За это ответствен следующий блок кода. Последняя его строка — и есть вычисление окончательного значения радиуса, по которому вычисляется ориентация ключевой точки.

// найдем радиус ключевой точки в координатах ее октавы
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);

9) За какой строки вашего кода дескриптор инвариантен к повороту картинки?

Из-за этой:

// инвариантность к повороту: повернем направление градиента на угол ключевой точки
float angle_invariant = angle - kp_angle_rad;

Github Actions CI

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.01161 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.088341 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 -> 440 (in 0.175891 sec)
[SIFT_MY] 408/424 (recall=0.962264) with average error=0.0457224
[SIFT_MY] average size ratio between matched points: 0.997958
[SIFT_MY] average angle difference between matched points: -6.4175 degrees
[SIFT_MY] average descriptor distance between matched points: 0.159853 (random distance: 1.02994) => differentiability=0.155207
[       OK ] SIFT.MovedTheSameImage (364 ms)
[ RUN      ] SIFT.MovedImageRight
[ORB_OCV] Points detected: 500 -> 500 (in 0.00979 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.080496 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 -> 429 (in 0.176605 sec)
[SIFT_MY] 399/422 (recall=0.945498) with average error=0.11273
[SIFT_MY] average size ratio between matched points: 1.00791
[SIFT_MY] average angle difference between matched points: -6.20512 degrees
[SIFT_MY] average descriptor distance between matched points: 0.171172 (random distance: 1.00889) => differentiability=0.169664
[       OK ] SIFT.MovedImageRight (348 ms)
[ RUN      ] SIFT.MovedImageLeft
[ORB_OCV] Points detected: 500 -> 500 (in 0.009762 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.080699 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 -> 422 (in 0.174623 sec)
[SIFT_MY] 391/417 (recall=0.93765) with average error=0.0654435
[SIFT_MY] average size ratio between matched points: 0.998206
[SIFT_MY] average angle difference between matched points: -6.39811 degrees
[SIFT_MY] average descriptor distance between matched points: 0.16641 (random distance: 1.02064) => differentiability=0.163045
[       OK ] SIFT.MovedImageLeft (340 ms)
[ RUN      ] SIFT.MovedImageUpHalfPixel
[ORB_OCV] Points detected: 500 -> 500 (in 0.0097 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.08141 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 -> 488 (in 0.181171 sec)
[SIFT_MY] 356/420 (recall=0.847619) with average error=0.387394
[SIFT_MY] average size ratio between matched points: 1.04654
[SIFT_MY] average angle difference between matched points: -7.16037 degrees
[SIFT_MY] average descriptor distance between matched points: 0.283155 (random distance: 1.0065) => differentiability=0.281327
[       OK ] SIFT.MovedImageUpHalfPixel (347 ms)
[ RUN      ] SIFT.MovedImageDownHalfPixel
[ORB_OCV] Points detected: 500 -> 500 (in 0.009846 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.078441 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 -> 471 (in 0.172888 sec)
[SIFT_MY] 351/417 (recall=0.841727) with average error=0.435946
[SIFT_MY] average size ratio between matched points: 1.04905
[SIFT_MY] average angle difference between matched points: -6.8173 degrees
[SIFT_MY] average descriptor distance between matched points: 0.302628 (random distance: 1.02429) => differentiability=0.295452
[       OK ] SIFT.MovedImageDownHalfPixel (336 ms)
[ RUN      ] SIFT.Rotate10
[ORB_OCV] Points detected: 500 -> 500 (in 0.009859 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.077153 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 -> 485 (in 0.174868 sec)
[SIFT_MY] 343/424 (recall=0.808962) with average error=0.5098
[SIFT_MY] average size ratio between matched points: 1.04221
[SIFT_MY] average angle difference between matched points: -3.91352 degrees
[SIFT_MY] average descriptor distance between matched points: 0.335045 (random distance: 1.02509) => differentiability=0.326845
[       OK ] SIFT.Rotate10 (340 ms)
[ RUN      ] SIFT.Rotate20
[ORB_OCV] Points detected: 500 -> 500 (in 0.009908 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.077387 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 -> 488 (in 0.177825 sec)
[SIFT_MY] 325/417 (recall=0.779376) with average error=0.560121
[SIFT_MY] average size ratio between matched points: 1.05133
[SIFT_MY] average angle difference between matched points: 1.28392 degrees
[SIFT_MY] average descriptor distance between matched points: 0.34562 (random distance: 1.01898) => differentiability=0.339182
[       OK ] SIFT.Rotate20 (343 ms)
[ RUN      ] SIFT.Rotate30
[ORB_OCV] Points detected: 500 -> 500 (in 0.009709 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.081665 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 -> 476 (in 0.180932 sec)
[SIFT_MY] 335/416 (recall=0.805288) with average error=0.614676
[SIFT_MY] average size ratio between matched points: 1.04884
[SIFT_MY] average angle difference between matched points: 10.3163 degrees
[SIFT_MY] average descriptor distance between matched points: 0.339755 (random distance: 1.02273) => differentiability=0.332204
[       OK ] SIFT.Rotate30 (349 ms)
[ RUN      ] SIFT.Rotate40
[ORB_OCV] Points detected: 500 -> 500 (in 0.009745 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.081099 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 -> 447 (in 0.180213 sec)
[SIFT_MY] 317/412 (recall=0.769417) with average error=0.716163
[SIFT_MY] average size ratio between matched points: 1.07368
[SIFT_MY] average angle difference between matched points: 17.7504 degrees
[SIFT_MY] average descriptor distance between matched points: 0.344266 (random distance: 1.03005) => differentiability=0.334222
[       OK ] SIFT.Rotate40 (347 ms)
[ RUN      ] SIFT.Rotate45
[ORB_OCV] Points detected: 500 -> 500 (in 0.009782 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.086966 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 -> 491 (in 0.184562 sec)
[SIFT_MY] 327/408 (recall=0.801471) with average error=0.707951
[SIFT_MY] average size ratio between matched points: 1.05652
[SIFT_MY] average angle difference between matched points: 25.4261 degrees
[SIFT_MY] average descriptor distance between matched points: 0.344143 (random distance: 1.03203) => differentiability=0.333462
[       OK ] SIFT.Rotate45 (361 ms)
[ RUN      ] SIFT.Rotate90
[ORB_OCV] Points detected: 500 -> 500 (in 0.009688 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.079458 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 -> 410 (in 0.171897 sec)
[SIFT_MY] 372/410 (recall=0.907317) with average error=0.60056
[SIFT_MY] average size ratio between matched points: 0.995118
[SIFT_MY] average angle difference between matched points: 71.3043 degrees
[SIFT_MY] average descriptor distance between matched points: 0.188306 (random distance: 1.00293) => differentiability=0.187756
[       OK ] SIFT.Rotate90 (341 ms)
[ RUN      ] SIFT.Scale50
[ORB_OCV] Points detected: 500 -> 500 (in 0.009298 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.077538 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 -> 187 (in 0.143325 sec)
[SIFT_MY] 219/424 (recall=0.516509) with average error=1.91889
[SIFT_MY] average size ratio between matched points: 0.957992
[SIFT_MY] average angle difference between matched points: 2.96179 degrees
[SIFT_MY] average descriptor distance between matched points: 0.711257 (random distance: 1.03842) => differentiability=0.684942
[       OK ] SIFT.Scale50 (305 ms)
[ RUN      ] SIFT.Scale70
[ORB_OCV] Points detected: 500 -> 500 (in 0.009443 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.078447 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 -> 318 (in 0.15783 sec)
[SIFT_MY] 291/424 (recall=0.686321) with average error=1.22699
[SIFT_MY] average size ratio between matched points: 0.967551
[SIFT_MY] average angle difference between matched points: -5.74811 degrees
[SIFT_MY] average descriptor distance between matched points: 0.540313 (random distance: 1.03738) => differentiability=0.520843
[       OK ] SIFT.Scale70 (329 ms)
[ RUN      ] SIFT.Scale90
[ORB_OCV] Points detected: 500 -> 500 (in 0.009785 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.08102 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 -> 431 (in 0.176144 sec)
[SIFT_MY] 336/424 (recall=0.792453) with average error=0.643454
[SIFT_MY] average size ratio between matched points: 0.99799
[SIFT_MY] average angle difference between matched points: -4.59535 degrees
[SIFT_MY] average descriptor distance between matched points: 0.401302 (random distance: 1.00811) => differentiability=0.398073
[       OK ] SIFT.Scale90 (345 ms)
[ RUN      ] SIFT.Scale110
[ORB_OCV] Points detected: 500 -> 500 (in 0.009746 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.081137 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 -> 493 (in 0.181284 sec)
[SIFT_MY] 304/421 (recall=0.72209) with average error=0.574339
[SIFT_MY] average size ratio between matched points: 1.15415
[SIFT_MY] average angle difference between matched points: -5.88926 degrees
[SIFT_MY] average descriptor distance between matched points: 0.406783 (random distance: 1.03578) => differentiability=0.392731
[       OK ] SIFT.Scale110 (348 ms)
[ RUN      ] SIFT.Scale130
[ORB_OCV] Points detected: 500 -> 500 (in 0.009811 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.081906 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 -> 478 (in 0.181995 sec)
[SIFT_MY] 237/402 (recall=0.589552) with average error=0.514185
[SIFT_MY] average size ratio between matched points: 1.37362
[SIFT_MY] average angle difference between matched points: -3.26666 degrees
[SIFT_MY] average descriptor distance between matched points: 0.357848 (random distance: 1.02575) => differentiability=0.348866
[       OK ] SIFT.Scale130 (353 ms)
[ RUN      ] SIFT.Scale150
[ORB_OCV] Points detected: 500 -> 500 (in 0.01002 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.08201 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 -> 475 (in 0.183874 sec)
[SIFT_MY] 191/380 (recall=0.502632) with average error=0.464552
[SIFT_MY] average size ratio between matched points: 1.54871
[SIFT_MY] average angle difference between matched points: -4.72397 degrees
[SIFT_MY] average descriptor distance between matched points: 0.369212 (random distance: 1.02985) => differentiability=0.358509
[       OK ] SIFT.Scale150 (353 ms)
[ RUN      ] SIFT.Scale175
[ORB_OCV] Points detected: 500 -> 500 (in 0.009989 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.082771 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 -> 461 (in 0.185226 sec)
[SIFT_MY] 162/351 (recall=0.461538) with average error=0.555716
[SIFT_MY] average size ratio between matched points: 1.78824
[SIFT_MY] average angle difference between matched points: 0.536875 degrees
[SIFT_MY] average descriptor distance between matched points: 0.423642 (random distance: 1.03122) => differentiability=0.410814
[       OK ] SIFT.Scale175 (359 ms)
[ RUN      ] SIFT.Scale200
[ORB_OCV] Points detected: 500 -> 500 (in 0.010083 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.082347 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 -> 471 (in 0.18786 sec)
[SIFT_MY] 153/320 (recall=0.478125) with average error=0.550671
[SIFT_MY] average size ratio between matched points: 2.02589
[SIFT_MY] average angle difference between matched points: -12.1815 degrees
[SIFT_MY] average descriptor distance between matched points: 0.31656 (random distance: 1.03178) => differentiability=0.306808
[       OK ] SIFT.Scale200 (360 ms)
[ RUN      ] SIFT.Rotate10Scale90
[ORB_OCV] Points detected: 500 -> 500 (in 0.009838 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.080582 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 -> 428 (in 0.175535 sec)
[SIFT_MY] 325/424 (recall=0.766509) with average error=0.622443
[SIFT_MY] average size ratio between matched points: 0.966647
[SIFT_MY] average angle difference between matched points: -0.792508 degrees
[SIFT_MY] average descriptor distance between matched points: 0.427394 (random distance: 1.03031) => differentiability=0.414819
[       OK ] SIFT.Rotate10Scale90 (342 ms)
[ RUN      ] SIFT.Rotate30Scale75
[ORB_OCV] Points detected: 500 -> 500 (in 0.009676 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.078698 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 -> 358 (in 0.164136 sec)
[SIFT_MY] 298/424 (recall=0.70283) with average error=1.02689
[SIFT_MY] average size ratio between matched points: 1.0085
[SIFT_MY] average angle difference between matched points: 4.32864 degrees
[SIFT_MY] average descriptor distance between matched points: 0.492526 (random distance: 1.03597) => differentiability=0.475427
[       OK ] SIFT.Rotate30Scale75 (331 ms)
[ RUN      ] SIFT.HerzJesu19RotateM40
[ORB_OCV] Points detected: 500 -> 500 (in 0.089857 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.96721 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: 449 -> 476 (in 2.95113 sec)
[SIFT_MY] 367/426 (recall=0.861502) with average error=3.05092
[SIFT_MY] average size ratio between matched points: 1.01553
[SIFT_MY] average angle difference between matched points: -18.4285 degrees
[SIFT_MY] average descriptor distance between matched points: 0.425653 (random distance: 1.03998) => differentiability=0.409291
[       OK ] SIFT.HerzJesu19RotateM40 (7949 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: 2979 keypoints so far
octave 1: 3842 keypoints so far
octave 2: 4001 keypoints so far
octave 3: 4032 keypoints so far
octave 4: 4056 keypoints so far
octave 5: 4063 keypoints so far
octave 6: 4065 keypoints so far
octave 7: 4065 keypoints so far
total keypoints: 4065
orientations: 4065 -> 4844 keypoints
descriptors: 4844 -> 4754 keypoints (some discarded due to border)
[       OK ] SIFT.DetectionSmokeTest (3333 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: 191/191 matched (100%), ref count=191
detected n keypoints: 191
[  MATCH  ] selectTopKeypoints_1: 191/191 matched (100%), ref count=191
selected n keypoints: 191
[  MATCH  ] computeOrientations: 202/202 matched (100%), ref count=202
oriented n keypoints: 202
[  MATCH  ] selectTopKeypoints_2: 202/202 matched (100%), ref count=202
selected n keypoints: 202
[  MATCH  ] computeDescriptors: 182/182 matched (100%), ref count=182 [with descriptors]
described n keypoints: 182
[       OK ] SIFT.DetectionDescriptionSteps (951 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 7241, right 6277
Good matches:       1179
Inlier matches:     1014
Final score: 1014
[       OK ] SIFT.PairMatching (6768 ms)
[----------] 25 tests from SIFT (26242 ms total)

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

@simiyutin simiyutin closed this Jun 13, 2026
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.

2 participants