neozhaoliang / surround-view-system-introduction

A full Python implementation for real car surround view system
MIT License
858 stars 303 forks source link

拼接处出现重影是投影不精准导致? #49

Closed CPFelix closed 1 year ago

CPFelix commented 1 year ago

感谢作者的优秀工作!我尝试搭建一个简陋的系统,发现最后拼接的全景图拼接处的棋盘格总是会出现重影,我猜测是投影矫正有误差导致两张鸟瞰图拼接时无法对齐,经过像素权重计算后出现重影问题,这样理解不知是否正确? 另外有个想法,拼接时根据棋盘格对两张鸟瞰图进行匹配,这样就能保证不会出现重影问题,类似于一些常见的全景拼接方法,不知是否可行? BirdView

neozhaoliang commented 1 year ago

拼接出现重影的因素很多,任何一个环节出问题都可能导致这种结果。

  1. 你的相机视野是否能够覆盖车周围?每个相机中两个标定板不能看起来形变太严重。
  2. 你的投影参数设置正确否?标志点的坐标设置和选择正确否?
  3. 每个相机画面在投影到地面后,看起来自然否?

我建议你先按照项目所给的图片和参数,手动复现一下我在文档中给出的拼接效果,确保正确理解整个过程。

CPFelix commented 1 year ago

感谢回答!你开源的结果我已经复现了,所以才自己搭建一套比较简陋的环境验证。 另外,投影矫正时-scale -shift的设置对最终投影结果影响挺大的,想问下如何设置才更合理?不同摄像头需要保持相同的参数吗?

neozhaoliang commented 1 year ago

这个设置的原则应该是让你的 region of interest 的区域尽可能位于相机视野中央。 不同相机这个参数是可以不同的,你可以从项目里面的相机 yaml 文件里面看到它们是不一样的。

CPFelix commented 1 year ago

我尝试设置不同的-scale -shift感觉对生成的鸟瞰图结果影响挺大,下面投影变换全部采用了-scale 1.5 1.5 -shift 10 20。另外我上传了各个步骤的图片,请看下是否正常? (图片按照前/右/后/左排列) 原始鱼眼: front right back left 畸变矫正: front_undistort right_undistort back_undistort left_undistort

投影矫正: front right back left

neozhaoliang commented 1 year ago

你的校正图质量是可以的,用来标定投影矩阵应该没有问题。 但是你投影后的图很歪,所以不能确定是不是那些距离参数的设置有问题,或者你实际点击的特征点和代码中设置的特征点不一致。

CPFelix commented 1 year ago

开源代码里采用手工点击4个投影点的方式,我之前猜测是自己鼠标点击不够准确导致,所以采用了cv2.findChessboardCorners去自动寻找每个摄像头中间的棋盘格最外四个角点作为采样的投影点(效果见下图),param_setting.py也提前计算并修改在实际坐标系位置。 16E48A77-347F-4ceb-9D0B-76EF8E3DCFD4

neozhaoliang commented 1 year ago

你可以试试这样:将四个标定点之间的距离选的远一些,因为你的纸是有弯曲的,根据一个很小区域的四个点计算的投影矩阵用在整个区域上可能效果不好。

CPFelix commented 1 year ago

好的,有可能就是我的棋盘格太小了,单格才7厘米,因为手头最大就是A3纸… 之后我切换大点的棋盘格试一试效果,再答复你,感谢回答!

CPFelix commented 1 year ago

我将棋盘格由6X4变为6X8,投影点也由4X2变为6X10,最终拼接效果相比之前确实有所提升。 年后考虑定制一个像你项目里的环车棋盘布对实车进行标定。 BirdView 另外,方便加个联系方式吗? @neozhaoliang

neozhaoliang commented 1 year ago

我的微信 id 也是 neozhaoliang 看起来你右上角和左下角的纸有明显的弯曲。

CPFelix commented 1 year ago

是的,因为我用的标定纸拼接总归有一定误差,而且单格边长太小,年后定制一套好点的标定装备应该会效果更好吧。再次感谢帮助!