Skip to content

Task01 Леонид Альжанов ITMO#13

Closed
lalzhanov wants to merge 1 commit intoPhotogrammetryCourse:task01from
lalzhanov:task01
Closed

Task01 Леонид Альжанов ITMO#13
lalzhanov wants to merge 1 commit intoPhotogrammetryCourse:task01from
lalzhanov:task01

Conversation

@lalzhanov
Copy link

@lalzhanov lalzhanov commented Mar 2, 2026

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

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

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

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

Обычно подобные замеры делаются или через вызовы функций подсчёта времени перед и после выполнения части кода с ускорением и без. На моём железе (Ryzen 9 5900x, 12 core, 24 thread), ускорение при использовании всех потоков составило около 20-30%. Оно не оказалось достаточно существенным скорее всего из-за большой завязанности этой задачи на памяти и overhead-а от внутренней инициализации и завершения процессов в openmp.

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

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

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

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

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

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

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

При увеличении номера слоя должны быть сильно выделены детали увеличивающихся размеров.

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

Потому что при увеличении числа слоёв, разница в сигмах меньше, значит и разница в картинках меньше, из-за чего их амплитуда уменьшается.

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

эта

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

из-за этой

  1. Последний TODO в коде

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

Github Actions CI

$ ./build/test_sift
[==========] 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.01073 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.087729 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.176779 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 (347 ms)
[ RUN      ] SIFT.MovedImageRight
[ORB_OCV] Points detected: 500 -> 500 (in 0.011739 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.081238 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.175917 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 (344 ms)
[ RUN      ] SIFT.MovedImageLeft
[ORB_OCV] Points detected: 500 -> 500 (in 0.009718 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.080539 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.173735 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 (334 ms)
[ RUN      ] SIFT.MovedImageUpHalfPixel
[ORB_OCV] Points detected: 500 -> 500 (in 0.009182 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.079167 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.176719 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 (336 ms)
[ RUN      ] SIFT.MovedImageDownHalfPixel
[ORB_OCV] Points detected: 500 -> 500 (in 0.009477 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.082399 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.179888 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 (341 ms)
[ RUN      ] SIFT.Rotate10
[ORB_OCV] Points detected: 500 -> 500 (in 0.00899 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.077985 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.177429 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 (335 ms)
[ RUN      ] SIFT.Rotate20
[ORB_OCV] Points detected: 500 -> 500 (in 0.008848 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.076763 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.178392 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.28393 degrees
[SIFT_MY] average descriptor distance between matched points: 0.34562 (random distance: 1.01898) => differentiability=0.339182
[       OK ] SIFT.Rotate20 (334 ms)
[ RUN      ] SIFT.Rotate30
[ORB_OCV] Points detected: 500 -> 500 (in 0.00882 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.08048 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.181009 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 (343 ms)
[ RUN      ] SIFT.Rotate40
[ORB_OCV] Points detected: 500 -> 500 (in 0.008958 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.081604 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.179219 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 (342 ms)
[ RUN      ] SIFT.Rotate45
[ORB_OCV] Points detected: 500 -> 500 (in 0.009646 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.083085 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.183934 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 (347 ms)
[ RUN      ] SIFT.Rotate90
[ORB_OCV] Points detected: 500 -> 500 (in 0.00943 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.077638 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.168101 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 (325 ms)
[ RUN      ] SIFT.Scale50
[ORB_OCV] Points detected: 500 -> 500 (in 0.008935 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.07316 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.138224 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 (290 ms)
[ RUN      ] SIFT.Scale70
[ORB_OCV] Points detected: 500 -> 500 (in 0.009064 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.075233 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.160296 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 (316 ms)
[ RUN      ] SIFT.Scale90
[ORB_OCV] Points detected: 500 -> 500 (in 0.009062 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.081944 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.176491 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 (338 ms)
[ RUN      ] SIFT.Scale110
[ORB_OCV] Points detected: 500 -> 500 (in 0.009341 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.08185 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.13855 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.183866 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 (346 ms)
[ RUN      ] SIFT.Scale130
[ORB_OCV] Points detected: 500 -> 500 (in 0.009602 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.081602 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.185757 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 (350 ms)
[ RUN      ] SIFT.Scale150
[ORB_OCV] Points detected: 500 -> 500 (in 0.009541 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.08358 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.185903 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.009484 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.083215 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.186185 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.536876 degrees
[SIFT_MY] average descriptor distance between matched points: 0.423642 (random distance: 1.03122) => differentiability=0.410814
[       OK ] SIFT.Scale175 (353 ms)
[ RUN      ] SIFT.Scale200
[ORB_OCV] Points detected: 500 -> 500 (in 0.009751 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.082892 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.188797 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.316559 (random distance: 1.03178) => differentiability=0.306808
[       OK ] SIFT.Scale200 (355 ms)
[ RUN      ] SIFT.Rotate10Scale90
[ORB_OCV] Points detected: 500 -> 500 (in 0.009581 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.077665 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.171611 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.792507 degrees
[SIFT_MY] average descriptor distance between matched points: 0.427394 (random distance: 1.03031) => differentiability=0.414819
[       OK ] SIFT.Rotate10Scale90 (329 ms)
[ RUN      ] SIFT.Rotate30Scale75
[ORB_OCV] Points detected: 500 -> 500 (in 0.009339 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.076582 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.160427 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 (317 ms)
[ RUN      ] SIFT.HerzJesu19RotateM40
[ORB_OCV] Points detected: 500 -> 500 (in 0.101388 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.69274 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.35544 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 (7055 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 (3438 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 (890 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 (6517 ms)
[----------] 25 tests from SIFT (24975 ms total)
[----------] Global test environment tear-down
[==========] 25 tests from 1 test suite ran. (24976 ms total)
[  PASSED  ] 25 tests.

@simiyutin
Copy link
Contributor

Все хорошо, задача зачтена, 10/10 баллов 👍

@simiyutin simiyutin closed this Mar 7, 2026
@simiyutin
Copy link
Contributor

simiyutin commented Mar 7, 2026

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

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