Обратное искажение Рыбий глаз

Я работаю с камерой типа «рыбий глаз», и перед дальнейшими вычислениями мне нужно обратить искажение,
В этом вопросе это происходит Исправление искажения типа «рыбий глаз»

src = cv.LoadImage(src)
dst = cv.CreateImage(cv.GetSize(src), src.depth, src.nChannels)
mapx = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_32F, 1)
mapy = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_32F, 1)
cv.InitUndistortMap(intrinsics, dist_coeffs, mapx, mapy)
cv.Remap(src, dst, mapx, mapy, cv.CV_INTER_LINEAR + cv.CV_WARP_FILL_OUTLIERS,  cv.ScalarAll(0))

Проблема с этим заключается в том, что таким образом функции переназначения проходят через все точки и создают новую картинку из. это занимает много времени, чтобы сделать это каждый кадр.
Их путь, который я ищу, — это иметь точечный перевод на изображении типа «рыбий глаз» к нормальным координатам изображения.

Подход, который мы используем, состоит в том, чтобы выполнить все вычисления во входном кадре и просто преобразовать координаты результата в мировые координаты, чтобы мы не хотели проходить через все точки изображения и создавать из него новую точку. (Время действительно важно для нас)

В матрицах mapx и mapy есть некоторые двухточечные переводы, но многие точки не имеют полного перевода.
Я пытался интерполировать эту матрицу, но результат оказался не тем, что я искал.

Буду признателен за любую помощь, даже другие подходы, которые более эффективны по времени, чем cv.Remap.

Спасибо

0

Решение

Я думаю, что вы хотите cv.UndistortPoints().

Предполагая, что вы обнаружили некоторые точечные объекты distorted в вашем искаженном изображении вы должны сделать что-то вроде этого:

cv.UndistortPoints(distorted, undistorted, intrinsics, dist_coeffs)

Это позволит вам работать с неискаженными точками без создания нового неискаженного изображения для каждого кадра.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]