修改单个grid处理obj的bug
This commit is contained in:
parent
34f19c430b
commit
817fadd8cd
@ -291,7 +291,7 @@ class ImagePreprocessor:
|
||||
self.extract_gps()
|
||||
self.cluster()
|
||||
self.filter_isolated_points()
|
||||
self.filter_time_group_overlap()
|
||||
# self.filter_time_group_overlap()
|
||||
# self.filter_alternate_images()
|
||||
grid_points, translations = self.divide_grids()
|
||||
self.copy_images(grid_points)
|
||||
|
@ -278,10 +278,10 @@ class ImagePreprocessor:
|
||||
if self.config.mode == "快拼模式":
|
||||
self.merge_tif(successful_grid_points, self.config.produce_dem)
|
||||
elif self.config.mode == "三维模式":
|
||||
self.merge_ply(successful_grid_points)
|
||||
# self.merge_ply(successful_grid_points)
|
||||
self.merge_obj(successful_grid_points, translations)
|
||||
else:
|
||||
# self.merge_tif(successful_grid_points, self.config.produce_dem)
|
||||
self.merge_tif(successful_grid_points, self.config.produce_dem)
|
||||
# self.merge_ply(successful_grid_points)
|
||||
self.merge_obj(successful_grid_points, translations)
|
||||
|
||||
@ -291,7 +291,7 @@ class ImagePreprocessor:
|
||||
self.extract_gps()
|
||||
self.cluster()
|
||||
self.filter_isolated_points()
|
||||
self.filter_time_group_overlap()
|
||||
# self.filter_time_group_overlap()
|
||||
# self.filter_alternate_images()
|
||||
grid_points, translations = self.divide_grids()
|
||||
# self.copy_images(grid_points)
|
||||
|
@ -193,17 +193,6 @@ class MergeObj:
|
||||
Returns:
|
||||
Tuple[float, float]: (longitude, latitude)中心点经纬度坐标
|
||||
"""
|
||||
if len(grid_points) == 1:
|
||||
grid_id = list(grid_points.keys())[0]
|
||||
shutil.copytree(os.path.join(self.output_dir,
|
||||
f"grid_{grid_id[0]}_{grid_id[1]}",
|
||||
"project",
|
||||
"odm_texturing"),
|
||||
os.path.join(self.output_dir, "texturing"))
|
||||
os.rename(os.path.join(self.output_dir, "texturing", "odm_textured_model_geo.obj"),
|
||||
os.path.join(self.output_dir, "texturing", "textured_model.obj"))
|
||||
return
|
||||
|
||||
try:
|
||||
# 创建输出目录
|
||||
output_model_dir = os.path.join(self.output_dir, "texturing")
|
||||
@ -227,7 +216,7 @@ class MergeObj:
|
||||
|
||||
# 获取所有有效的网格文件
|
||||
grid_files = {}
|
||||
all_vertices = [] # 用于存储所有顶点坐标
|
||||
grid_centers = [] # 用于存储每个grid的中心点坐标
|
||||
for grid_id, points in grid_points.items():
|
||||
base_dir = os.path.join(
|
||||
self.output_dir,
|
||||
@ -256,9 +245,11 @@ class MergeObj:
|
||||
'dir': base_dir
|
||||
}
|
||||
|
||||
# 读取obj文件的顶点坐标
|
||||
# 读取obj文件的顶点坐标并计算当前grid的中心点
|
||||
vertices, _, _, _, _, _ = self.read_obj(modified_obj)
|
||||
all_vertices.extend(vertices)
|
||||
grid_center_lon, grid_center_lat = self.get_center_coordinates(vertices)
|
||||
grid_centers.append((grid_center_lon, grid_center_lat))
|
||||
self.logger.info(f"网格 ({grid_id[0]},{grid_id[1]}) 中心点经纬度: ({grid_center_lon}, {grid_center_lat})")
|
||||
|
||||
if not grid_files:
|
||||
self.logger.error("没有找到有效的文件")
|
||||
@ -276,6 +267,16 @@ class MergeObj:
|
||||
|
||||
# 读取并更新MTL内容
|
||||
materials = self.read_mtl(files['mtl'])
|
||||
if len(grid_files) == 1:
|
||||
# 对于单个grid,直接使用update_mtl_content的结果
|
||||
updated_materials = self.update_mtl_content(
|
||||
materials,
|
||||
texture_map,
|
||||
grid_id
|
||||
)
|
||||
all_materials.update(updated_materials)
|
||||
else:
|
||||
# 对于多个grid,使用原有的处理逻辑
|
||||
updated_materials = self.update_mtl_content(
|
||||
materials,
|
||||
texture_map,
|
||||
@ -292,7 +293,29 @@ class MergeObj:
|
||||
f.write(f"{line}\n")
|
||||
f.write("\n")
|
||||
|
||||
# 合并OBJ文件
|
||||
# 最终结果
|
||||
final_obj = os.path.join(output_model_dir, "textured_model.obj")
|
||||
|
||||
if len(grid_files) == 1:
|
||||
# 对于单个grid,需要修改obj文件中的材质引用
|
||||
grid_id = list(grid_files.keys())[0]
|
||||
src_obj = grid_files[grid_id]['obj']
|
||||
|
||||
# 读取源obj文件内容
|
||||
vertices, tex_coords, normals, faces, face_materials, _ = self.read_obj(src_obj)
|
||||
|
||||
# 更新材质名称,添加网格前缀
|
||||
updated_face_materials = []
|
||||
for mat in face_materials:
|
||||
if mat: # 如果材质名不为空
|
||||
updated_face_materials.append(f"material_{grid_id[0]}_{grid_id[1]}_{mat}")
|
||||
else:
|
||||
updated_face_materials.append(mat)
|
||||
|
||||
# 写入新的obj文件
|
||||
self.write_obj(final_obj, vertices, tex_coords, normals, faces, updated_face_materials, "textured_model.mtl")
|
||||
else:
|
||||
# 合并多个OBJ文件
|
||||
reference_id = list(grid_files.keys())[0]
|
||||
merged_obj = grid_files[reference_id]['obj']
|
||||
temp_files = [] # 记录所有中间文件
|
||||
@ -310,8 +333,7 @@ class MergeObj:
|
||||
|
||||
merged_obj = temp_output
|
||||
|
||||
# 最终结果
|
||||
final_obj = os.path.join(output_model_dir, "textured_model.obj")
|
||||
# 重命名最终文件
|
||||
try:
|
||||
if os.path.exists(final_obj):
|
||||
os.remove(final_obj)
|
||||
@ -333,9 +355,10 @@ class MergeObj:
|
||||
self.logger.warning(
|
||||
f"删除临时文件失败: {temp_file}, 错误: {str(e)}")
|
||||
|
||||
# 计算中心点经纬度
|
||||
center_lon, center_lat = self.get_center_coordinates(all_vertices)
|
||||
self.logger.info(f"模型中心点经纬度: ({center_lon}, {center_lat})")
|
||||
# 计算所有grid中心点的平均值作为整体中心点
|
||||
center_lon = sum(center[0] for center in grid_centers) / len(grid_centers)
|
||||
center_lat = sum(center[1] for center in grid_centers) / len(grid_centers)
|
||||
self.logger.info(f"模型整体中心点经纬度: ({center_lon}, {center_lat})")
|
||||
|
||||
return center_lon, center_lat
|
||||
|
||||
|
@ -169,10 +169,10 @@ class ODMProcessMonitor:
|
||||
#f"--fast-orthophoto "
|
||||
f"--skip-3dmodel "
|
||||
)
|
||||
elif self.mode == "三维模式":
|
||||
docker_command += (
|
||||
f"--skip-orthophoto "
|
||||
)
|
||||
# elif self.mode == "三维模式":
|
||||
# docker_command += (
|
||||
# f"--skip-orthophoto "
|
||||
# )
|
||||
|
||||
docker_command += "--rerun-all"
|
||||
self.logger.info(docker_command)
|
||||
|
Loading…
Reference in New Issue
Block a user