минимизация ошибки параллакса путем выбора точек

#c #algorithm #points

#c #алгоритм #Очки

Вопрос:

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

Мой вопрос: каков был бы наилучший алгоритм для минимизации созданной ошибки?

Я думал вот о чем: выберите точки X на первом изображении, выберите точки их соответствия на другом изображении, затем создайте функцию, которая проецирует первые точки на другие, а затем примените эту функцию ко всем точкам сцены. Что-то вроде этого: введите описание изображения здесь (Красные точки — выбранные точки, а другие цвета — деформация каждой точки в сцене (вероятно, неверно, поскольку я сделал это быстро).

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

Если нет, есть ли какой-либо другой алгоритм, который я мог бы использовать для минимизации ошибки?

Большое спасибо!

Ответ №1:

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

Библиотека OpenCV содержит getPerspectiveTransform функцию для этого случая (также findHomography ). Вы также можете применить warpPerspective для исправления изображения.

Пример

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

1. Я уже пробовал несколько алгоритмов opencv (estimate2Daffine, perspective, homography), и поскольку каждый результат был неправильным, мне интересно, можно ли исправить ошибку параллакса с помощью такого алгоритма. Для меня я думаю, что нет, потому что этот алгоритм предполагает, что все изменения являются глобальными для изображения, в то время как в моем случае возможно, что это не глобальная модификация (я думаю). Например, при параллаксе ошибка увеличивается, поскольку объект находится далеко от целей :/

2. Такое (перспективное) преобразование вносит коррекцию только для одной плоскости. Две фотографии с разных точек позволяют оценить глубину объектов сцены с определенными точками, но я сомневаюсь, что коррекция для всех расстояний может быть выполнена качественно