三维重建(SFM):360全景摄像机采集街景图像对重建的影响与优化

采集工具:insta one 360

数据:360自动拼接的“全景”视频文件(截帧,转换,切割)。

切图工具:open MVG  pano2pinhole(已有功能,绕y轴旋转,横向选取n个pinhole点,并且选择每个点切割图形的FOV)(切图已经是针对全景图应用,并非机械crop,但仍不能避免图像形变)

问题简述:大FOV产生严重形变,影响行进方向图片的匹配(RANSAC)被干扰,关联度不够;小FOV画幅小,窄街横向图片景深不够,关联度不够。

行进方向匹配实验:

sift2048,FOV40:

两图跨9帧(帧不确切指定真实视频的fps(此例一帧可能是1/2秒),作为统一切割完成的数据集的相对标尺)

两图跨13帧

18帧

FOV120

5帧

FOV120,5帧,但是截取中间部分,好了很多,只为了证明图片中部匹配不错,但是周边形变,被RANSAC过滤后,好的匹配对也会消失!!!

FOV160,5帧,切割局部

切割组数实验

sift2048,FOV80下,产生5组,重合度较低。

FOV80下,产生6组,明显增加重合度。

FOV80下,产生4组,无重合度,损失信息。

结论:并非先平均切割指定组数再拉伸(360/5=72,72度拉伸至80度),而是根据组数选取中心点,每个中心点指定FOV切割。多组切割有利于增加重叠数据与总的匹配对数,有利于建模过程中的匹配鲁棒性(但不确定视角是否正确,是否因为畸变干扰不同视角间匹配关系,否则应使用小fov多组数的方式进行切割,高低视角的损失再做补救)

1.不用担心增加组数会产生额外畸变(比如,先平均得到360/6=60度,再拉伸到期望的80度)

2.组数超额可能有额外收益(建议:同FOV下,可以尝试更多组数,使视角覆盖度数更大,FOV80*6=480度>FOV80*5=400度,FOV40*10=400度>FOV40*9=360度。)

后续经过实验证明:增加组数n与同一帧下不同视角间的重叠度,能提高总的匹配对。

基于特征匹配实验结论,使用小FOV更优,但画幅不够,侧向匹配变差

改善方案

根据前边分析,在FOV45-120之间,根据图片形变量(“畸变”)和画幅大小,折中取了FOV50~FOV80等不同参数进行对比实验,在某些场景下,确实产生了质的变化——原本不能重建的数据集重建成功。

定量分析实验

为了让自己的各种“猜测”不变成玄学,从增量重建过程拆解出很多参数进行统计。

例:

total_images:90
total_image_pairs:1961
max_corrs:1570
min_corrs:30
total_corrs:430529
corrs_avg:219
corrs_rms:179
total_tri_corrs:251609
tri_corrs_avg:128
tri_corrs_rms:339
avg_recall:0.623677
total_track_len:89318
rms_track_len:8.46855
avg_track_len:6.1688
track3_cnt:5437,   percentage:0.375509
track6_cnt:5239,   percentage:0.361834
track10_cnt:2009,   percentage:0.138753
track15_cnt:916,   percentage:0.063264
track30_cnt:716,   percentage:0.0494509
trackInf_cnt:162,   percentage:0.0111886
total 3d points:14479

此外还有:重投影误差等。

参数分析依据:

3d点,越多,证明场景覆盖越好,特征点提取越全面;

corrs相关都是匹配对,事关匹配质量和数量,影响重建过程;

track是每个3d点属于多少张图,反映图片之间相关度;

track3_cnt意为:track长度小于等于3;后边的percentage为占所有3d点的百分比

track3_cnt意为:track长度小于等于6(大于3);

实验结果统计

有个组合技巧:例如,用u60v60n8切割全景图,再用u80v80n8切割全景图,从u60数据集下选取某两个和行进有关的组,从u80数据集下选取几个与横向视角(店铺)有关的组,拼在一起进行重建,大量实验表明,有明显改善,甚至丢失一侧墙壁也可重建成功,鲁棒性大幅增强。

291_320小图集基础实验

  total_images total_image_pairs  total_corrs  corrs_avg  corrs_rms total_tri_corrs  tri_corrs_avg  tri_corrs_rms avg_track_len rms_track_len median_number_of_key_points_per_photo num_of_points(平均3D点) RMS_of_rep
rojection_errors
报告3d点(无过滤) 报告3d点 3d点召回率 说明
340u80v80n5 150 4707  711927  151  149 424803  90  244     5150 151 1.017445 46608 31590 0.677780639 80虽然3d点召回率优于72,但是因为有视角重叠,并且纵向视角也更大,而且这是340的
                                   
320u72v72n5 150   302455 176 156 178126 104 276     5217 218 0.939378 22727 15187 0.668236019 重投影误差:
72是否优于60?因为组数?因为视角?30张图过少,rms不能反应所有问题,加大数据量单独对比此项
(不对等条件,u72对应v72,而u60对应v60)
NLGX320_u90v90n4                               #DIV/0! 调试流程用
                                #DIV/0!  
