Skip to content

Task01 Евгений Новокшанов ИТМО ПОВС#14

Open
NovokshanovE wants to merge 3 commits intoPhotogrammetryCourse:task01from
NovokshanovE:task01
Open

Task01 Евгений Новокшанов ИТМО ПОВС#14
NovokshanovE wants to merge 3 commits intoPhotogrammetryCourse:task01from
NovokshanovE:task01

Conversation

@NovokshanovE
Copy link

@NovokshanovE NovokshanovE commented Mar 3, 2026

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

Как я это понял, SIFT определяет угол по локальной гистограмме градиентов в некоторой окрестности точки. То есть он смотрит не на настоящий геометрический угол поворота картинки, а на то, какое направление градиентов оказалось самым "сильным" в этой небольшой области. Из-за этого появляется ошибка.

Мне кажется, основная причина в том, что:

  • ориентация считается по дискретной сетке пикселей;
  • градиенты шумят;
  • окно вокруг точки конечное и гауссово взвешенное;
  • потом ещё есть квантование по бинам гистограммы.

Также как я понял SIFT выбирает доминирующее направление локальной структуры, а оно не всегда совпадает с реальным глобальным поворотом всей картинки, особенно если текстура асимметричная или в окрестности несколько сильных направлений.

Если поставить ORIENTATION_VOTES_PEAK_RATIO = 0.999, ситуация может немного измениться, но не потому, что угол станет сам по себе точнее, а потому что SIFT начнёт брать почти только самый высокий пик гистограммы. При более мягком пороге могут появляться дополнительные ориентации для одной точки, если рядом есть второй достаточно сильный пик. При очень высоком пороге таких дубликатов будет меньше.

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

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

Как мне кажется, надёжно это надо мерить так:

  • брать один и тот же исполняемый файл;
  • запускать на одном и том же наборе входных данных;
  • несколько раз прогонять каждый режим;
  • отдельно мерить OMP_NUM_THREADS=1 и OMP_NUM_THREADS=N;

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

То есть идея такая:

  • однопоточный запуск: OMP_NUM_THREADS=1;
  • многопоточный запуск: OMP_NUM_THREADS=<число потоков>;
  • дальше ускорение считать как

S = T_p/T_1

где:

  • T_1 — время однопоточного запуска,
  • T_p — время многопоточного запуска.

На моём компьютере:

  • процессор: AMD Ryzen AI 9 HX 370;
  • ядер: 12;
  • потоков: 24.

При подключении параллелизма получаю ускорение в 1.46x.

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

Как я понял, так делать можно, если правильно посчитать итоговую сигму. Я у себя как раз строил слои от первого слоя октавы, и это работает.

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

Получается так:

  • от первого слоя — проще;
  • от предыдущего — обычно эффективнее.

Если всё посчитано правильно, визуально пирамиды должны быть почти одинаковые)

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

Я бы ожидал, что внутри одной октавы каждая следующая картинка всё более размытая, а между октавами размер уменьшается в 2 раза.

Проверять проще всего визуально:

  • сохранить слои;
  • посмотреть, что размытие растёт плавно и ожидаемо.

Базовый слой новой октавы должен быть похож на один из слоёв прошлой октавы после уменьшения в 2 раза. Если размеры разные, можно просто привести их к одному размеру и сравнить глазами.

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

Потому что DoG строится как разность соседних Gaussian-слоёв. Если Gaussian-слоёв N, то DoG-слоёв будет N-1.

Для поиска экстремумов нужны не просто s полезных DoG-слоёв, а ещё соседи сверху и снизу по масштабу. Поэтому нужен запас.

Из-за этого и берут s+3 Gaussian-картинки, чтобы после вычитания хватило слоёв для нормальной проверки максимумов и минимумов.

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

Я бы ожидал, что DoG выглядит не как обычная картинка, а как карта "неровностей".

То есть:

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

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

Если слоёв в октаве больше, то соседние масштабы становятся ближе друг к другу. Значит и разница между соседними Gaussian-слоями меньше.

А DoG как раз строится из этой разницы. Поэтому значения DoG тоже становятся слабее.

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

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

По смыслу главная строка вот эта:

float sigma_win = 1.5f * kp_sigma_octave;

А уже из неё считается радиус окна:

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

Эта строка:

