通过鱼眼失真函数扭曲直线并在图像中正确绘制

时间:2016-06-07 19:05:42

标签: c++ opencv computer-vision fisheye

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

现在我想将线投影到鱼眼相机图像中。由于我有相应的非线性失真函数,我能够轻松扭曲点。现在,天真的方法是通过此函数扭曲生成的线中的每个点。但这会导致几个线段和未设置的像素(通常属于失真的线)。

我想知道什么是一个聪明的方法来获得正确的扭曲线。也许还有必要以不同的方式处理线投影?我可以更频繁地对straigt线进行采样(即使用子像素坐标),但我认为这并不能保证我得到正确的解决方案。

编辑:

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

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

其中a是未失真的入射光线与光轴的角度,r是失真图像中像素的半径。您可以阅读有关here的更多信息。

1 个答案:

答案 0 :(得分:1)

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

我认为更正确的方法是向后映射。找到失真图像中每个像素(方形,整数)到未失真图像中的像素(四边形,实数)的映射。 这样可以确保你的扭曲线上不会有任何漏洞。

enter image description here