【熟肉】无人机相机采集图像序列的快速三维重建

原文标题:Rapid 3D Reconstruction for Image Sequence Acquired from UAV Camera

首发于:MDPI

Yufu Qu *, Jianyu Huang and Xuan Zhang
Department of Measurement Technology & Instrument, School of Instrumentation Science & Optoelectronics
Engineering, Beihang University, Beijing 100191, China; Hjy448@buaa.edu.cn (J.H.);
zhangxuanaj@buaa.edu.cn (X.Z.)

Correspondence: qyf@buaa.eud.cn; Tel.: +86-010-8231-7336
Received: 23 November 2017; Accepted: 11 January 2018; Published: 14 January 2018

摘要

1
In order to reconstruct three-dimensional (3D) structures from an image sequence captured by unmanned aerial vehicles’ camera (UAVs) and improve the processing speed, we propose a rapid 3D reconstruction method that is based on an image queue, considering the continuity and relevance of UAV camera images.

为了加快无人机相机采集图像三维重建过程,我们提出了一种基于图像序列相关度的快速重建方法。

1
The proposed approach first compresses the feature points of each image into three principal component points by using the principal component analysis method. In order to select the key images suitable for 3D reconstruction, the principal component points are used to estimate the interrelationships between images.

该方法首先利用主成分分析法(Principal Components Analysis, PCA)将每幅图像的特征点压缩为 3 个主成分点。利用主成分点估计图像之间的相互关系,可以为选择适合三维重建的关键帧提供依据。

1
Second, these key images are inserted into a fixed-length image queue. The positions and orientations of the images are calculated, and the 3D coordinates of the feature points are estimated using weighted bundle adjustment. With this structural information, the depth maps of these images can be calculated.

其次,将这些关键帧插入到一个固定长度的图像队列中。计算图像的位置和方向,并使用加权束平差(weighted bundle adjustment)估计特征点的三维坐标。利用这些结构信息,可以计算出这些图像的深度图。

1
Next, we update the image queue by deleting some of the old images and inserting some new images into the queue, and a structural calculation of all the images can be performed by repeating the previous steps.

接着通过删除一些旧图像和插入一些新图像来更新图像队列,并重复前面的步骤对所有图像进行结构化计算。

1
Finally, a dense 3D point cloud can be obtained using the depth–map fusion method. The experimental results indicate that when the texture of the images is complex and the number of images exceeds 100, the proposed method can improve the calculation speed by more than a factor of four with almost no loss of precision.

最后利用深度图融合方法得到密集的三维点云。实验结果表明,当图像的纹理复杂且图像数量超过 100 时,该方法可以将计算速度提高 4 倍以上,几乎不损失精度。

1
Furthermore, as the number of images increases, the improvement in the calculation speed will become more noticeable.

此外,随着图像数量的增加,相较原方法计算速度也会明显地提高。

Keywords: UAV camera; multi-view stereo; structure from motion; 3D reconstruction; point cloud

Read More

Share

【西加加】模板虽奇,难如上青天

本文记录了摸模板的心路历程,卖惨自闭随处可见。

Read More

Share

经济与管理 札记

《新编经济与管理教程》一书的笔记,由概念切入,旨于能够在这资本吃人的社会站住一席之地。

Read More

Share

新年新气象

2020 是个好年,除了在家半年的休闲时光,还有浑水摸鱼的刺激生活。灾难与机遇并存的日子里,总是后知后觉地发现自己做了什么该做的、不该做的。而一年到头也麻了不少,趁仍熬的了夜,莽撞几回。

Read More

Share

手撕ECS #2: Archetypes and Vectorization

原文链接:Building an ECS #2: Archetypes and Vectorization

上回说到如何访问 Entity 所拥有的 Components,这一章将会探索如何储存 Component 数据。久闻 ECS 以高性能自称,来看看它到底有何能耐。

Read More

Share

手撕ECS #1: Types, Hierarchies and Prefabs

原文链接:Building an ECS #1: Types, Hierarchies and Prefabs

Entity Index

首先来看几个概念:

  • Entities 是运行时中独一无二的“东西”,通常与一个独一无二的整数标示。
  • Type(或 Archetype)来区分 Entity 所拥有组件列表的异同,通常用一个数组标示。比如一个 FPS 游戏中 Player 对象拥有两个组件,分别是“位置”和“血量”,则它的 Type 就是[Position, Health]

我们可以通过这两个概念来构造 ECS 中最基础的数据结构,即 Entity Index

1
2
3
4
5
using EntityId = uint64_t;
using ComponentId = EntityId;

using Type = std::vector<ComponentId>;
std::unordered_map<EntityId, Type> entityIndex;

通过 EntityId 我们可以很容易获取该 Entity 所拥有的组件列表,那么实现一个 HasComponent 便易如反掌:

1
2
3
4
5
6
7
bool HasComponent(EntityId entity, ComponentId component) {
vector<ComponentId>& type = entityIndex[entity];
for (auto c : type) {
if (c == component) return true;
}
return false;
}

针对 C++ 的特性,在添加组件时可以用模板的形式绑定就再好不过了:

1
2
Player.add<Position>();
Player.add<Health>();

在这两个 add 操作之后,entityIndex 中就应该包含一项绑定 Player[Position, Health] 的数组元素。当然,是以 ComponentId,即 uint64_t 的形式定义的,例如:

1
2
ComponentId Position_id = 1;
ComponentId Health_id = 2;

如此一来,Player 这一 Entity 的 Type 便成了 [1, 2]

Read More

Share

ルフランの地下迷宮と魔女ノ旅団2chまとめwiki Wiki*

ルフランの地下迷宮と魔女ノ旅団 攻略サイト Gametter

ルフランの地下迷宮と魔女ノ旅団 攻略 | RRPG

【含剧透】鲁弗兰的地下迷宫与魔女之旅团 攻略心得

Share

Mastering C++ Standard Library Features

快速掌握 Modern C++ 标准库特性,基于 Vittorio Romeo 发布的教程编撰。

C++ 后面跟着的数字越来越大,才发现漏学了亿个特性,赶紧捡起来重新看一遍。

Read More

Share

《全局光照技术》札记

渲染方法论方向

  • 寻找更快的数学方法来比较精确地计算渲染积分方程
  • 根据光学现象或者其他理论拆分渲染方程,使得光照效果最终由多种效果叠加

UE4 预处理阶段构建距离场

Share

球谐函数与全局光照

球谐函数学习笔记。

Read More

Share