Git Product home page Git Product logo

uavproduct's Introduction

UAVProduct处理说明

处理无人机影像的代码,使用了OpenMVG,openMVS以及GDAL库等,实现影像几何校正,影像拼接,点云生成等功能

Build Status GitHub forks Maintainability

1 处理流程

  • 构建全局影像参数
  • 影像列表的构建以及各个文件夹的生成
  • 影像特征点的解算
  • 影像特征点的匹配
  • 影像光束法平差
  • 影像拼接得到DOM和点云数据

处理流程图: 无人机影像处理流程

2处理流程详细说明

2.1 影像列表的构建

这一步主要是进行一些估计和一些预处理的操作,实际上包括构建影像列表,解析POS数据得到处理影像大小得到影像的内参数据等, 在这一步中要获取影像的基本信息,并构建列表方便解算,另外在存在POS的情况下可以通过焦距和航高以及POS数据估算影像实际 的地面范围,然后将地面范围以KML数据的形式输出方便查看,同时估算拼接后影像数据大小

2.2 影像特征点的解算

影像特征点的解算主要是通过SIFT特征进行解算,SIFT特征具有旋转不变,尺度不变光照不变等特点,由于其具有以上特征使得SIFT算子在特征点提取方面存在巨大的优势,SIFT特征点提取流程为:

  • 1.尺度空间的建立
  • 2.检测DoG空间极值点
  • 3.空间极值点的精化处理
  • 4.特征点方向计算
  • 5.特征点方向特征描述子生成

下面详细介绍一下各个处理流程,首先是尺度空间的建立过程,对于输入影像建立影像金字塔,这个过程分为两个部分第一部分为影像尺度空间的降采样,每次对影像进行/2的降采样,得到的影像长和宽均为原影像的一般,第二部分为同一尺度空间的高斯模糊,通过不同尺度的高斯低通滤波算子对影像进行滤波,得到不同程度模糊的影像;第二个步骤为DoG空间极值点的计算,DoG空间极值即为高斯差分的空间极值,比较本空间和相邻两个尺度空间的DoG极值,取最大值,实际上DoG空间极值就是像素灰度变化最大的值,对影像来说角点,边缘点都可能具有较大的DoG值,实际上我们最需要的是角点信息,DoG局部曲率非常不对称的点,因此需要对步骤2检测到的空间极值点进行精化处理,精化处理的方法为:通过拟和三维二次函数以精确确定关键点的位置和尺度(达到亚像素精度),同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力。具体介绍参看: 进行精化后就可以得到影像特征点,在此情况下需要确定特征点的主方向,特征点的主方向通过梯度的模值和角度来确定主方向,获取主方向之后选取88窗口大小的窗口分成44的大小,则每一个窗口内有22个像素,计算像素的梯度则每一个22像素有八个方向的梯度,最后得到128维的特征描述子,最后对特征描述子进行归一化即可得到特征描述: SIFT参考

2.3 影像特征点匹配

实际上通过SIFT进行特征点匹配的过程中只要找到了特征点,则特征匹配都不是什么太大的问题,但是有一点需要注意,一般来说我们得到了一个128维的特征,在此情况下通过特征匹配得到最佳匹配可以认为是匹配点,匹配的过程可以通过KNN算法进行加速实现,但是这样可能出现一个问题,就是重复匹配问题,即多个点都匹配到同一个点带来匹配误差,在此情况下需要进行修正,纠正的方法很多,通过仿射变换矩阵,单应矩阵,基础矩阵等都可以进行修正,openMVG提供了多种修正方式可以选取,在代码中默认使用单应矩阵进行修正,修正后能够使匹配效果得到吉他的提高.

2.4 光束法平差的SFM过程

关于这个恐怕是整个过程中最重要的部分了,说它最重要不一定是说有多难,而是说明很多搞摄影测量的人把摄影测量和CV结合起来的时候有这个光束法的概念,但是并不是真的懂了光束法平差的整个过程,我觉得对于一个专业人员来说只了解概念用用软件是没有什么用的,所以这一块需要好好的研究,肤浅的了解了一点然后胡吹这样总是不对的。
好了吐槽完毕之后我们讲干货:光束法平差的过程:
实际上在光束法平差之前我们需要对所有影像进行相对定向,在相对定向的基础上才能够进行光束法平差,也就是我们摄影测量中所说的空三加密的过程,而通过CV进行相对定向主要有两种方法,第一种为全局法第二种为序列方法,全局法的介绍,在以上链接中有全局法较为详细的介绍,在这里就不详细说明了,另外就是序列法,这个方法对于用摄影测量的术语应该叫做连续法相对定向,但是在CV中有更加严密的求解方法,并不通过泰勒展开进行迭代,而是在已知内参的情况下通过矩阵分解对本质矩阵进行分解得到R和T,通过图像一张张的添加得到相对变换的R和T然后通过最小生成树选择参考影像得到全局变换的R和T本质矩阵的矩阵分解参考。下面分别介绍两种方法的光束法平差,实际上对于全局求解方法,直接得到全局数据后根据全局的R和T可以通过前方交会求解相对坐标系下的三维坐标,每一个三维坐标和其对应的二维影像坐标以及其旋转和平移矩阵可以列出共线条件方程,在此情况下可以列出光束法平差的条件方程,实际上就是一个求解一个巨大的稀疏矩阵的过程,求解的工具主要包括SBACeres Solcver等。而连续法的求解方法相当于一个逐步添加的过程,求出两个影像相对关系后计算三维点坐标,进行光束法平差,然后添加一幅影像继续以上过程,直到所有影像都添加完毕,当然过程中还涉及到一些细节在这里并不进行详细说明了。

2.5 影像拼接

2.6 密集点云的生成

3 源码使用

这一章理论上是不用介绍的,因为代码量比较少大家看看就明白了,但是鉴于注释不太清楚而且测试用例不全,所以还是介绍一下,首先需要初始化参数,全局变量中提供的所有哦参数都需要进行初始化,初始化之后调用UAVList_CreateSFMList函数创建需要进行处理的影像集,得到一些参数,如果想要粗略的显示影像位置可以调用UAVList_CreateImageRange函数进行显示,结果会以KML文件的形式给出在 Google Earth上导入可以直接看,次此功能必须在具有POS数据的情况才能够使用,在缺少POS数据的情况下无法使用,得到影像list之后调用特征点提取和解算函数进行特征点的提取和解算,在这里特征点提取和解算可以选取CPU计算也可以选用GPU进行计算,如果存在像控点则可以在这一步添加像控点,最后对结果进行光束法平差.

4 安装与编译

编译参考

How to Compile the UAV Product


Show How to compile the UAV Product step by step under Ubuntu16.04:

  1. openMVG
  2. openMVS
  3. DevIl
  4. gTest
  5. other third party library
  6. UAV Product

1.openMVG

compile the openMVG and install

git clone https://github.com/openMVG/openMVG.git
git submodule update -i
cd ./src
mkdir build
cd build
cmake ..
make -j4
sudo make install

2.openMVS

be careful the verison of the eigen used by openMVS must be 3.2; and make sure you build the release version

git clone https://github.com/cdcseacave/openMVS.git
mkdir buildOpenMVS
cd buildOpenMVS
cmake ..
make -j4
sudo make install

3.DevIL

git clone https://github.com/DentonW/DevIL.git
mkdir build
cmake ..
make
sudo make install

4.gTest

sudo apt-get install libgtest-dev
cd /usr/src/gtest
sudo cmake .
sudo make
sudo cp libgtest*.a /usr/local/lib

5.other third party library

cgal:`sudo apt-get install libcgal-qt5-dev`
opencv:`sudo apt-get install libopencv-dev`
gdal:`sudo apt-get install libgdal-dev`
boost:`sudo apt-get install libboost-all-dev`
libkml:`sudo apt-get install libkml-dev`
glew

6.UAV

set openMVG_DIR
set openMVS_DIR
set SIFT_LIBRARY
set EXIF_LIBRARY

#configure

#!/bin/bash
mkdir env && cd env
sudo apt-get install git
git clone –recursive https://github.com/openMVG/openMVG

#openMVG
mkdir openMVG_Build && cd openMVG_Build
cmake -DCMAKE_BUILD_TYPE=RELEASE . ../openMVG/src/
make &&sudo make install

#openMVS
sudo apt-get update -qq && sudo apt-get install -qq
sudo apt-get -y install git mercurial cmake libpng-dev libjpeg-dev libtiff-d    ev libglu1-mesa-dev

cur_path=`pwd`
echo $cur_path
#Eigen (Required)
hg clone https://bitbucket.org/eigen/eigen#3.2
mkdir eigen_build && cd eigen_build
cmake . ../eigen
make && sudo make install
cd ..

#Boost (Required)
sudo apt-get -y install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev

#OpenCV (Required)
sudo apt-get -y install libopencv-dev

#CGAL (Required)
sudo apt-get -y install libcgal-dev libcgal-qt5-dev

#VCGLib (Required)
git clone https://github.com/cdcseacave/VCG.git vcglib

#Ceres (Required)
sudo apt-get -y install libatlas-base-dev libsuitesparse-dev
git clone https://ceres-solver.googlesource.com/ceres-solver ceres-solver
mkdir ceres_build && cd ceres_build
cmake . ../ceres-solver/ -DMINIGLOG=ON -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j2 && sudo make install
cd ..

#GLFW3 (Optional)
sudo apt-get -y install freeglut3-dev libglew-dev libglfw3-dev

#OpenMVS
git clone https://github.com/cdcseacave/openMVS.git openMVS
mkdir openMVS_build && cd openMVS_build
cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_DIR="$main_path/vcglib"

#If you want to use OpenMVS as shared library, add to the CMake command:
-DBUILD_SHARED_LIBS=ON

#Install OpenMVS library (optional):
make -j2 && sudo make install

#GDAL
sudo apt-get install libgdal-dev

#gtest
sudo apt-get install libgtest-dev

#UAVProduct
git clone https://github.com/RemoteSensingFrank/UAVProduct
cd UAVProduct
make -j2

uavproduct's People

Contributors

remotesensingfrank avatar yannnnnnnnnnnn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

uavproduct's Issues

add siftGPU

在这里要强调一下添加siftGPU的过程,我们看很多代码将siftGPU添加都是把siftGPU编译为库文件然后引用库文件,而在这个代码中并不是这样,在我们的代码中直接使用siftGPU的源码,编译源码通过cmake进行编译。在我们主程序的cmake文件中直接引入siftGPU的cmake文件同时进行编译,为什么要这样编译,因为siftGPU本身是在windows下编译的,移植到linux下可能出现这样或那样的问题,有时候需要对源码进行适应性的修改,直接使用源码方便进行修改;另外还有一点,在调用bundle的过程中我没有查看openMVG的特征点输出是什么格式而是直接继承了openMVG的Features_Provider的结构体,然后重写了load函数,但是match的数据输出是与openMVG一致的,因为在sift解算的过程中特征描述两种解法可能不一样,有可能做了归一化,没有详细的查看源码,这样做可以将特征点输出为自己的格式比较方便。

发现一个bug

在UAVProcessGeometry.cpp中第57行
函数 openMVG::Vec3 UAVProcessGeometry::UAVProcessGeoXYZToBLH(double x,double y,double z)中

double dL = atan(fabs(y / z)) * 180 / PI;//57行
应该是double dL = atan(fabs(y / x)) * 180 / PI;

mosaic seam finder process

影像拼接的拼接线处理算法,算法参考openCV的拼接线处理过程,采用Voronoi图方式获取最佳拼接线,具体的算法流程可以参考博客wuweiBlog.com,已经完成核心的拼接线获取算法,总体思路为:
1.首先为每一个影像创建一个Mask影像;
2.在Mask影像上找到拼接线,获取最佳拼接线;
3.通过GDAL库将Mask中的拼接线转换为Shp要素;
4.调用GDAL的拼接算法将获取转换号的最佳拼接线导入进行拼接;
目前参考openCV完成最佳拼接线获取的核心算法,剩下的算法直接实现完成整个算法,不同的拼接线获取方式可以继承至基类进行扩展

编译OpenMVS错误

最后一步:make -j2 && sudo make install

CMake Error at /home/star/UAVProduct/env/openMVS/build/Cotire.cmake:1990 (message):
cotire: error 1 precompiling
/home/star/UAVProduct/env/openMVS_build/libs/Common/cotire/Common_CXX_prefix.hxx.
Call Stack (most recent call first):
/home/star/UAVProduct/env/openMVS/build/Cotire.cmake:3694 (cotire_precompile_prefix_header)

libs/Common/CMakeFiles/Common.dir/build.make:63: recipe for target 'libs/Common/cotire/Common_CXX_prefix.hxx.gch' failed
make[2]: *** [libs/Common/cotire/Common_CXX_prefix.hxx.gch] Error 1
CMakeFiles/Makefile2:179: recipe for target 'libs/Common/CMakeFiles/Common.dir/all' failed
make[1]: *** [libs/Common/CMakeFiles/Common.dir/all] Error 2
Makefile:129: recipe for target 'all' failed

配置报错unreference

依赖库安装都没问题,最后工程链接库时报unreference错误。使用的系统是ubuntu16.04。错误主要出现在jpeg,png,和tiff库上。是不是因为有的依赖库需要jpeg8、 png12,有的库需要jpeg9、 png16,出现冲突了呢?

编译时openMVG库出错,感觉是库的版本问题

你好,你使用的openMVG库是多少版本的,我用1.6版本的openMVG库报如下错误:
In file included from /home/lc/UAVProduct/UAVProduct/UAVPreProcess.h:3:0,
from /home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:10:
/home/lc/UAVProduct/UAVProduct/UAVInterface.h:15:18: error: ‘Pair_Set’ in namespace ‘openMVG’ does not name a type
typedef openMVG::Pair_Set MatchesList;
^~~~~~~~
In file included from /home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:10:0:
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.h:80:19: error: ‘MatchesList’ does not name a type
const MatchesList & corresponding_indexes,
^~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.h:82:41: error: ‘MatchesList’ has not been declared
virtual UAVErr UAVProcessMatchesExport(MatchesList list,std::string pMatch);
^~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.h:83:41: error: ‘MatchesList’ has not been declared
virtual UAVErr UAVProcessMatchesImport(MatchesList &list,std::string pMatch);
^~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp: In member function ‘virtual UAVErr UAVProcessMatches::UAVProcessMatchesList(std::__cxx11::string, int, bool, std::__cxx11::string)’:
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:445:5: error: ‘MatchesList’ was not declared in this scope
MatchesList pose_pairs;
^~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:445:5: note: suggested alternative: ‘matchList’
MatchesList pose_pairs;
^~~~~~~~~~~
matchList
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:451:13: error: ‘pose_pairs’ was not declared in this scope
pose_pairs = openMVG::exhaustivePairs(sfm_data.GetViews().size());
^~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:516:17: error: expected ‘;’ before ‘view_pair’
MatchesList view_pair;
^~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:517:35: error: ‘pose_pairs’ was not declared in this scope
for (const auto & pose_pair : pose_pairs)
^~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:517:35: note: suggested alternative: ‘pose_pair’
for (const auto & pose_pair : pose_pairs)
^~~~~~~~~~
pose_pair
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:530:21: error: ‘view_pair’ was not declared in this scope
view_pair.insert(
^~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:538:9: error: ‘view_pair’ was not declared in this scope
if (view_pair.empty())
^~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:545:64: error: ‘view_pair’ was not declared in this scope
UAVProcessAdjacencyMatrixToSVG(sfm_data.GetViews().size(), view_pair,
^~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp: At global scope:
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:559:6: error: prototype for ‘void UAVProcessMatches::UAVProcessAdjacencyMatrixToSVG(size_t, const Pair_Set&, const string&)’ does not match any in class ‘UAVProcessMatches’
void UAVProcessMatches::UAVProcessAdjacencyMatrixToSVG(const size_t NbImages,
^~~~~~~~~~~~~~~~~
In file included from /home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:10:0:
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.h:79:15: error: candidate is: virtual void UAVProcessMatches::UAVProcessAdjacencyMatrixToSVG(size_t, const int&, const string&)
virtual void UAVProcessAdjacencyMatrixToSVG(const size_t NbImages,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:604:51: error: ‘UAVErr UAVProcessMatches::UAVProcessMatchesExport’ is not a static data member of ‘class UAVProcessMatches’
UAVErr UAVProcessMatches::UAVProcessMatchesExport(MatchesList list, std::string pMatch) {
^~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:604:51: error: ‘MatchesList’ was not declared in this scope
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:604:81: error: expected primary-expression before ‘pMatch’
ProcessMatches::UAVProcessMatchesExport(MatchesList list, std::string pMatch) {
^~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:604:87: error: expression list treated as compound expression in initializer [-fpermissive]
ProcessMatches::UAVProcessMatchesExport(MatchesList list, std::string pMatch) {
^
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:613:51: error: ‘UAVErr UAVProcessMatches::UAVProcessMatchesImport’ is not a static data member of ‘class UAVProcessMatches’
UAVErr UAVProcessMatches::UAVProcessMatchesImport(MatchesList &list, std::string pMatch) {
^~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:613:51: error: ‘MatchesList’ was not declared in this scope
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:613:68: error: missing template arguments before ‘,’ token
UAVErr UAVProcessMatches::UAVProcessMatchesImport(MatchesList &list, std::string pMatch) {
^
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:613:82: error: expected primary-expression before ‘pMatch’
rocessMatches::UAVProcessMatchesImport(MatchesList &list, std::string pMatch) {
^~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:613:88: error: expression list treated as compound expression in initializer [-fpermissive]
rocessMatches::UAVProcessMatchesImport(MatchesList &list, std::string pMatch) {
^
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp: In member function ‘virtual UAVErr UAVProcessFeatureSIFT::UAVProcessMatchesExtract(std::__cxx11::string, std::__cxx11::string)’:
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:720:89: error: no matching function for call to ‘openMVG::matching_image_collection::Matcher::Match(openMVG::sfm::SfM_Data&, std::shared_ptropenMVG::sfm::Regions_Provider&, openMVG::Pair_Set&, openMVG::matching::PairWiseMatches&)’
lectionMatcher->Match(sfm_data, regions_provider, pairs, map_PutativesMatches);
^
In file included from /usr/local/include/openMVG/matching_image_collection/Matcher_Regions.hpp:15:0,
from /home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:23:
/usr/local/include/openMVG/matching_image_collection/Matcher.hpp:38:16: note: candidate: virtual void openMVG::matching_image_collection::Matcher::Match(const std::shared_ptropenMVG::sfm::Regions_Provider&, const Pair_Set&, openMVG::matching::PairWiseMatchesContainer&, C_Progress*) const
virtual void Match(
^~~~~
/usr/local/include/openMVG/matching_image_collection/Matcher.hpp:38:16: note: no known conversion for argument 1 from ‘openMVG::sfm::SfM_Data’ to ‘const std::shared_ptropenMVG::sfm::Regions_Provider&’
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp: In member function ‘bool UAVProcessFeatureSIFTGpu::UAVImportFeatsToFile(std::__cxx11::string, std::vector&)’:
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:973:24: warning: format not a string literal and no format arguments [-Wformat-security]
printf(e.what());
^
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp: At global scope:
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:992:23: error: ‘MatchesList’ does not name a type
const MatchesList & map_Matches,
^~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp: In function ‘void PairMatchingToAdjacencyMatrixSVG(size_t, const int&, const string&)’:
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:996:23: error: request for member ‘empty’ in ‘map_Matches’, which is of non-class type ‘const int’
if ( !map_Matches.empty())
^~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1004:47: error: request for member ‘find’ in ‘map_Matches’, which is of non-class type ‘const int’
auto iterSearch = map_Matches.find(std::make_pair(I,J));
^~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1005:47: error: request for member ‘end’ in ‘map_Matches’, which is of non-class type ‘const int’
if (iterSearch != map_Matches.end())
^~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp: In member function ‘virtual UAVErr UAVProcessFeatureSIFTGpu::UAVProcessMatchesExtract(std::__cxx11::string, std::__cxx11::string)’:
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1054:9: error: ‘MatchesList’ was not declared in this scope
MatchesList pairs;
^~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1054:9: note: suggested alternative: ‘pMatchList’
MatchesList pairs;
^~~~~~~~~~~
pMatchList
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1055:21: error: expected ‘;’ before ‘pairs_filter’
MatchesList pairs_filter;
^~~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1056:60: error: ‘pairs’ was not declared in this scope
if(!openMVG::loadPairs(feature.size(), pMatchList, pairs))
^~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1060:24: error: ‘pairs’ was not declared in this scope
int matchpairs=pairs.size();
^~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1063:39: error: unable to deduce ‘auto&&’ from ‘pairs’
for ( const auto & cur_pair : pairs )
^~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1069:50: error: ‘img2’ was not declared in this scope
sDesc2 = feature[img2].descs_out;
^~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1069:50: note: suggested alternative: ‘img1’
sDesc2 = feature[img2].descs_out;
^~~~
img1
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1086:17: error: ‘pairs_filter’ was not declared in this scope
pairs_filter.insert(std::make_pair(img1,img2));
^~~~~~~~~~~~
/home/lc/UAVProduct/UAVProduct/UAVPreProcess.cpp:1093:42: error: ‘pairs_filter’ was not declared in this scope
pairs_filter,

compile error

大家好,我在编译的时候应该是版本对应的问题,出现了下面的提示:
UAVProcessGeoMosaic.cpp:(.text+0x3900): undefined reference to stlplus::folder_exists(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' UAVProcessGeoMosaic.cpp:(.text+0x393b): undefined reference to stlplus::folder_files(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)'
CMakeFiles/UAVProcess.dir/UAVICPProc.cpp.o: In function UAVICPExtract::UAVICPExtractMatchesEnvi(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, EXTRACT_TYPE)': UAVICPProc.cpp:(.text+0x1de): undefined reference to openMVG::image::Image::Image()'
UAVICPProc.cpp:(.text+0x1ed): undefined reference to openMVG::image::Image<unsigned char>::Image()' UAVICPProc.cpp:(.text+0x514): undefined reference to openMVG::matching::DistanceRatioMatch(float, openMVG::matching::EMatcherType const&, openMVG::features::Regions const&, openMVG::features::Regions const&, std::vector<openMVG::matching::IndMatch, std::allocatoropenMVG::matching::IndMatch >&)'
UAVICPProc.cpp:(.text+0x715): undefined reference to openMVG::features::PointFeature::y() const' UAVICPProc.cpp:(.text+0x738): undefined reference to openMVG::features::PointFeature::x() const'
UAVICPProc.cpp:(.text+0x75c): undefined reference to openMVG::features::PointFeature::y() const' UAVICPProc.cpp:(.text+0x780): undefined reference to openMVG::features::PointFeature::x() const'
UAVICPProc.cpp:(.text+0x8b0): undefined reference to openMVG::image::Image<unsigned char>::~Image()' UAVICPProc.cpp:(.text+0x8bf): undefined reference to openMVG::image::Image::~Image()'
UAVICPProc.cpp:(.text+0x11b8): undefined reference to openMVG::image::Image<unsigned char>::~Image()' UAVICPProc.cpp:(.text+0x11cc): undefined reference to openMVG::image::Image::~Image()'
CMakeFiles/UAVProcess.dir/UAVICPProc.cpp.o: In function UAVICPImportICPs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)': UAVICPProc.cpp:(.text+0x133b): undefined reference to openMVG::sfm::Load(openMVG::sfm::SfM_Data&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, openMVG::sfm::ESfM_Data)'
UAVICPProc.cpp:(.text+0x17f0): undefined reference to `openMVG::sfm::Save(openMVG::sfm::SfM_Data const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, openMVG::sfm::ESfM_Data)'
collect2: error: ld returned 1 exit status
UAVProduct/CMakeFiles/UAVProcess.dir/build.make:421: recipe for target 'UAVProduct/UAVProcess' failed
make[2]: *** [UAVProduct/UAVProcess] Error 1
CMakeFiles/Makefile2:91: recipe for target 'UAVProduct/CMakeFiles/UAVProcess.dir/all' failed
make[1]: *** [UAVProduct/CMakeFiles/UAVProcess.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
这个问题还没有解决,希望能有人帮忙看一下,谢谢

Compile Problem

I tried to compile your project but failed. I look into the code and find that the openMVG you use is not the current one on the Github, which leads to lots of error.
Is there any idea about how to compile your code?
Thanks.

编译时 EXIF_LIBRARYI SIFT_LIBRARYI选择

编译win10+VS2017

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
EXIF_LIBRARYI
linked by target "UAVProcess" in directory E:/UAV_code/UAVproducts/UAVProduct-master/UAVProduct
SIFT_LIBRARYI
linked by target "UAVProcess" in directory E:/UAV_code/UAVproducts/UAVProduct-master/UAVProduct

这里的SIFT和EXIF库是从哪里获取的

[Suggestion] cmake-build-debug should be ignored.

I am in the region which cannot access github.com directly, so when I use some technical method clone this repo, it always failed when pull the prebuilt binary in the directory cmake-build-debug. I think the prebuilt binary should publish via the release function of GitHub rather than directly include it in the VCS. It is really frustrated after pulling the extremely huge (compared with my poor bandwidth) file over and over again.

因为一些原因我需要利用一些技术手段克隆代码,但是在cmake-build-debug下的预编译的二进制文件对我的小水管(4Mbps)来说太大了。我觉得或许将预编译的二进制文件放在releases功能里发布会比直接加到源码管理系统里更好一些。一次次地克隆和失败确实令人沮丧。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.