Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过鱼眼扭曲函数扭曲直线,并在图像中正确绘制_C++_Opencv_Computer Vision_Fisheye - Fatal编程技术网

C++ 通过鱼眼扭曲函数扭曲直线,并在图像中正确绘制

C++ 通过鱼眼扭曲函数扭曲直线,并在图像中正确绘制,c++,opencv,computer-vision,fisheye,C++,Opencv,Computer Vision,Fisheye,我在世界坐标中有一条线,并将其投影到一个图像(如本问题所述)。这将在图像空间中生成一个简单的直线方程,因此我可以在图像中轻松地使用OpenCV打印它 现在,我想将线条投影到鱼眼相机图像中。因为我有一个对应的非线性失真函数,我可以很容易地扭曲点。现在最简单的方法是通过此函数从生成的线扭曲每个点。但这将导致几个线段和未设置的像素(通常属于扭曲线) 我想知道怎样才能得到一条正确的扭曲线。也许还需要以不同的方式处理直线投影?我可以更频繁地对straigt线进行采样(即使用亚像素坐标),但我认为这并不能保

我在世界坐标中有一条线,并将其投影到一个图像(如本问题所述)。这将在图像空间中生成一个简单的直线方程,因此我可以在图像中轻松地使用OpenCV打印它

现在,我想将线条投影到鱼眼相机图像中。因为我有一个对应的非线性失真函数,我可以很容易地扭曲点。现在最简单的方法是通过此函数从生成的线扭曲每个点。但这将导致几个线段和未设置的像素(通常属于扭曲线)

我想知道怎样才能得到一条正确的扭曲线。也许还需要以不同的方式处理直线投影?我可以更频繁地对straigt线进行采样(即使用亚像素坐标),但我认为这并不能保证得到正确的解决方案

编辑:

我的失真函数是一个简单的多项式

r(a) = k1*a+k2*a^2+k3*a^3+k4*a^4

其中,
a
是未畸变入射光线与光轴的角度,
r
是畸变图像中像素的半径。您可以阅读更多关于这方面的内容。

简单的解决方案确实是提高您的线路分辨率。 如果添加更多像素(子像素更好),则在失真后将获得外观更好的图像

我认为更正确的方法是向后映射。找到从畸变图像中的每个像素(正方形、整数)到未畸变图像中的像素(四边形、实数)的映射。 这将确保在扭曲的线条上没有任何孔


请张贴(或指向)您打算使用的镜头畸变模型的方程式。@Francescocalari:我在我原来的帖子中添加了这些信息。我已经有了一个带有相应反向映射的查找表。因为我在未失真图像中有一个直线方程,所以我可以计算失真图像中的直线,正如你所说的。但这意味着,如果直线方程成立,我必须测试扭曲图像中的每一个像素。或者我可以用什么技巧来加速这个过程。@Vaniax。首先,反转映射并不总是容易的。在普通相机中,给定畸变系数,从未畸变到畸变的映射很容易,但另一种方法涉及迭代解(x和y是耦合的)。幸运的是,您使用的模型是可逆的,因此不应该存在任何精度问题。第二,我已经假设你已经在未失真的图像中创建了一个像素图像,我不是说原始的直线方程。你为什么这么关心速度?主要因素是为了得到像素值而进行的插值。