kopia lustrzana https://github.com/OpenDroneMap/ODM
				
				
				
			Ability to skip visibility filtering
							rodzic
							
								
									609d5ea004
								
							
						
					
					
						commit
						c0d275072a
					
				
							
								
								
									
										2
									
								
								VERSION
								
								
								
								
							
							
						
						
									
										2
									
								
								VERSION
								
								
								
								
							| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
2.7.1
 | 
			
		||||
2.7.2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,17 +56,14 @@ class ODMOpenMVSStage(types.ODM_Stage):
 | 
			
		|||
            log.ODM_INFO("Running dense reconstruction. This might take a while.")
 | 
			
		||||
            
 | 
			
		||||
            log.ODM_INFO("Estimating depthmaps")
 | 
			
		||||
 | 
			
		||||
            densify_ini_file = os.path.join(tree.openmvs, 'config.ini')
 | 
			
		||||
            with open(densify_ini_file, 'w+') as f:
 | 
			
		||||
                f.write("Optimize = 0\n") # Disable depth-maps re-filtering
 | 
			
		||||
            number_views_fuse = 2
 | 
			
		||||
 | 
			
		||||
            config = [
 | 
			
		||||
                " --resolution-level %s" % int(resolution_level),
 | 
			
		||||
                "--min-resolution %s" % depthmap_resolution,
 | 
			
		||||
                "--max-resolution %s" % int(outputs['undist_image_max_size']),
 | 
			
		||||
                "--max-threads %s" % args.max_concurrency,
 | 
			
		||||
                "--number-views-fuse 2",
 | 
			
		||||
                "--number-views-fuse %s" % number_views_fuse,
 | 
			
		||||
                '-w "%s"' % depthmaps_dir, 
 | 
			
		||||
                "-v 0"
 | 
			
		||||
            ]
 | 
			
		||||
| 
						 | 
				
			
			@ -105,6 +102,11 @@ class ODMOpenMVSStage(types.ODM_Stage):
 | 
			
		|||
 | 
			
		||||
            if args.pc_tile:
 | 
			
		||||
                log.ODM_INFO("Computing sub-scenes")
 | 
			
		||||
 | 
			
		||||
                subscene_densify_ini_file = os.path.join(tree.openmvs, 'subscene-config.ini')
 | 
			
		||||
                with open(subscene_densify_ini_file, 'w+') as f:
 | 
			
		||||
                    f.write("Optimize = 0\n")
 | 
			
		||||
 | 
			
		||||
                config = [
 | 
			
		||||
                    "--sub-scene-area 660000",
 | 
			
		||||
                    "--max-threads %s" % args.max_concurrency,
 | 
			
		||||
| 
						 | 
				
			
			@ -125,10 +127,11 @@ class ODMOpenMVSStage(types.ODM_Stage):
 | 
			
		|||
 | 
			
		||||
                for sf in scene_files:
 | 
			
		||||
                    p, _ = os.path.splitext(sf)
 | 
			
		||||
                    scene_ply_unfiltered = p + "_dense.ply"
 | 
			
		||||
                    scene_ply = p + "_dense_dense_filtered.ply"
 | 
			
		||||
                    scene_dense_mvs = p + "_dense.mvs"
 | 
			
		||||
 | 
			
		||||
                    files_to_remove += [scene_ply, sf, scene_dense_mvs]
 | 
			
		||||
                    files_to_remove += [scene_ply, sf, scene_dense_mvs, scene_ply_unfiltered]
 | 
			
		||||
                    scene_ply_files.append(scene_ply)
 | 
			
		||||
 | 
			
		||||
                    if not io.file_exists(scene_ply) or self.rerun():
 | 
			
		||||
| 
						 | 
				
			
			@ -137,18 +140,26 @@ class ODMOpenMVSStage(types.ODM_Stage):
 | 
			
		|||
                            '--resolution-level %s' % int(resolution_level),
 | 
			
		||||
                            '--min-resolution %s' % depthmap_resolution,
 | 
			
		||||
                            '--max-resolution %s' % int(outputs['undist_image_max_size']),
 | 
			
		||||
                            '--dense-config-file "%s"' % densify_ini_file,
 | 
			
		||||
                            '--number-views-fuse 2',
 | 
			
		||||
                            '--dense-config-file "%s"' % subscene_densify_ini_file,
 | 
			
		||||
                            '--number-views-fuse %s' % number_views_fuse,
 | 
			
		||||
                            '--max-threads %s' % args.max_concurrency,
 | 
			
		||||
                            '-w "%s"' % depthmaps_dir,
 | 
			
		||||
                            '-v 0',
 | 
			
		||||
                        ]
 | 
			
		||||
 | 
			
		||||
                        if not args.pc_geometric:
 | 
			
		||||
                            config.append("--geometric-iters 0")
 | 
			
		||||
 | 
			
		||||
                        try:
 | 
			
		||||
                            system.run('"%s" "%s" %s' % (context.omvs_densify_path, sf, ' '.join(config + gpu_config)))
 | 
			
		||||
 | 
			
		||||
                            # Filter
 | 
			
		||||
                            if args.pc_filter > 0:
 | 
			
		||||
                                system.run('"%s" "%s" --filter-point-cloud -1 -v 0 %s' % (context.omvs_densify_path, scene_dense_mvs, ' '.join(gpu_config)))
 | 
			
		||||
                            else:
 | 
			
		||||
                                # Just rename
 | 
			
		||||
                                log.ODM_INFO("Skipped filtering, %s --> %s" % (scene_ply_unfiltered, scene_ply))
 | 
			
		||||
                                os.rename(scene_ply_unfiltered, scene_ply)
 | 
			
		||||
                        except:
 | 
			
		||||
                            log.ODM_WARNING("Sub-scene %s could not be reconstructed, skipping..." % sf)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -171,6 +182,7 @@ class ODMOpenMVSStage(types.ODM_Stage):
 | 
			
		|||
                    fast_merge_ply(scene_ply_files, tree.openmvs_model)
 | 
			
		||||
            else:
 | 
			
		||||
                # Filter all at once
 | 
			
		||||
                if args.pc_filter > 0:
 | 
			
		||||
                    if os.path.exists(scene_dense):
 | 
			
		||||
                        config = [
 | 
			
		||||
                            "--filter-point-cloud -1",
 | 
			
		||||
| 
						 | 
				
			
			@ -180,6 +192,11 @@ class ODMOpenMVSStage(types.ODM_Stage):
 | 
			
		|||
                        system.run('"%s" %s' % (context.omvs_densify_path, ' '.join(config + gpu_config)))
 | 
			
		||||
                    else:
 | 
			
		||||
                        raise system.ExitException("Cannot find scene_dense.mvs, dense reconstruction probably failed. Exiting...")
 | 
			
		||||
                else:
 | 
			
		||||
                    # Just rename
 | 
			
		||||
                    scene_dense_ply = os.path.join(tree.openmvs, 'scene_dense.ply')
 | 
			
		||||
                    log.ODM_INFO("Skipped filtering, %s --> %s" % (scene_dense_ply, tree.openmvs_model))
 | 
			
		||||
                    os.rename(scene_dense_ply, tree.openmvs_model)
 | 
			
		||||
 | 
			
		||||
            # TODO: add support for image masks
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue