无人驾驶小课堂 - OpenCV 中的图像校正

1. 常见的图片畸变

无人驾驶摄像头/照相机镜头往往会有两种形式的图像变形,径向畸变(Radial Distortion)和切向变形(Tangetial Distortion)。前者是由于镜头成像的过程中,边缘造成的损耗。后者是因为镜头本身存在角度造成的倾角误差。

径向畸变


切向畸变

2. 畸变矫正

由于镜头畸变不可避免,因此需要矫正。在矫正之时,我们需要建立原图与矫正图像之间的关系,并找到这组关系的系数,通过一组标准系数,我们就获得了镜头的矫正方法。

通常来说,我们可以通过测量一组黑白格(如下图左)来获得这个矫正系数。当获得镜头拍摄的黑白格,只要找出其中的同等位置的格子交界处,并计算两者间变化的关系,就可以计算得到变形的系数。

左:标准黑白格;右:畸变

如果使用 OpenCV 就可以简易获取其中的黑白交界处,如cv2.findChessboardCorners() 和 cv2.drawChessboardCorners() 函数。

代码如下:

Tips:gray.shape[::-1] 是返回灰度图的长宽,代表 反置全部数组;

          color.shape[1::-1] 是返回彩色图的长款,代表 反置前两个元素;

3. 图像矫正

在矫正了畸变之后,我们就可以把图像变形回我们需要的图像了。在这里,我们使用图像点来帮助把点矫正回原来的位置,来拉平图像,使用的函数为 cv2.getPerspectiveTransform() 和 cv2.warpPerspective() 。

修正结果如下:

左:修正前;右:修正后;

代码如下:

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容