添加高精度模式

This commit is contained in:
weixin_46229132 2025-03-17 16:07:53 +08:00
parent b1bcdd5f5f
commit 4b8038b1b2
3 changed files with 17 additions and 5 deletions

View File

@ -13,6 +13,8 @@ def parse_args():
# 可选参数
parser.add_argument('--mode', default='三维模式',
choices=['快拼模式', '三维模式', '重建模式'], help='处理模式')
parser.add_argument('--accuracy', default='medium',
choices=['high', 'medium', 'low'], help='精度')
parser.add_argument('--grid_size', type=float, default=800, help='网格大小(米)')
parser.add_argument('--grid_overlap', type=float,
default=0.05, help='网格重叠率')
@ -30,6 +32,7 @@ def main():
image_dir=args.image_dir,
output_dir=args.output_dir,
mode=args.mode,
accuracy=args.accuracy,
grid_size=args.grid_size,
grid_overlap=args.grid_overlap,
produce_dem=True,

View File

@ -44,6 +44,7 @@ class PreprocessConfig:
grid_size: float = 500
# 几个pipline过程是否开启
mode: str = "快拼模式"
accuracy: str = "medium"
produce_dem: bool = False
@ -305,7 +306,7 @@ class ImagePreprocessor:
self.logger.info("预处理任务完成")
successful_grid_points = self.odm_monitor.process_all_grids(
grid_points, self.config.produce_dem)
grid_points, self.config.produce_dem, self.config.accuracy)
self.post_process(successful_grid_points,
grid_points, translations)

View File

@ -128,7 +128,7 @@ class ODMProcessMonitor:
self.logger.error(f"检查正射影像时发生错误: {str(e)}")
return False
def run_odm_with_monitor(self, grid_dir: str, grid_id: tuple, produce_dem: bool = False) -> Tuple[bool, str]:
def run_odm_with_monitor(self, grid_dir: str, grid_id: tuple, produce_dem: bool = False, accuracy = 'medium') -> Tuple[bool, str]:
"""运行ODM命令"""
self.logger.info(f"开始处理网格 ({grid_id[0]},{grid_id[1]})")
success = False
@ -158,8 +158,15 @@ class ODMProcessMonitor:
f"--use-hybrid-bundle-adjustment "
f"--optimize-disk-space "
# f"--feature-type sift "
# f"--feature-quality ultra "
)
if accuracy == "high":
docker_command += (
f"--feature-quality ultra "
f"--pc-quality ultra "
f"--mesh-size 3000000 "
f"--mesh-octree-depth 12 "
f"--orthophoto-resolution 2 "
)
# 根据是否使用lowest quality添加参数
if use_lowest_quality:
@ -254,7 +261,7 @@ class ODMProcessMonitor:
return success, error_msg
def process_all_grids(self, grid_points: Dict[tuple, pd.DataFrame], produce_dem: bool) -> Dict[tuple, pd.DataFrame]:
def process_all_grids(self, grid_points: Dict[tuple, pd.DataFrame], produce_dem: bool, accuracy: str) -> Dict[tuple, pd.DataFrame]:
"""处理所有网格
Returns:
@ -273,7 +280,8 @@ class ODMProcessMonitor:
success, error_msg = self.run_odm_with_monitor(
grid_dir=grid_dir,
grid_id=grid_id,
produce_dem=produce_dem
produce_dem=produce_dem,
accuracy=accuracy
)
if success: