Task02 Syrma Timur ITMO#133
Closed
timursyrma wants to merge 2 commits into
Closed
Conversation
Contributor
как раз таки такое он и не пропускает, потому что требует чтобы второе соответствие было заметно хуже и множитель заметно меньше единицы) |
Contributor
Кажется что полезно в том числе тренировать навык проверять корректность взаимодействия в точках интерфейса своего кода и библиотечного, подглядывание в доку, придумывание быстрых тестов и тд |
Contributor
|
Задача зачтена, (8 + 1 + 3 - 2) 10/8 баллов 👍 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Перечислите идеи и коротко обозначьте мысли которые у вас возникали по мере выполнения задания, в частности попробуйте ответить на вопросы:
1)
Ratio test и cluster filter нужны, потому что RANSAC работает только если правильных матчей хватает. При 90% шума вероятность случайно набрать 4 правильные точки за 500 попыток почти нулевая: (0.1)^4 ≈ 0.0001, нужно 50 000 итераций. После фильтрации доля правильных поднимается до 90%+, и хватает десятков. Плюс каждая итерация RANSAC проверяет гипотезу на всех матчах, так что меньше матчей = быстрее.
Есть менее очевидная причина: при большом числе случайно согласованных ложных матчей RANSAC может найти ложную гомографию с большим числом инлаеров, чем у правильной. Фильтры снижают шанс такого стечения.
2)
Cluster filter требует плотного облака правильных матчей. При сильном изменении масштаба или малом перекрытии правильных мало, они разреженны, у каждого не набирается 4 согласованных соседей — фильтр выметает их вместе с шумом. Ratio test здесь работает, потому что смотрит только на сам дескриптор.
Обратная ситуация: повторяющаяся текстура (забор, кирпичная кладка). Дескриптор похож на десятки точек с почти одинаковым расстоянием, ratio test такое пропускает (отношение ≈ 1). Cluster filter может это отсечь как геометрически несогласованное.
3)
Матрица гомографии определена с точностью до масштаба, зафиксировать можно любой ненулевой элемент. Проблема в том, что для некоторых конфигураций H33 → 0 — нормировка даёт деление на маленькое число, результат нестабилен. Решение — SVD: решать Ah = 0 с ||h|| = 1 без предположений о конкретных элементах. Плюс SVD сразу даёт решение наименьших квадратов для избыточной системы N > 4 точек.
4)
Перспективное искажение нарастает от корня к краям. При нецентральном корне одна сторона панорамы вытягивается, другая выглядит нормально. Но и при центральном корне ошибки гомографий накапливаются по цепочке: картинки далеко от корня выравниваются плохо.
Для ортофото это серьёзно: метрическая корректность нарушается. Правильный путь — bundle adjustment, оптимизация всех гомографий одновременно, а не последовательно.
Ещё один момент: гомографии предполагают плоскую сцену. Если снимается 3D-объект (здание, рельеф), одна гомография не описывает совмещение правильно — это уже не ошибка накопления, а принципиальное ограничение.
5)
Перебирать все N*(N-1)/2 пар дорого. Обычно делают так: каждое изображение сворачивают в глобальный дескриптор (VLAD, BoVW, NetVLAD), строят ANN-индекс и для каждой картинки находят K ближайших соседей. Полный матчинг с RANSAC делают только для них. Из пар с достаточным числом инлаеров строят граф и берут максимальное остовное дерево. Корень — картинка с наибольшей суммой инлаеров по рёбрам, обычно это самая центральная в сцене.
6)
SIFT прошёл все 25 тестов.
7)
Больше всего понравилась часть с гомографией — DLT, RANSAC, уточнение по инлаерам вместе дают ощущение законченного алгоритма. Cluster filter оказался неожиданно интересным: сначала казалось, что ratio test достаточно, но потом стало понятно, почему геометрическая согласованность нужна отдельно.
Неочевидный момент, на котором потерял время: FLANN возвращает квадраты расстояний, а не расстояния. Нигде явно не написано. Было бы полезно добавить комментарий к TODO ratio test.
Github Actions CI