编译
环境:Ubuntu20.04
-
如果系统中预先有一些旧依赖。首先会碰到 cmake 的 include 目录正确,但是 lib 寻找目录错误的问题。详见这个 issue。根据这篇文章,通过设置 CMake 搜索的优先级,可以解决路径查询问题。解决方案。
-
编译 aliceVision,为了省时,可以将项目分为两部分编译。
-
使用 CMakeLists 里面的内置方法对依赖进行编译。
-
在 CMakeLists 中关闭依赖编译后,再对项目进行单独编译。
-
-
Ubuntu20.04 默认版本为 3.16 尝试使用代理失败。但是换成官网源码编译的 3.22 后代理能正常工作了。
-
不确定问题:将
CMAKE_PREFIX_PATH
设置成依赖安装目录后,CMake 会出现以下warning
:1
2
3
4
5
6
7
8CMake Warning (dev) in src/CMakeLists.txt:
Policy CMP0111 is not set: An imported target missing its location property
fails during generation. Run "cmake --help-policy CMP0111" for policy
details. Use the cmake_policy command to set the policy and suppress this
warning.
IMPORTED_LOCATION not set for imported target "assimp::assimp"
configuration "Debug".进而导致 make 的规则中找不到
assimp
的依赖。1
Linux-x86_64/libaliceVision_mesh.so.2.4: assimp::assimp-NOTFOUND
解决办法:按照
warning
提示添加IMPORTED_LOCATION
1
2# /home/chunibyo/workspace/AliceVision/src/aliceVision/mesh/CMakeLists.txt
set_target_properties(assimp::assimp PROPERTIES IMPORTED_LOCATION "${ASSIMP_LIBRARY_DIRS}/${ASSIMP_LIBRARIES}")
调试
后端编译得到一系列可执行二进制文件,可以通过命令行调用,默认生成在 /home/chunibyo/workspace/AliceVision/build/Linux-x86_64
路径下。
前端通过 subprocess.Popen
对后端的二进制文件进行调用。
因为对 c++ 的调用方式子进程,所以很难直接 gdb 进 python 进程后对 c++ 进行 debug。解决办法是设法使后端的进程停住,然后在 CLion 中直接 attach 进去。
aliceVision_cameraInit
处理照片的元信息。
命令:
1 | aliceVision_cameraInit --sensorDatabase "/home/chunibyo/workspace/AliceVision/src/aliceVision/sensorDB/cameraSensors.db" --defaultFieldOfView 45.0 --groupCameraFallback folder --allowedCameraModels pinhole,radial1,radial3,brown,fisheye4,fisheye1,3deanamorphic4,3deradial4,3declassicld --useInternalWhiteBalance True --viewIdMethod metadata --verboseLevel info --output "/home/chunibyo/workspace/meshroom_cache/tmp/MeshroomCache/CameraInit/db58d443c068acdfe5245d3670f4ba016ff52160/cameraInit.sfm" --allowSingleView 1 --input "/home/chunibyo/workspace/meshroom_cache/tmp/MeshroomCache/CameraInit/db58d443c068acdfe5245d3670f4ba016ff52160/viewpoints.sfm" |
参数:
-
sensorDatabase:拍摄设备的先验硬件信息 txt 数据库。
-
groupCameraFallback:
-
global
-
folder
-
image
-
rig:https://github.com/alicevision/meshroom/wiki/Multi-Camera-Rig
同时支持输入初始位姿。
aliceVision_featureExtraction
主要计算代码
The SIFT detector is controlled mainly by two parameters: the peak threshold and the (non) edge threshold.
The peak threshold filters peaks of the DoG scale space that are too small (in absolute value). Peak_thresh 越大,特征点越少。
The edge threshold eliminates peaks of the DoG scale space whose curvature is too small (such peaks yield badly localized frames). edge_thresh 越大,特征越多。
- 可选特征点
1 | std::string EImageDescriberType_informations() |
- ConfigurationPreset: 特征点预设,默认 NORMAL
1 | /** |
-
maxNbFeatures:手动设置特征点数目的方法
-
describerQuality: 手动设置特征点的质量。提高质量后会增加scale层数。It’s a trade-off between performance and precision.
-
contrastFiltering: 默认是 static,根据某种标准对关键点进行权重排序
1 | /** |
-
relativePeakThreshold:
dynPeakTreshold = relativePeakThreshold * medianOfGradiants
-
gridFiltering: 指的是尽量不使得某个格子内的特征点过于密集。首先会根据 scale 或者 peak 等进行排序。分为留下的和舍弃两部分特征点。