重叠改善对比
320u120v120n3 90 868 182911 210   111880 128       5673 238 1.039085 15257 9198 0.602870813  
320u120v120n4 120 1705 265318 155 159 174546 102 249     5473 257 1.107931 21597 13128 0.607862203 增加重叠度,误差加大
多组数重叠有利于提升3d点召回率
                                #DIV/0!  
同uv下对比不同n
320u60v60n6 180   320159 168 143 185584 97 258     4770 194 0.970595 23036 15413 0.669083174  
320u60v60n8 240 4396 763619 173 139 440183 100 262     4676 228 0.958221 38183 24711 0.647172826 视角重叠:匹配效果增加、点云增加,加滤波后点云仍明显多于n6
                                   
v对比,n无重叠
320u45v60n8 240   353804 138 105 180009 70 205     4597 166 0.954611 24884 16279 0.654195467 较u60v60n6,总度数相同,无重叠
tri_corrs提升不明显
3d点增多
重投影误差降低
320u60v60n6 180   320159 168 143 185584 97 258     4770 194 0.970595 23036 15413 0.669083174  

u72n5下对比不同v,证明小v画幅瓶颈。

  total_images total_image_pairs  total_corrs  corrs_avg  corrs_rms total_tri_corrs  tri_corrs_avg  tri_corrs_rms avg_track_len rms_track_len median_number_of_key_points_per_photo num_of_points(平均3D点) RMS_of_rep
rojection_errors
报告3d点(无过滤) 报告3d点 3d点召回率 说明
 
NLGX320_u72v40n5 150 1591 277855 174 143 156132 98 265     4688 163 0.97746 18282 12241 0.669565693 从刚重建结束,到最后产生报告,两个3d点数据有何不同,是否被过滤?二次空三?没有gcp应该没有
NLGX320_u72v60n5 129 1231 237837 193 163 142847 116 288     4862 172 0.94241 17949 12008 0.66900663 注册不全
NLGX320_u72v72n5     302455 176 156 178126 104 276     5217 218 0.939378 22727 15187 0.668236019  
NLGX320_u72v90n5 150 1757 283971 161 147 168872 96 254     4967 240 0.917816 22323 14935 0.6690409  
NLGX320_u72v120n5   1971 298622 151 142 180530 91 237     5646 286 0.980885 22812 14677 0.643389444 3d点召回率下降:过滤基于体素过滤,证明从结构讲,或者至少从目前的版本讲,v120多冗余3d点并没有使用价值,反而增大误差。

小FOV确实取得了更好的平均track长度

  total_images total_image_pairs  total_corrs  corrs_avg  corrs_rms total_tri_corrs  tri_corrs_avg  tri_corrs_rms avg_track_len rms_track_len median_number_of_key_points_per_photo num_of_points(平均3D点) RMS_of_rep
rojection_errors
报告3d点(无过滤) 报告3d点 3d点召回率 说明
 
NLGX320_u90v90n4 120 1247 251327 201 184 157804 126 306 4.613363849 5.472636361       20099       total_track_len 92724.000000000000 double
 
NLGX320_u72v72n5 150 1707 302403 177 157 178053 104 277 4.688685069 5.586258069     0.924589 22678    
  total_track_len 106330.00000000000 double
NLGX320_u60v60n6 180 1903 320829 168 143 185874 97 259 4.757325968 5.708141885     0.940675 23171    
  total_track_len 110232.00000000000 double
 
NLGX320_u45v60n8 240 2547 353903 138 116 205610 80 205 4.862121928 5.872982768     0.925113 25392    
  total_track_len 123459.00000000000 double
 

同n下同group对比

因为单视角无法重建,选择了n个视角下的group2、3、4,但是同n8下,不同u总覆盖与重叠度不同,有一定干扰,最后使用u60g2\u60g4+u110g3的组合方式控制,g3更偏行进方向(大景深),最后证明小fov确实在行进方向能获取匹配优势。

  total_images total_image_pairs  total_corrs  corrs_avg  corrs_rms total_tri_corrs  tri_corrs_avg  tri_corrs_rms avg_track_len rms_track_len median_number_of_key_points_per_photo num_of_points(平均3D点) RMS_of_rep
rojection_errors
报告3d点(无过滤) 报告3d点 3d点召回率 说明
track统计实验:证明大FOV的平均纵向关联度更差(控制变量,用同样的n,n=8,选中单一视角,6点钟方向:group_index=3)
单视角重建失败,改用group_index=2,3,4
                                   
NLGX320_u45v60n8_g2g3g4 90 969 165255 170 141 95791 98 242 5.12044122 6.233307232 4861 138 0.921808 10063       total_track_len 51527.000000000000 double
NLGX320_u70v70n8_g2g3g4 90 1971 430642 218 179 251580 127 338 6.164731896 8.467444892 5334 158 0.937981 14472       total_track_len 89216.000000000000 double
NLGX320_u90v90n8_g2g3g4 90 2020 403876 199 168 238738 118 298 5.930191972 8.07325103 5279 185 1.015964 14325       total_track_len 84950.000000000000 double
NLGX320_u120v120n8_g2g3g4                                  
NLGX320_u60v60n8_g2g3g4                 5.86092 7.9377     0.88052 13933      
NLGX320_u60v60g2g4_u110v110g3                 5.43078 6.96349     0.975863 12777      
NLGX320_u60v60g2g4_u90v90g3                                 程序崩溃CheckErrorCUDA

单独对比u60g2\g3\g4与u60g2\u110g3\u60g4,明显u110获得了很大的劣势

大数据集下重建结果:

最后,不光在有竹林的子集小场景(badcase)重建成功,包含同样场景的大场景也重建成功。(对照组均失败)

下图:南锣鼓巷634张图,u70v80n8

补充:这个很像orbslam2的场景,orbslam2通过特征均匀分布来增加关键帧的鲁棒性。现在也是因为误匹配导致正确的特征点消失。(当然,思路落实到操作,不一定相似,现在排除外点才是更好的——也就是裁剪)

三维重建(SFM):图像形变对重建的影响与优化相关推荐

  1. 上帝视角任意切换:三维重建和图像渲染是怎么结合的?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 导读 本文介绍了3D图像网站Photo Synth及其前身Photo Tourism,并讲解了它们的两 ...

  2. opencv sgbm 三维重建_图像三维重建方法综述

    文章转自:http://blog.csdn.net/zhubaohua_bupt/article/details/74172831 利用相机进行三维重建已经不是一个新鲜的话题,重建的三维环境用途很广泛 ...

  3. OpenCvSharp三维重建SFM与图像拼接Stitch

    OpenCvSharp三维重建SFM与图像拼接Stitch 关于SFM重建的原理参考https://blog.csdn.net/lpj822/article/details/82716971 关于图像 ...

  4. 基于图像的三维物体重建:在深度学习时代的最新技术和趋势综述之训练

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1利用其他线索 前面几节讨论了直接从二维观测重建三维对象的方法.本节展示了如何使用附加提示,如中间表示 ...

  5. 基于图像的三维模型重建——基础介绍

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文由知乎作者梦寐mayshine授权转载,不得擅自二次转载.原文链接:https://zhuanla ...

  6. 学习笔记之——基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

  7. 基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

  8. android 1像素变粗,一亿像素的意义:聊聊图像采样与重建

    一亿像素的意义:聊聊图像采样与重建 2019-08-13 15:01:51 18点赞 23收藏 16评论 小米MIX4将会采用三星1.08亿像素传感器的新闻大家应该都听说了,一时间大家都开始讨论小尺寸 ...

  9. 基于图像的三维模型重建

    基于图像的三维模型重建--特征点检测与匹配 学习笔记 ** 题目基于图像的三维模型重建,即关于图像与三维模型重建.在学习知识的过程中最直观的学习方法即是通过图像(画)来学习(比如幼儿时期学习的小儿漫画 ...

  10. SfM三维点云重建:BA优化--【VS2015+OpenCV3.4+PCL1.8】

    前言 在SfM多视图三维点云重建–[VS2015+OpenCV3.4+PCL1.8]中实现的增量式SfM三维点云重建,会随着图片数量的增加而导致误差逐渐累积,最后可能无法完成重建.在三维重建中常使用B ...

最新文章

  1. CSS3重新定义input中呆若木鸡的默认复选框CheckBox和单选框Radio样式
  2. android 书架菜单,Android入门3--做一个书架
  3. Android-Note
  4. Luogu 4245 【模板】任意模数NTT
  5. servlet原理及访问时序图
  6. 【经典算法实现 42】二维傅里叶变换 及 逆变换代码实现
  7. HTML制作简单课程表
  8. 实现开启和关闭android移动网络
  9. R语言随机森林报错The response has five or fewer unique values. Are you sure you want to do regression原因及解决办法
  10. JSP中把动态页面转换为静态页面
  11. 树以及二叉树的常用性质以及遍历
  12. lambada表达式总结
  13. 探讨Vue 数据监测原理-第五节-展开介绍 Vue中监测-【数组】数据的原理
  14. strtol函数的使用
  15. 定时导入excel到数据库
  16. 基于HTML5的棋盘游戏开发,基于HTML5的网页围棋游戏的开发
  17. MathCAD Prime 8.0数学工具的安装与使用配置
  18. 阿里云短信服务(完整指南),短信发送功能实现。
  19. 有了蒲公英智能组网我对向日葵、TeamViewer等远程控制软件说拜拜
  20. 光环国际:项目管理者如何促进项目的按期交付——续华老师

热门文章

  1. 领域驱动设计核心概念
  2. Photoshop插件-删除所有亮度通道蒙板-脚本开发-PS插件
  3. 【Python秒杀脚本】淘宝或京东等秒杀抢购
  4. 基于python中selenium模块完成百度文库pdf文档下载
  5. 数据库系统概念第四章习题答案
  6. 表白 php,情人节表白程序
  7. Fedora CoreOS
  8. 芒果云 在线代码编辑器
  9. python+selenium 自动拖拽滑块
  10. FPGA实现数字QAM调制系统