我在世界坐标中有一条线并将其投影到图像上(如本问题 math.stackexchange 中所述)。这会在图像空间中生成一个简单的直线方程,因此我可以使用 OpenCV 在图像中轻松打印它。
现在我想将线转换到鱼眼相机图像中。因为我有一个相应的非线性失真函数,所以我可以很容易地扭曲点。现在天真的方法是通过这个函数扭曲生成的线中的每个点。但这会导致多个线段和未设置的像素(通常属于扭曲线)。
我想知道有什么聪明的方法可以得到正确的扭曲线。也许还需要以不同的方式处理线投影?我可以更频繁地对直线进行采样(即使用亚像素坐标),但我认为这并不能保证我得到正确的解决方案。
编辑:
我的失真函数是一个简单的多项式
r(a) = k1*a+k2*a^2+k3*a^3+k4*a^4
其中 a
是未失真的入射光线与光轴的角度,r
是失真图像中像素的半径。您可以阅读更多相关信息 here .
最佳答案
简单的解决方案确实是提高线路分辨率。 如果你添加更多的像素(子像素更好),那么在失真后你会得到更好看的图像。
我认为更正确的方法是向后映射。找到从失真 图像中的每个像素(正方形,整数)到未失真 图像中的像素(四边形,实数)的映射。 这将确保您的扭曲线中不会有任何漏洞。
关于c++ - 通过鱼眼畸变功能扭曲直线并在图像中正确绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37687377/