前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无法做标定,如何用Python自动进行相机图像的畸变校正?

无法做标定,如何用Python自动进行相机图像的畸变校正?

作者头像
HawkWang
发布2022-11-30 16:32:18
1.4K0
发布2022-11-30 16:32:18
举报
文章被收录于专栏:计算摄影学计算摄影学

我在文章手机中的计算摄影4-超广角畸变校正中介绍过,真实的镜头和理想的镜头不一样,理想镜头是满足薄透镜模型的:

然而,真实的镜头由多个透镜组合而成,即便已经做了精密的设计,镜头组也无法完全遵循薄透镜模型。导致的不完美结果很多,我们先看看镜头畸变。

径向畸变

在制造过程中,透镜的实际曲面和理想曲面之间存在一定的误差,这种误差会改变光的折射方向,使得成像点的位置发生偏差,通常这会导致“径向畸变”

根据透镜曲面的不同情况,径向畸变会导致画面出现桶形失真或枕形失真。

与此同时,实际相机通常采用多个透镜组成镜头组,各透镜中心与光轴是否重合、镜片与光轴是否垂直、各镜片沿光轴方向的位置偏差等都会使光线偏离理论路径。虽然透镜的组合可以相互抵消一些性质相反的非线性畸变,但是也会叠加一些性质相同的非线性畸变。通常,这会导致“切向畸变”

实际成像过程中,这两种畸变通常混杂在一起,尤其是广角镜头组很难避免它们。如下图所示:

下面这张图像是由我用Panasonic的DMC-LX5数码相机拍摄的,我们看到因为镜头的畸变,后方的门框出现了很明显的弯曲现象,这就是典型的桶形畸变:

在文章67. 三维重建——相机几何参数标定中,我介绍了畸变校正的原理,我们一般用下面的公式来进行畸变校正

这意味着如果要校正图像的畸变,就需要得到包括镜头畸变参数在内的相机内参。而工业界大多采用张正友标定法及其变种来进行相关参数的标定,这个过程需要我们拍摄许多张平面标定板来完成:

然而,在我们拿到一张需要进行后期处理的图像时,我们通常无法用拍摄这幅图像的相机去做上面的标定,比如这是一幅从网络下载的图像,或是别人拍摄的图像。那么,此时又该如何办呢?

我正在我的知识星球中介绍如何自动化的通过图像的EXIF数据获取到关于相机和镜头的关键信息,并利用这些关键信息进行畸变校正的方法。我们来看看畸变校正前后,图像的变化吧。你可以很明显的看到,通过我介绍的方法校正图像后,后面的门框变直了,且整个图像尽可能多的保留了信息:

那么,这是如何做到的呢?欢迎加入我的知识星球进行学习,事实上这是我正在编写的《Python图像后期处理与优化系列教程》中的一小部分内容,目前刚刚进行到去畸变这一部分。

我们之前已经学习了手写代码来完成raw文件解析的整个过程,我们建立的流程如下所示:

还学习了使用更强大的RawPy库来更方便的加载RAW格式图像,以便进行后期处理的方法。事实上,这个过程与相机ISP的操作流程非常相似,我们学习过程中挑选了最典型和重要的来讲解,可以认为我们完成了非常基础的ISP功能!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算摄影学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档