# stitch **Repository Path**: administratorX/stitch ## Basic Information - **Project Name**: stitch - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-09-18 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # stitch #### 介绍 这是一个实现全景拼接功能的项目,该项目没有使用OpenCV自带的视觉库,完全是由C++所编写。主要参考论文http://matthewalunbrown.com/papers/ijcv2007.pdf #### 软件架构 1.软件所使用的到的依赖主要如下: - Linux系统 (stitch项目实际使用Ubuntu 7.4.0-1ubuntu1~18.04.1) - gcc >= 4.7 (stitch项目实际使用gcc version 7.4.0) - Eigen (stitch项目实际使用 3.3.4) - FLANN (快速最近邻搜索包的简称Fast_Library_for_Approximate_Nearest_Neighbors,它是一个对大数据集和高纬特征进行最近邻搜索的算法的集合,只需要传入两个字典作为参数,用来确定要使用的算法和其他相关参数等。) - CImg (是一个用C++编写的开源数字图像处理库) - libjpeg (是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现) - cmake (是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。) 2.编译: - mkdir build && cd build && cmake .. && make 3.配置: 可通过设置src/config.cfg文件来选择三种模式中的任意一种: - 3.1 cylinder mode: - 在以下条件下可以得到更好的效果: - 在拍这些照片时都是在同一个方向上的(向左或向右,正常拍照时都是这种样子的),没有任何位移或旋转的动作。 - 所有的照片都是用同一个相机拍摄的,相机焦距在config文件中用宏FOCAL_LENGTH来设置。 - 照片是从左到右的顺序给出的 - 3.2 camera estimation mode: - 唯一的要求就是在相机上不要有位移。只要不是照片量太少,在该模式下都能得到很好的效果。但是由于它需要做配对, - 因此速度会慢一点。 - 3.3 translation mode: - 该模式仅仅是通过仿射变换来将图片拼接在一起,只有当相机进行平移且场景深度信息约在同一深度时才有效,也要求有序的 - 图片输入。 代码中的几个主要选项含义: - FOCAL_LENGTH: 表示相机的焦距,只在cylinder模式才有效。 - ORDERED_INPUT:表示输入图片是否有序。在cylinder和translation模式中必须设置为1。 - CROP:表示是否对最终图像进项裁剪,以防止出现不规则的白色边缘。 其他参数都是与图像质量相关的,默认值就好,若图像太小以至于不能生成满意的最终图像,最好是重新手工裁剪一下,不要去 调配置文件中的参数。 4.执行语句: $cd image /stitch/src/image$ ../../build/src/image-stitching img01.jpg img02.jpg ... img72.jpg 最后 cd out目录下,可看到拼接完的全景图: 因此,可看到在 **src\out\out1.jpg为最终图像** 。 5.算法: - 功能:SIFT - 变换:使用RANSAC来估计单应或仿射变换。 - 优化项:焦距估计,最小化误差 6.若要得到最好的拼接效果,最好满足如下操作: - 当旋转相机拍照时,最好保持相机镜头的坐标位置静止。 - 保持曝光参数不变 - 不要在一定的物体上拍照 - 拍摄物体越远其所得照片,拼接效果越好 - 广角相机拍摄的照片,由于图像畸变严重,因此该算法效果不好。