float angle_invariant = angle - kp_angle_rad;

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

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.011784 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.091171 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.114454 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 (294 ms)
[ RUN      ] SIFT.MovedImageRight
[ORB_OCV] Points detected: 500 -> 500 (in 0.010027 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.081997 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.102557 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 (270 ms)
[ RUN      ] SIFT.MovedImageLeft
[ORB_OCV] Points detected: 500 -> 500 (in 0.009646 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.082965 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.1035 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 (267 ms)
[ RUN      ] SIFT.MovedImageUpHalfPixel
[ORB_OCV] Points detected: 500 -> 500 (in 0.009592 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.09397 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.104742 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 (279 ms)
[ RUN      ] SIFT.MovedImageDownHalfPixel
[ORB_OCV] Points detected: 500 -> 500 (in 0.009578 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.082261 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.104596 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 (267 ms)
[ RUN      ] SIFT.Rotate10
[ORB_OCV] Points detected: 500 -> 500 (in 0.009657 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.082328 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.104672 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 (268 ms)
[ RUN      ] SIFT.Rotate20
[ORB_OCV] Points detected: 500 -> 500 (in 0.009642 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.082585 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.106967 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 (271 ms)
[ RUN      ] SIFT.Rotate30
[ORB_OCV] Points detected: 500 -> 500 (in 0.009628 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.08238 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.104345 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 (269 ms)
[ RUN      ] SIFT.Rotate40
[ORB_OCV] Points detected: 500 -> 500 (in 0.009641 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.082617 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.103477 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 (269 ms)
[ RUN      ] SIFT.Rotate45
[ORB_OCV] Points detected: 500 -> 500 (in 0.009618 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.082295 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.106593 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 (271 ms)
[ RUN      ] SIFT.Rotate90
[ORB_OCV] Points detected: 500 -> 500 (in 0.009566 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.08233 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.100815 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 (265 ms)
[ RUN      ] SIFT.Scale50
[ORB_OCV] Points detected: 500 -> 500 (in 0.009184 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.078958 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.088435 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 (247 ms)
[ RUN      ] SIFT.Scale70
[ORB_OCV] Points detected: 500 -> 500 (in 0.009377 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.080874 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.093784 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 (254 ms)
[ RUN      ] SIFT.Scale90
[ORB_OCV] Points detected: 500 -> 500 (in 0.009553 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.082312 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.103674 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 (266 ms)
[ RUN      ] SIFT.Scale110
[ORB_OCV] Points detected: 500 -> 500 (in 0.009626 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.08308 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.104991 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 (269 ms)
[ RUN      ] SIFT.Scale130
[ORB_OCV] Points detected: 500 -> 500 (in 0.009665 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.083923 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.135475 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 (302 ms)
[ RUN      ] SIFT.Scale150
[ORB_OCV] Points detected: 500 -> 500 (in 0.010519 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.087087 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.10618 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 (279 ms)
[ RUN      ] SIFT.Scale175
[ORB_OCV] Points detected: 500 -> 500 (in 0.010246 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.08436 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.108837 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 (277 ms)
[ RUN      ] SIFT.Scale200
[ORB_OCV] Points detected: 500 -> 500 (in 0.010264 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.084953 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.110673 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 (280 ms)
[ RUN      ] SIFT.Rotate10Scale90
[ORB_OCV] Points detected: 500 -> 500 (in 0.01001 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.085934 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.107371 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 (285 ms)
[ RUN      ] SIFT.Rotate30Scale75
[ORB_OCV] Points detected: 500 -> 500 (in 0.010005 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.086788 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 -> 356 (in 0.097913 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.02215) => differentiability=0.481852
[       OK ] SIFT.Rotate30Scale75 (276 ms)
[ RUN      ] SIFT.HerzJesu19RotateM40
[ORB_OCV] Points detected: 500 -> 500 (in 0.0868 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.77176 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 1.52858 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 (6216 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 6: 2 keypoints
octave 7: 0 keypoints
octave 4: 24 keypoints
octave 5: 7 keypoints
octave 2: 159 keypoints
octave 3: 31 keypoints
octave 0: 2979 keypoints
octave 1: 863 keypoints
total keypoints: 4065
orientations: 4065 -> 4844 keypoints
descriptors: 4844 -> 4754 keypoints (some discarded due to border)
[       OK ] SIFT.DetectionSmokeTest (2854 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 (901 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 (5036 ms)
[----------] 25 tests from SIFT (20733 ms total)

[----------] Global test environment tear-down
[==========] 25 tests from 1 test suite ran. (20733 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