diff --git a/main.py b/main.py index be63873..6fcd3ef 100644 --- a/main.py +++ b/main.py @@ -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, diff --git a/odm_preprocess.py b/odm_preprocess.py index edc50e0..2f1c319 100644 --- a/odm_preprocess.py +++ b/odm_preprocess.py @@ -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) diff --git a/utils/odm_monitor.py b/utils/odm_monitor.py index cb75d13..57f4d7f 100644 --- a/utils/odm_monitor.py +++ b/utils/odm_monitor.py @@ -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: