#c #algorithm #points
#c #алгоритм #Очки
Вопрос:
У меня есть 2 изображения одной и той же сцены, но с небольшой разницей. Это связано с тем, что я сделал снимок с помощью 2 разных устройств, и одно из них не совсем правильное. Это создает небольшую проблему с параллаксом где-то на фотографии. Это действительно незначительно, когда вы сравниваете 2 фотографии, но достаточно тревожно для того, что я хочу сделать с этими изображениями.
Мой вопрос: каков был бы наилучший алгоритм для минимизации созданной ошибки?
Я думал вот о чем: выберите точки X на первом изображении, выберите точки их соответствия на другом изображении, затем создайте функцию, которая проецирует первые точки на другие, а затем примените эту функцию ко всем точкам сцены. Что-то вроде этого: (Красные точки — выбранные точки, а другие цвета — деформация каждой точки в сцене (вероятно, неверно, поскольку я сделал это быстро).
Будет ли это хорошим способом продолжить? Если да, какой был бы хороший алгоритм интерполяции с использованием точек.
Если нет, есть ли какой-либо другой алгоритм, который я мог бы использовать для минимизации ошибки?
Большое спасибо!
Ответ №1:
Да, используя 4 пары точек, вы можете вычислить матрицу преобразования перспективы, а затем применить это преобразование ко всему изображению.
Библиотека OpenCV содержит getPerspectiveTransform
функцию для этого случая (также findHomography
). Вы также можете применить warpPerspective
для исправления изображения.
Комментарии:
1. Я уже пробовал несколько алгоритмов opencv (estimate2Daffine, perspective, homography), и поскольку каждый результат был неправильным, мне интересно, можно ли исправить ошибку параллакса с помощью такого алгоритма. Для меня я думаю, что нет, потому что этот алгоритм предполагает, что все изменения являются глобальными для изображения, в то время как в моем случае возможно, что это не глобальная модификация (я думаю). Например, при параллаксе ошибка увеличивается, поскольку объект находится далеко от целей :/
2. Такое (перспективное) преобразование вносит коррекцию только для одной плоскости. Две фотографии с разных точек позволяют оценить глубину объектов сцены с определенными точками, но я сомневаюсь, что коррекция для всех расстояний может быть выполнена качественно