Как стать автором
Обновить

Комментарии 19

Спасибо за статью. Было очень приятно почитать и увидеть, что не перевелись еще те кто готовы выкладывать статьи с кучей математики внутри на хабр.
А где хотя бы простенькая реализация? Чтобы пощупать, так сказать…
Это похоже.
Да нет: я про реализацию алгоритма, а не про готовую функцию в какой-то библиотеке.
Не вижу смысла OpenCV для всякой элементарщины тащить.
Существует ли простой пример, в котором каждый шаг итеративного подхода не натыкается на вырожденную или близкую к вырожденной матрицу, но сам итеративный процесс не является сходящимся?
В общем-то это возможно, если попадется такой участок изображения, на котором от итерации к итерации частная производная по какому-нибудь направлению будет менять знак. В этом случае мы можем не достичь требуемой точности.
Что будет делать алгоритм, если в окрестности точки оказался резкий перепад яркости? Тогда на нём производные dI/dx, dI/dy будут очень большими, и в методе наименьших квадратов эти точки просто задавят все остальные. Отследит ли алгоритм сдвиг этого перепада? Или просто скажет, что поток может идти только вдоль ребра?
Многое зависит от весовой функции g. Допустим, мы используем гауссиану. Тогда, когда в окрестность точки попадет резкий перепад, он действительно перетянет вектор смещения в свою сторону. В результате вместо такого же резкого перепада в смещениях мы получим «размытие», ширина которого в общем-то равна половине ширины локальной окрестности.

Если нам важно получить четкую границу, мы можем выбрать такую весовую функцию, которая зависит не только от позиции пикселя в окрестности, но и от значения его яркости. Тогда мы сможем дать пикселю тем меньший вес, чем больше его яркость отличается от яркости центрального пикселя. Это решит проблему с границей, но наверняка скажется на стабильности, особенно для зашумленных изображений.
Спасибо, было очень интересно.

Подскажите подход к решению задачки: как на стерео потоке, (т.е. 2 камеры снимают одну и ту же картинку, расстояние между камерами известно) определить расстояние до объекта? Интересует прикладное решение, может библиотеки какие готовые есть? В общем куда копать?
модуль calib3d в OpenCV.
Для начала можно прочесть: habrahabr.ru/post/130300/
А потом, как уже посоветовали, использовать для этого OpenCV.
Отличная статья. Спасибо.
Маленький совет. Чтобы не заморачиваться с заливкой картинок формул на habrastorage, есть отличный стабильный онлайн сервис для TEX формул http://www.codecogs.com/latex/eqneditor.php

Как раз этот сервис использовал, чтобы картинки получить, но увидел его впервые, потому не было уверенности в надёжности. Буду знать, спасибо.
А если функция не такая гладкая? Если смещение может быть на 120 пикселей?
Придётся, видимо, применять общие методы сопоставления изображений. Кстати, какие сейчас популярны?
По квадратикам :-) По крайней мере, для сжатия видео до сих пор используется что-то такое, разве что полный перебор оптимизируют.

Я недавно искал решение для похожей задачи — автоматического сопоставления RGB каналов для удаления хроматических аберраций по одной фотографии. Удивительно мало на эту тему информации.
А не по уголкам? Был какой-то алгоритм, где ищут уголки, считают у них сигнатуры, а потом ищут наиболее адекватное соответствие между фотографиями (с сохранением метрики). Использовалось для сшивок панорамы.
RGB я тоже пытался сопоставлять — для получения инфракрасных трёхканальных снимков. Ничего лучше, чем вручную двигать channels в фотошопе, не придумалось.
Вы вероятно имеете в виду методы на основе feature points, вот описание того как эти особенности искать SIFT, SURF. Потом строят соответствия(просто ближайшие дескрипторы берут), затем каким нибудь RANSAC или как я описывал фильтруют соответствия и строят матрицу гомографии между изображениями.
Для больших смещений скорее всего действительно лучше подойдет сопоставление блоков

Хотя дифференциальный метод тоже можно приспособить. Для этого изображения нужно уменьшить, скажем в два раза, затем уменьшенные копии снова уменьшить, и так несколько раз. Если представить себе все эти копии одну над другой (чем меньше, тем выше), то получится нечто, напоминающее пирамиду. Поэтому этот способ еще называют Gaussian pyramid. Сначала ищем смещения для самых мелкий копий (они будут небольшими), и используем их, чтобы компенсировать смещение на следующем уровне. И так далее, пока не дойдем до оригинального размера.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории