Metadata-Version: 2.1
Name: u0-stitcher
Version: 0.1.4
Summary: stitcher for two fisheye camera
Home-page: https://github.com/u03013112/pano
Author: u03013112
Author-email: u03013112@hotmail.com
License: UNKNOWN
Description: # pano
        
        全景图像拼接
        
        原本是想解决网络遥控车的视角太小，不能有效观察周围情况问题，找到了广角镜头。
        后来发现竟然可以用两个超过180°的摄像头拼接全景图片。
        
        但是在网上没有找到效果好的实时全景传输项目，所以自己做一个。
        
        我理解的全景图片生成应该主要是3个步骤
        1、把图片摊平，这个步骤的学名未知。可能是将鱼眼原图（等角图片）展开成等距图片。
        2、将两个鱼眼镜头的等距图分成3份，并进行水平拼接
        3、拼接图按照给定的角度在还原成等角图
        
        为了可以做到即时（30FPS），需要尽可能的提高效率。
        目前最大的效率瓶颈是在拼接上。
        
        ## 调研拼接3张水平图片效率  
        
        技术上打算采用opencv 的 stitcher，先试试看。
        
        `opencv 用 4.X 吧，尽量用新一点的东西。`
        
        ## 2023-05-24 进展
        
        目前的拼接还是完全自己写的，原因是所有第三方提供的方案均不能有效的对我的图片进行拼接。
        可能是我的参数有问题，但是我的需求相对简单并且我对拼接效率有要求，所以就自己写了。
        
        写的过程还是挺顺利的，由于我的摄像头是背靠背绑在一起的，所以他们的水平同步和角度偏差是不大的，所以我放弃了拼接时进行旋转和扭曲。
        拼接中对图片只有平移，这对图片首尾相连还是很有帮助的。
        
        目前拼接的图片效果还是不错的，拼接效率上没有测试，从代码上看起来，应该是足够高效的。
        
        ## 封装思路
        
        为了更加模块化，封装思路如下：
        1、贯彻单视频流方案，虽然涉及拼装切分，单比起双倍的编码和解码，还是要好很多的。所以输入的视频流是两个摄像头的拼接视频流。
        横向拼接，分辨率一致，帧率一致，编码一致，码率一致。
        这里可以简化成输入两张（一张）图片，视频流的处理还是放到视频流的相关模块中。
        2、校准主副镜头，由于目前的两个摄像头都是usb摄像头，usb的可插拔等特性导致，每次启动时，主副镜头的顺序都可能不一致，所以需要校准。
        3、校准主副镜头的图像，即圆心+半径。这里由于是超级广角，所以图像是一个圆，但是随着镜头的物理位置不稳定，需要进行校准。这里会强制要求两个图片的半径一致，即获得的等距投影图分辨率一致。
        4、拼接矫正，尝试用等距投影进行拼接。
        以上校准全部保存校准结果至本地文件，当本地文件不存在，强制要求校准，否则不需要校准。如果有必要可以随时进行校准。
        5、拼接输入图片，这是一个全流程，输入一张图片（横向拼接原图输入），输出一张图片（等距投影拼接）。
        
        暂时封装成一个类。
        
        ## 2023-05-25 进展
        
        基础功能完成，在比较合适的图片上表现还是挺好的，但是在一些特殊情况，比如校准时的距离与实际视频距离有较大变化的情况下，拼接效果就不好了。
        
        所以可能需要手动或者自动进行不断的校准。
        
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Description-Content-Type: text/markdown
