赏金状态更新:
我发现了如何将线性镜头从目标坐标映射到源坐标。,即从destination
坐标到source
坐标的映射。
如何计算从鱼眼到矩形的径向距离?
1) 我实际上很难反过来,将源坐标映射到目标坐标。请问在我发布的转换函数风格中,逆变换是什么?
2) 我还发现我的去畸变对某些镜头不完美-可能是那些不严格线性的镜头。对于这些镜头,相应的源坐标和目标坐标是什么?请再次提供更多代码而不仅仅是数学公式...
我有一些描述鱼眼镜头拍摄图像中位置的点。
我想将这些点转换为直角坐标系。我想去除图像失真。
我找到了如何产生鱼眼效果的此描述,但没有找到如何反转它。
还有一个博客文章描述了如何使用工具来完成它; 这些图片来自那里:
(1) : SOURCE 原始照片链接 Input : 带鱼眼失真的原始图像。
(2) : DESTINATION 原始照片链接 Output : 纠正后的图像(技术上还包括透视校正,但这是一个单独的步骤)。
如何计算从中心到边缘的径向距离以从鱼眼转换为直角?
我的函数存根看起来像这样:
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文档让我完全困惑了。在OpenCV中有一种简单的方法吗?它的性能是否足够好,可以用于实时视频流?