ReconstructionBuilderOptions:
类型 | 名称 | 默认值 | 可选项 | 作用 |
---|---|---|---|---|
int | num_threads | 1 | 使用的线程数, 流水线的每个阶段(功能提取,匹配,估计等)将使用此数量的线程 | |
bool | reconstruct_largest_connected_component | false | 默认情况下,ReconstructionBuilder将尝试从输入数据中重建尽可能多的模型。 如果设置为true,则仅重建最大的连接组件 | |
bool | only_calibrated_views | false | 设置为true仅接受校准的视图(来自EXIF或其他地方)作为重建过程的有效输入 将未校准的视图添加到重建生成器后,将使用LOG警告将其忽略。 |
|
int | min_track_length | 2 | 最小允许轨道长度。 对于三角剖分和BA调整,过短的轨道通常没有受到很好的约束 | |
int | max_track_length | 50 | 最大允许轨道长度。 太长的轨道极有可能包含异常值 | |
int | min_num_inlier_matches | 30 | 一个视图对必须具有的几何验证的最小内线数才能被视为良好匹配 | |
string | features_and_matches_database_directory | “” | 数据库的目录 存放关键点和描述符和特征 |
|
bool | select_image_pairs_with_global_image_descriptor_matching | true | 如果为true,则使用每个图像的全局图像描述符来确定k个最近的邻居图像,并且仅对这些k个最近的邻居执行特征匹配 | |
int | num_nearest_neighbors_for_global_descriptor_matching | 100 | 通过设置num_nearest_neighbors_for_global_descriptor_matching给出“ k”的期望值 | |
int | num_gmm_clusters_for_fisher_vector | 16 | 具有全局图像描述符的Fisher向量的GMM使用的簇数 | |
int | max_num_features_for_fisher_vector_training | 1000000 | 用于训练Fisher向量内核进行全局图像描述符提取的feature数量 | |
DescriptorExtractorType | descriptor_type | SIFT | SIFT AKAZE |
提取特征的描述符类型 |
FeatureDensity | feature_density | NORMAL | SPARSE NORMAL DENSE |
提取的特征的密度 |
MatchingStrategy | matching_strategy | BRUTE_FORCE | BRUTE_FORCE CASCADE_HASHING |
匹配策略类型 |
FeatureMatcherOptions matching_options:
用于计算图像之间匹配的选项。 两个视图几何验证选项也是这些选项的一部分
类型 | 名称 | 默认值 | 作用 |
---|---|---|---|
int | num_threads | 1 | 线程数 |
bool | keep_only_symmetric_matches | true | 使用对称检测 |
bool | use_lowes_ratio | true | 使用低ratio检测 |
float | lowes_ratio | 0.8 | ratio检测参数 |
bool | perform_geometric_verification | true | 如果设置为true,将执行几何验证以获得更高质量的匹配项 |
int | min_num_feature_matches | 30 | 仅返回特征匹配比此数字更多的图像 |
TwoViewMatchGeometricVerification:
用于几何验证的参数设置
类型 | 名称 | 默认值 | 作用 |
---|---|---|---|
int | min_num_inlier_matches | 30 | 一对图像上必须具有的经过几何验证的最小inlier,才能被视为有效的两视图匹配 |
bool | guided_matching | false | 进行初始几何估计后,执行引导式匹配以查找更多匹配项。 引导式匹配使用当前的两视图几何估计来沿着对应于特征的对极线执行约束搜索。 对于第一幅图像中的特征f,我们搜索第二幅图像中位于f的对极线l附近的所有特征。 在接近l的特征中,我们选择描述符距离最小的特征作为匹配项 |
double | guided_matching_max_distance_pixels | 2.0 | 对于引导匹配,将考虑比该阈值更接近对极线的特征进行匹配 |
float | guided_matching_lowes_ratio | 0.8 | ratio参数,用于引导匹配 |
bool | bundle_adjustment | true | 使用inliers进行两视图BA |
double | triangulation_max_reprojection_error | 15.0 | 点的初始三角剖分的最大允许重投影误差 |
double | min_triangulation_angle_degrees | 4.0 | 相机和3D点之间所需的最小三角剖分角度,以进行2视图BA调整 |
double | final_max_reprojection_error | 5.0 | 在BA调整后,对应的最大重投影误差被视为inlier值 |
EstimateTwoViewInfoOptions:
用于估计两个视图几何的参数
类型 | 名称 | 默认值 | 可选项 | 作用 |
---|---|---|---|---|
RansacType | ransac_type | RANSAC | RANSAC PROSAC LMED EXHAUSTIVE |
要使用的Ransac变体类型 |
double | max_sampson_error_pixels | 6.0 | 匹配的最大桑普森误差被认为在几何上是有效的。 此阈值是相对于宽度为1024像素的图像而言的,并将针对不同分辨率的图像适当缩放。 |
|
double | expected_ransac_confidence | 0.9999 | Ransac置信度 | |
int | min_ransac_iterations | 10 | Ransac最小迭代次数 | |
int | max_ransac_iterations | 1000 | Ransac最大迭代次数 | |
bool | use_mle | true | 最大似然估计 |
ReconstructionEstimatorOptions:
估计重建的选项
类别 | 类型 | 名称 | 默认值 | 可选项 | 作用 |
---|---|---|---|---|---|
ReconstructionEstimatorType | reconstruction_estimator_type | GLOBAL | GLOBAL NCREMENTAL HYBRID |
要使用的重建估计的类型 | |
int | num_threads | 1 | 线程 | ||
double | max_reprojection_error_in_pixels | 5.0 | BA调整后,对应的最大重投影误差被视为inliers | ||
int | min_num_two_view_inliers | 30 | 一对图像上必须具有的经过几何验证的最小inliers,才能被视为有效的两视图匹配 | ||
RANSAC | double | ransac_confidence | 0.9999 | RANSAC置信度 | |
RANSAC | int | ransac_min_iterations | 50 | RANSAC最小迭代次数 | |
RANSAC | int | ransac_max_iterations | 1000 | RANSAC最大迭代次数 | |
RANSAC | bool | ransac_use_mle | true | RANSAC是否使用最大似然估计 | |
Global SfM | double | rotation_filtering_max_ difference_degrees |
5.0 | 估算方向后,如果视图对的相对旋转与全局方向估计形成的相对旋转不同,则可以过滤/删除视图对。 调整此阈值以控制对旋转进行过滤的阈值 |
|
Global SfM | bool | refine_relative_translations_ after_rotation_estimation |
true | 根据对极误差和已知的旋转估计值改进相对平移。 这样可以提高位移估计的质量 | |
Global SfM | bool | extract_maximal_rigid_subgraph | false | 如果为true,则将提取视图的最大刚性分量。 这意味着将仅使用位置估计受到严格约束的摄像机。 此方法有些慢,因此启用它会导致效率下降。 注意:此方法不会尝试删除异常的2视图几何形状,而只是确定哪些摄像头条件良好,可以进行位置估计 |
|
Global SfM | bool | filter_relative_translations_with_1dsfm | true | 如果为true,则过滤成对平移估计值以除去潜在的不良相对姿势。 消除潜在的异常值可以提高位置估计的性能 | |
Global SfM | int | translation_filtering_num_iterations | 48 | 在估计摄像机位置之前,明智的做法是删除质量较低的任何相对平移估计 | |
Global SfM | double | translation_filtering_projection_tolerance | 0.1 | ||
Global SfM | double | rotation_estimation_robust_loss_scale | 0.1 | 非线性估计的鲁棒损失函数标度 | |
Global SfM | NonlinearPosition Estimator::Options |
nonlinear_position_estimator_options | |||
Global SfM | LinearPosition Estimator::Options |
linear_triplet_position_estimator_options | |||
Global SfM | LeastUnsquared DeviationPosition Estimator::Options |
least_unsquared_deviation_ position_estimator_options |
|||
Global SfM | bool | refine_camera_positions_and_ points_after_position_estimation |
true | 对于全局SfM,运行局部BA调整可能是有利的,仅在保持相机方向和内在常数不变的情况下仅优化相机位置和3d点 | |
Incremental SfM | double | multiple_view_localization_ratio | 0.8 | 如果M是任何视图观察到的最大3D点数,则我们要对所有观察到的> M * multi_view_localization_ratio 3D点的视图进行本地化。 这允许在需要BA调整之前将多个条件良好的视图添加到重建中。 | |
Incremental SfM | double | absolute_pose_reprojection_error_threshold | 4.0 | 绝对姿态估计的内部阈值 此阈值相对于宽度为1024像素的图像,将根据输入的图像分辨率进行适当缩放 |
|
Incremental SfM | int | min_num_absolute_pose_inliers | 30 | 为了使绝对姿态估计成功,需要的最小inlier | |
Incremental SfM | double | full_bundle_adjustment_growth_percent | 5.0 | 自从上次使用完全BA以来,重建的增长率达到此百分比时,才触发增量SfM的完全BA | |
Incremental SfM | int | partial_bundle_adjustment_num_views | 20 | 当不运行完整BA时,将在此参数指定的恒定数量的视图上执行部分BA | |
Hybrid SfM | double | relative_position_estimation_ max_sampson_error_pixels |
4.0 | 使用简化的相对平移求解器(假定已知旋转)重新估算用于混合sfm增量部分的初始对的相对位置。 相对位置使用RANSAC程序重新估计,该阈值由该参数定义。 |
|
Triangulation | double | min_triangulation_angle_degrees | 3.0 | 3D点和2条视线之间需要的最小角度才能成功实现三角剖分 | |
Triangulation | double | triangulation_max_reprojection_error_in_pixels | 10.0 | 用于确定有效三角剖分的重投影误差 | |
Triangulation | bool | bundle_adjust_tracks | true | 设置为true可在估算后立即优化track | |
Bundle Adjustment (GLOBAL_SFM) |
int | num_retriangulation_iterations | 1 | 重新估计所有未估计轨迹的次数。 重新三角化后进行BA调整 | |
Bundle Adjustment | LossFunctionType | bundle_adjustment_loss_function_type | TRIVIAL | TRIVIAL HUBER SOFTLONE CAUCHY ARCTAN TUKEY |
鲁棒的损失函数 |
Bundle Adjustment | double | bundle_adjustment_robust_loss_width | 10.0 | 损失函数阈值 | |
Bundle Adjustment | int | min_cameras_for_iterative_solver | 1000 | 比此值小使用SPARSE_SCHUR 比此值大使用ITERATIVE_SCHUR |
|
Bundle Adjustment | OptimizeIntrinsicsType | intrinsics_to_optimize | FOCAL_LENGTH | RADIAL_DISTORTION |
ASPECT_RATIO FOCAL_LENGTH SKEW PRINCIPAL_POINTS RADIAL_DISTORTION TANGENTIAL_DISTORTION NONE ALL |
BA期间对相机内参的优化项,使用|进行并列。 如果为None则不优化任何内参值。 |
Track Subsampling | bool | subsample_tracks_for_bundle_adjustment | false | 设置为true可对用于BA调整的子采样轨道进行设置。 如果使用得当,这可以帮助大大提高BA调整的效率。 |
|
Track Subsampling | int | track_subset_selection_long_track_length_threshold | 10 | 在进行轨道二次采样时,最好使用长轨道,但是长轨道通常更可能包含异常值。 因此,我们将用于选择轨道的轨道长度限制为10,然后按截断的轨道长度先对轨道进行排序,然后再按其平均重投影误差对其进行排序。 这使我们可以在所有长轨道中选择高质量的轨道。 | |
Track Subsampling | int | track_selection_image_grid_cell_size_pixels | 100 | 我们将每个图像划分为一个具有此阈值指定的网格像元宽度的图像网格。 选择每个网格单元中排名最高的轨道进行优化,以使每个图像都具有良好的空间覆盖率。 | |
Track Subsampling | int | min_num_optimized_tracks_per_view | 200 | 使用轨道子采样时,每个视图所需的优化轨道的最小数量。 如果视图没有观察到这么多的轨道,则视图中的所有轨道都会得到优化。 |
Track Subsampling:
BA调整可通过最大程度地减少重新投影误差来对点位置和相机姿势进行联合非线性优化。对于许多场景,3d点可能是高度冗余的,因此,尽管运行时间大大增加,但添加更多的点只会稍微改善重建质量(如果有的话)。这样,我们可以减少在束调整中使用的3d点的数量,并通过仔细选择点以适当限制优化来实现相似甚至更好的质量重建。
如果将轨道的二次采样设置为true,则选择3d点,使其符合以下条件:
a)高置信度(即低重投影误差)。
b)首选长距离曲目。
c)用于优化的轨道在每个图像中提供了良好的空间覆盖率。
d)每个视图至少观察K条优化轨迹。