BOUNTY STATUS UPDATE:коррекции искажений фишай программно
I discovered how to map a linear lens, от destination
координат source
координат.
Как вы рассчитываете радиальное расстояние от центра до перехода от рыбий глаз к прямолинейному?
1). Я действительно пытаюсь перевернуть его и сопоставить исходные координаты с координатами назначения. Что такое обратное, в коде в стиле преобразованных функций, которые я разместил?
2). Я также вижу, что мое искажение несовершенно на некоторых объективах - предположительно те, которые не являются строго линейными. Какова эквивалентность координат источника и места назначения для этих линз? Опять же, больше коды, чем просто математические формулы, пожалуйста ...
Question as originally stated:
У меня есть некоторые моменты, которые описывают позиции на снимке, выполненную с объективом.
Я хочу преобразовать эти точки в прямолинейные координаты. Я хочу исказить изображение.
Я нашел this description, как создать эффект рыбий глаз, но не как его изменить.
Существует также blog post, в котором описано, как использовать инструменты для этого; эти картины от:
(1): SOURCE
Original photo link
Вход: Исходное изображение с искажением рыбий глаз, чтобы исправить.
(2): DESTINATION
Original photo link
Выход: исправленное изображение (технически также с перспективной коррекции, но это отдельный шаг).
Как вы рассчитываете радиальное расстояние от центра, чтобы перейти от рыбий глаз к прямолинейному?
Моей функция окурка выглядит следующим образом:
Point correct_fisheye(const Point& p,const Size& img) {
// to polar
const Point centre = {img.width/2,img.height/2};
const Point rel = {p.x-centre.x,p.y-centre.y};
const double theta = atan2(rel.y,rel.x);
double R = sqrt((rel.x*rel.x)+(rel.y*rel.y));
// fisheye undistortion in here please
//... change R ...
// back to rectangular
const Point ret = Point(centre.x+R*cos(theta),centre.y+R*sin(theta));
fprintf(stderr,"(%d,%d) in (%d,%d) = %f,%f = (%d,%d)\n",p.x,p.y,img.width,img.height,theta,R,ret.x,ret.y);
return ret;
}
С другой стороны, я мог какое-то образом преобразовать изображение из Рыбьего глаза к прямолинейному, прежде чем найти точки, но я полностью одурманен OpenCV documentation. Есть ли простой способ сделать это в OpenCV, и он работает достаточно хорошо, чтобы сделать это с живой видео-лентой?
Я не совсем понимаю, что вы находясь в поиске. Карты рыбий глаз от сферы к плоскости изображения. Обратное отображение будет от изображения обратно к сфере справа? Какую прямолинейную координату вы ищете? – mtrw
@mtrw Мое исходное изображение искажено fisheye, и я хочу его недооценить – Will
Так выглядит ли картинка на http://photo.net/learn/fisheye/, что вы ищете? – mtrw