OpenCV,Python:缝合图像时避免最终变窄
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了OpenCV,Python:缝合图像时避免最终变窄,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2282字,纯文字阅读大概需要4分钟。
内容图文
在很大程度上要感谢stackoverflow(here、here和here)上的一些出色答案,在对齐图像方面我取得了相当不错的成功.但是,有一个问题,如下所示.当我将许多图像缝合在一起时,它们变得越来越小.
我对这种情况为什么会发生的理论是,摄像头不完全垂直于地面,因此当我添加越来越多的图像时,由于摄像头不垂直于地面,自然的视角导致远处的图像变小.不过,这很可能是完全不正确的.
但是,即使当我变换第一张图像以使其“好像”垂直于地面拍摄时(我认为),仍然会发生失真.
出色的stackoverflow社区是否对如何解决这种情况有任何想法?
这是我用来缝合图像的过程:
>利用图像的转角纬度/经度知识,使第一幅图像垂直于地面.我使用的单应性是“基本”单应性
>使用goodFeaturesToTrack()和calcOpticalFlowPyrLK()查找每个图像与最后一个图像之间的共同特征
>使用findHomography()查找两个图像之间的单应性.然后,将该单应性与所有以前的单应性组合起来以获得“净”单应性
>应用转换并将图像叠加到我到目前为止所做的最终结果中.
有一个主要限制
随着相机的移动,镶嵌图必须一次构造一张图像.我试图在无人机飞行时创建一个实时地图,使每个图像与最后一个图像一一对应.
解决方法:
My theory on why this is going on is that the camera wasn’t exactly perpendicular to the ground.
这是一个很好的直觉.如果相机倾斜,则当它朝一个对象移动时,该对象在框中会变大.因此,如果要将其缝合到前一帧,则需要缩小当前帧以适合前一帧中的对象.
完整的3×3单应性包括x和y方向的变形,但2×3仿射变换不包括.为了坚持当前的管道,您可以尝试查找仿射或欧几里得(刚性)变换.它们之间的区别是仿射扭曲,可以分别在x和y方向上进行剪切和拉伸,欧几里得变换仅执行平移,旋转和均匀缩放.两者都保留平行线,而完整的单应性则不然,因此最终可能会导致方形图像变得更梯形,重复此操作会缩小图像.仿射扭曲仍可以仅在一个方向上缩小,将正方形变成矩形,因此仍可能缩小.欧几里得变换只能缩放整个正方形,因此它可能会缩小.
当然,它们也不会像findHomography那样完美匹配,但是它们应该能够使您接近匹配而不会扭曲大小.使用OpenCV查找欧几里得变换或仿射变换有两种选择:
> estimateRigidTransform()而不是warpPerspective()来获得参数fullAffine = False的刚性扭曲或fullAffine = True的仿射扭曲.
> findTransformECC(),带有可选参数motionType = cv2.MOTION_EUCLIDEAN或motionType = cv2.MOTION_AFFINE(但仿射是默认设置,因此无需指定).
您可以在它们的文档页面上查看算法之间的差异,或者尝试两种方法都可以找到最适合您的算法.
如果仍然无法解决问题,则可以尝试估算使框架完全垂直于地面的单应性.如果这样做,可以先尝试将其应用于所有帧,然后再匹配图像.否则,您可能希望使用更高级的方法,而不是仅在每个帧之间找到一个单应性.
内容总结
以上是互联网集市为您收集整理的OpenCV,Python:缝合图像时避免最终变窄全部内容,希望文章能够帮你解决OpenCV,Python:缝合图像时避免最终变窄所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。