Task01 Syrma Timur ITMO#132
Closed
timursyrma wants to merge 1 commit into
Closed
Conversation
Contributor
|
Задача зачтена, 7/10 баллов (штраф за пропуск дедлайна) 👍 |
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. SIFT определяет ориентацию голосованием в гистограмму — из-за дискретности бинов и сглаживания ошибка в несколько градусов неизбежна. При
PEAK_RATIO=0.999вторичные пики почти полностью срезаются: на точку остаётся один пик, двойников меньше, средний угол выходит точнее. Но точек становится меньше, recall падает.2. Запускаем тест с
OMP_NUM_THREADS=1и сOMP_NUM_THREADS=8, делим времена. Hyperthreading для такого кода почти не помогает, поэтому ускорение примерно равно числу физических ядер — на 8-ядернике обычно выходит ~6–7x.3. Можно, и мы именно так и сделали. Свёртка гауссиан складывается:
G(σ1) * G(σ2) = G(√(σ1²+σ2²)), поэтому блюр изlayers[0]с нужной инкрементальной сигмой даёт тот же результат. Пирамиды совпадают визуально. Доблюривать предыдущий слой быстрее — ядро свёртки меньше — но это оптимизация, не обязательное условие.4. Слой
sоктавыoи слой0октавыo+1должны выглядеть одинаково: у обоих σ = 2·σ0 в исходных координатах. Проверка: апскейлитьo+1в два раза, вычесть из слояsоктавыo— разность близка к нулю.5. DoG-слоёв нужно
s+2(чтобы у внутренних слоёв1..sбыл сосед с обеих сторон). Каждый DoG — это разность двух гауссиан, значит гауссиан нужно на одну больше:s+3.6. Плоские области — почти ноль. Края — яркие полосы со сменой знака. С ростом масштаба мелкие детали исчезают. Максимумы и минимумы должны встречаться примерно поровну.
7. При большем
sсоседние слои ближе по масштабу, DoG-значения слабее. Чтобы не потерять реальные точки, порог делят наs:thresh = contrast_threshold / s.8. Эти две строки:
sigma_win— 1.5× сигма точки (Lowe так и пишет).radius = 3σ— дальше этого вес гауссиана уже ничтожен.9. Вот эта строка:
float angle_invariant = angle - kp_angle_rad;Вычитаем ориентацию точки из угла каждого градиента — всё переходит в локальную систему координат. Плюс сама сетка патча тоже поворачивается: