C++ opencv неискаженное изображение по пикселям
У меня искаженное изображение и данные калибровки, необходимые для его искажения. Я использую openCv, но не могу использовать функцию неискажения, так как данные, которые у меня есть для коэффициентов искажения, находятся в двухпараметрической модели. Разговаривая с производителем камеры, у меня есть математика, необходимая для расчета искажения. Это выглядит так:
//calculate the radius
Point2d pr; //distorted point/pixel
double dx = (pr.x - ppx);
double dy = (a * pr.y - a * ppy);
//calculate the scale factor
double s = 1 + (pow(vrx, 2) + pow(vry, 4));
//correct the distortion per point
Point2d pc; //undistorted point/pixel
pc.x = ((s * dx) + ppx);
pc.y= ((s * dy) + ppy) / a;
Все хорошо. Теперь, как мне запустить это через изображение OpenCv Mat и создать новое изображение из продукта?
Должен ли я взять мат, циклически создавая Point2d из каждой записи строки / столбца, а затем преобразовать полученные точки обратно в мат? Или есть лучший способ?
Спасибо всем.