Я использовал этот вопрос , чтобы помочь мне придумать неискаженную скоординированную систему изображения.Теперь я не уверен, как внедрить новую систему координат в изображение, чтобы иметь возможность создавать неискаженное изображение.
У меня проблемы с поиском ответов, которые не связаны с Matlab, OpenCV или C ++ , поскольку я использую R .
Ответ, который я использую из приведенного вопроса, дал мне следующую преобразованную координату xy:
1 -19.50255239, -19.50255239
2 -18.26735544, -18.26735544
3 -17.03391152, -17.03391152
4 -15.80221494, -15.80221494
5 -14.57225998, -14.57225998
6 -13.34404095, -13.34404095
...
и т. Д. Для 512 пикселей в изображении 512 x 512.
Как применить это обратно к исходному изображению 512 x 512 - вот с чем я борюсь.Я видел некоторые упоминания на страницах, таких как Open CV page здесь и конкретных предопределенных сдвигов или широтных / продольных сдвигов , используйте SpatialObjectsDataFrame с, но не из одного определенного пользователем списка координат xy в другой.
-Пример получения координат исходного изображения:
im_coords <- RSAGA::grid.to.xyz(as.matrix(as.raster(im)))
(обратите внимание, на самом деле я не хочу растровых изображений, это то, что я нашел в то время)
-Код я использую, чтобы получить преобразованные координаты:
undistort <- function(X, Y, a, b, c, d = 1, imWidth = 512, imHeight = 512) {
#radial barrel distortion
normX <- X - (imWidth / 2)
normY <- Y - (imHeight / 2)
#rmax
radius_u <- sqrt(imWidth^2 + imHeight^2)
#normalize r so that its between 0 and 1
r <- sqrt(normX^2 + normY^2) / radius_u
#Barrel distorition equation: where "r" is the destination radius and "Rsrc" is the source pixel to get the pixel color from
Rsrc <- r * (a*r^3 + b*r^2 + c*r + d)
theta <- ifelse(Rsrc == 0, 1, 1 / atan(Rsrc) * Rsrc)
newX <- (imWidth / 2) + theta * normX
newY <- (imHeight / 2) + theta * normY
return(data.frame(X = newX, Y = newY))
}
Вот пример образца 512x512 .png баррель искаженного изображения: https://imgur.com/a/W9Qz70W
Мне интересно, может ли кригинг быть полезным?Или gdalwarp или proj4string ?Не уверен, как их реализовать.
ОБНОВЛЕНИЕ: Используя рекомендации Рохита, я смог исказить радужную сетку из:
к этому:
Когда я пробую это с изображением бочки, я получаю это странное наложенное изображение:
Хорошо, я думаю, это зависит от того, какие коэффициенты вы используете, как показано здесь: