Evision 双目视觉系统
如果您觉得有帮助,请为该项目点star.以便于及时收到最新更新.
- 双目系统的标定,畸变校正,视差,三维重建,距离测量等.
- 基于Yolo的实时目标检测.
- ELAS,ADCensus视差算法.
- 关于双目的中文资料重复度太高,希望各位后来者能够吸取前人精华,摒弃前人的糟粕,多多自行探索,不要抄来抄去.
- 关于程序的BUG,以及其他困惑,请使用issues,或联系邮件[email protected].
- Evision使用cmake-vcpkg工具链进行编译,开发者使用Visual Studio 2019作为IDE.
- 轻量版正在开发,请查看作者的GitHUb仓库并搜索"EvisionLight",未来Evision会采用ImgUI作为界面,不再基于Qt,以提供更方便的安装体验,并提高运行效率.
- Introduction:
- 资助作者
- 目录 - 1.Dependencies - 2.Directory_specification - 3.build - 4.Deprecated_Version - 5.双目设备 - 6.参考文献 - 7.未来计划
data
文件夹存储测试用例.doc
文件夹中存储的是文档和文档中所用的图片等资源,提供了本项目使用的一些算法相关的论文.package
文件夹存储项目所需的依赖.props
中存储的是属性表scripts
文件夹存储编译脚本.src
文件夹中存放代码文件.legacy
文件夹中存放的是一些有一定保留价值的弃用模块.
scripts
是作者开发期间使用的,对于使用者没有实际意义.package
中含有pthread的window版本,将会在未来改为使用CMake管理.
- 安装visual studio 2019 + 使用C++的桌面开发工作负载 + 英文语言包.(visual studio Installer)
- 安装CMake 3.20.(Download CMake)
- 安装vcpkg.(GitHub For vcpkg)
vcpkg install eigen:x64-windows
vcpkg install opencv:x64-windows
vcpkg install boost:x64-windows
vcpkg install pcl:x64-windows
vcpkg install qt5:x64-windows
mkdir sln,cd sln
cmake ..\src\ -DCMAKE_TOOLCHAIN_FILE="${vcpkg_root}/vcpkg/scripts/buildsystems/vcpkg.cmake" -G"Visual Studio 16" -DPointCloudViewer=ON
- 使用visual studio打开Evision.sln.
- 右键_CMakeTargets/ALL_BUILD,生成.
- 右键EvisionSandBox,设为启动项目.
- 点击"本地Windows调试器",启动程序.
- 如果vcpkg下载包的速度过慢,可以上代理(以PowerShell为例)
$env:HTTP_PROXY="http://127.0.0.1:1080"
- 必须具备支持CUDA的NVIDIA显卡.
- 安装CUDA 10.2.
- 基础组件编译并运行成功.
cd sln, rm -r *
cmake ..\src\ -DCMAKE_TOOLCHAIN_FILE="${vcpkg_root}/vcpkg/scripts/buildsystems/vcpkg.cmake" -G"Visual Studio 16" -DPointCloudViewer=ON -DObjectDetection
- 使用visual studio打开Evision.sln.
- 右键_CMakeTargets/ALL_BUILD,生成.
- 右键EvisionSandBox,设为启动项目.
- 点击"本地Windows调试器",启动程序.
模块名 | 功能 | UI | 输出目标 | |
---|---|---|---|---|
1 | EvisionADCensus | ADCensus视差算法 | × | 动态链接库 |
2 | EvisionElas | Elas视差算法 | × | 动态链接库 |
3 | EvisionPnP | PnP | × | 动态链接库 |
4 | EvisionObjDetection | 目标检测UI | √ | 动态链接库 |
5 | EvisionObjDetectionEngine | 目标检测算法 | × | 动态链接库 |
6 | EvisionMonocularCalib | 单目标定 | √ | 动态链接库 |
7 | EvisionPolyTracker | 单目几何体追踪 | √ | 动态链接库 |
8 | EvisionCalibrate | 双目标定 | √ | 动态链接库 |
9 | EvisionDisparity | 视差(立体匹配) | √ | 动态链接库 |
10 | EvisionTrace | 交互式测量 | √ | 动态链接库 |
11 | EvisionUndistortion | 畸变校正 | √ | 动态链接库 |
12 | EvisionCamera | 单目和双目相机功能 | √ | 动态链接库 |
13 | EvisionCloudViewer | 三维点云查看 | √ | 动态链接库 |
14 | EvisionParamBridge | 外部参数传递 | √ | 动态链接库 |
15 | EvisionUtils | 通用工具类 | × | 动态链接库 |
16 | EvisionSandbox | 主程序UI | √ | 可执行程序 |
- MFC版本.演示视频.
基于邹宇华老师的StereoVision编写.如有需要推荐访问邹宇华老师原版或者在本项目的Release中寻找,由于使用的依赖较为陈旧,强烈不建议继续使用或进行二次开发. - CvLabMain和CvLabSandbox(C#版本)
- CvLabMain是用WPF框架写的.
- CvLabSandbox是用WinFrom写的.
- Docking风格MDI界面
- 使用MVP设计模式,交互基于双向数据绑定
- 运行时为
.NET 4.6.1
,依赖采用Nuget下载 - packages:
1.AForge.2.2.5
2.AForge.Video.2.2.5
3.AForge.Video.DirectShow.2.2.5
4.EMGU.CV.3.3.0.2824
5.cskin.16.1.14.3
6.WeifenLuo.WinFormsUI.Docking.2.1.0
7.ZedGraph.5.1.5
- CvLabMain是用WPF框架写的.
- 需要注意的是,视差效果,点云效果和精度和设备关系非常大,图片的分辨率越高,光照条件越好,畸变越小,一致性越好,最终效果也就越好.此外,两个相机的距离(基线长度)会影响系统的有效范围,一般来讲,基线越长的双目系统越容易获取远处目标的视差,延长基线能够一定程度上(因为有效距离和相机的焦段也有关)将系统的有效范围拉得更远,但同时,基线越长,盲区(距离相机过近的目标不会同时出现在两个视野中)也越大.
- 推荐的双目系统:
- ZED/RealSense/MYNTEYE小觅相机.这是成熟(昂贵)的商业产品,出厂带有高精度的标定数据和功能强大的SDK,而且还带有IMU,IR主动光学等辅助设备,适合做SLAM,笔者认为购买这类相机是最节约时间成本的方法.
- 双目开发板.淘宝上有很多这类产品,价格比ZED那类便宜很多,同时他们带的SDK也要更简陋,有些甚至只支持UVC协议没有SDK,但是他们至少能够控制两侧相机同时拍照,同时基线是固定的,能免去一些麻烦,需要注意的是,这种开发板大多数会输出一张左右视图拼在一起的图片
- 两个工业相机组装.这种方案并不便宜,但是比较自由,可以自己调整基线和光轴指向.
- USB相机组装.这是最便宜的方案,只要买两个一样的USB相机,然后想办法把他们固定起来就可以了,但是便宜的USB相机画质比较有限,噪点比较多,而且无法控制两个相机同时拍照,再加上有效距离比较有限,会很大程度上限值效果,此外,由于两个相机固定的不稳定等原因可能出现移动,这会使标定失效,或者由于标定过程中的滑动直接导致标定失败.作者建议,在经济条件允许的情况下,尽量不要采用这种方案
- ZED/RealSense/MYNTEYE小觅相机.这是成熟(昂贵)的商业产品,出厂带有高精度的标定数据和功能强大的SDK,而且还带有IMU,IR主动光学等辅助设备,适合做SLAM,笔者认为购买这类相机是最节约时间成本的方法.
- 相机标定+畸变矫正
- DarkNet
- DarkNet_Windows
- StdoutRedirector
- ADCensus论文阅读笔记
- ADCensus阅读笔记2
- 邹宇华CSDN
- 浅墨CSDN
- Mei X, Sun X, Zhou M, et al. On building an accurate stereo matching system on graphics hardware[C]//2011 IEEE International Conference on Computer Vision Workshops (ICCV Workshops). IEEE, 2011: 467-474.
- Geiger, Andreas, Martin Roser, and Raquel Urtasun. "Efficient large-scale stereo matching." Asian conference on computer vision. Springer, Berlin, Heidelberg, 2010.
- Zhang K, Fang Y, Min D, et al. Cross-scale cost aggregation for stereo matching[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2014: 1590-1597.
- Martull, Sarah, Martin Peris, and Kazuhiro Fukui. "Realistic CG stereo image dataset with ground truth disparity maps." ICPR workshop TrakMark2012. Vol. 111. No. 430. 2012.
- Hirschmuller H. Stereo processing by semiglobal matching and mutual information[J]. IEEE Transactions on pattern analysis and machine intelligence, 2008, 30(2): 328-341.
- 视差算法
- warpped libelas with opencv and used pangolin as GUI
- 参考.