Compare commits

...
43 Commits
Author SHA1 Message Date
hesuicong 7ffaf9cef2 关闭虚拟面增长优化 2026-08-24 15:09:48 +08:00
hesuicong ccd621f0b1 解决大模型贴图卡住的问题 2026-08-24 11:35:50 +08:00
hesuicong 9008e27d93 还原 2026-08-22 14:43:26 +08:00
hesuicong 2fefb4738c 解决一个崩溃的Bug 2026-08-21 14:48:20 +08:00
hesuicong 3dff609cb8 高光抑制 2026-08-19 15:59:23 +08:00
hesuicong 033dca0dd9 面选择调整 2026-08-19 14:45:05 +08:00
hesuicong 03eee01348 rect添加限制 2026-08-14 15:36:48 +08:00
hesuicong c49c3df5ad 色差问题优化 2026-08-14 14:56:42 +08:00
hesuicong 8577d13579 取消一些注释 2026-08-06 14:27:22 +08:00
hesuicong 982106fec2 解决构建虚拟面邻居图时的一个崩溃Bug 2026-08-06 14:25:15 +08:00
hesuicong 617f8ea2b5 优化虚拟面生成,增强法线和几何约束 2026-08-05 17:41:18 +08:00
hesuicong 715bf75c74 平坦区域虚拟面增长优化 2026-07-29 11:15:08 +08:00
hesuicong 068a06820d 区域生长策略 2026-07-28 17:59:30 +08:00
hesuicong debbe84898 临时代码 2026-07-28 16:41:08 +08:00
hesuicong 9dd09bfc11 代码优化 2026-07-27 14:41:36 +08:00
hesuicong f38ada2abd 更新 2026-07-21 16:17:06 +08:00
hesuicong 72dae852bb 简化相机选择逻辑 2026-07-08 17:36:52 +08:00
hesuicong 97b429ec98 解决色块的问题 2026-07-07 15:23:11 +08:00
hesuicong 4724b2e754 优化接口调用 2026-07-03 17:01:57 +08:00
hesuicong 4cc5558629 优化 2026-07-02 16:01:09 +08:00
hesuicong 0d3dd2909a 去掉一些注释 2026-07-02 15:24:10 +08:00
hesuicong d157312fba 多视图混合采样替换patch 2026-07-02 14:41:00 +08:00
hesuicong b28b78ee93 参数优化 2026-06-29 16:07:31 +08:00
hesuicong b9d12648a1 参数进一步优化 2026-06-29 11:51:52 +08:00
hesuicong 78aaaefb1a 兼容性更大 2026-06-26 09:39:23 +08:00
hesuicong 8ff037ff5e 参数优化 2026-06-25 18:17:47 +08:00
hesuicong 9696034738 参数优化 2026-06-25 16:54:03 +08:00
hesuicong 7f967e5434 参数优化 2026-06-25 10:45:15 +08:00
hesuicong eda58b268f 参数优化 2026-06-24 14:47:15 +08:00
hesuicong e21b2f572b 优化参数 2026-06-23 17:05:09 +08:00
hesuicong 54c7ea1240 评分系统优化 2026-06-23 16:47:53 +08:00
hesuicong b47e0ab82f 添加评分系统来处理视图选择 2026-06-23 15:53:04 +08:00
hesuicong 9c3e97f447 单视图投射进一步优化 2026-06-22 14:54:09 +08:00
hesuicong c927ce7db7 小臂问题优化 2026-06-16 10:38:05 +08:00
hesuicong 65d8242c9c 小臂测试优化 2026-06-15 18:02:34 +08:00
hesuicong 383bd34431 进一步调优版本 2026-06-13 16:25:06 +08:00
hesuicong ec1a89b078 两轮填数据方式 2026-06-12 17:31:09 +08:00
hesuicong b469eb83ff 供面片决策的筛选视图决策宽松,每一个面片一旦优势命中后,剔除所有视图 2026-06-11 17:56:40 +08:00
hesuicong 4048de2dc4 优化筛选逻辑 2026-06-11 16:13:33 +08:00
hesuicong 9ab39219b1 最佳视图选择逻辑优化 2026-06-10 18:34:36 +08:00
hesuicong 68cb2ea1fc 优化bug 2026-06-06 17:47:04 +08:00
hesuicong 3159aa8b5e 一个失误 2026-06-05 14:35:24 +08:00
hesuicong ef9de71d44 单视图优化 2026-06-05 14:13:53 +08:00
4 changed files with 2879 additions and 823 deletions

No files matched your search

File diff suppressed because it is too large. Load diff
+3
View File
@@ -65,6 +65,7 @@ public:
std::map<std::string, std::unordered_set<int>> visible_faces_map;
std::map<std::string, std::unordered_set<int>> edge_faces_map;
std::map<std::string, std::unordered_set<int>> delete_edge_faces_map;
std::map<std::string, std::unordered_set<int>> delete_edge_faces_map2;
std::map<std::string, std::unordered_set<int>> face_normal_visible_map;
std::unordered_set<int> face_visible_relative;
@@ -164,6 +165,7 @@ public:
std::unordered_set<int>& face_visible_relative,
std::map<std::string, std::unordered_set<int>>& edge_faces_map,
std::map<std::string, std::unordered_set<int>>& delete_edge_faces_map,
std::map<std::string, std::unordered_set<int>>& delete_edge_faces_map2,
std::map<std::string, std::unordered_set<int>>& face_normal_visible_map,
std::string& basePath);
@@ -178,6 +180,7 @@ public:
bool is_face_visible_relative(int face_index);
bool is_face_edge(const std::string& image_name, int face_index);
bool is_face_delete_edge(const std::string& image_name, int face_index);
bool is_face_delete_edge2(const std::string& image_name, int face_index);
bool is_face_normal_visible_map(const std::string& image_name, int face_index);
void SegmentMeshBasedOnCurvature(Mesh::FaceIdxArr& regionMap, float curvatureThreshold);
+2046 -285
View File
File diff suppressed because it is too large. Load diff
+30 -9
View File
@@ -1427,13 +1427,15 @@ class ModelProcessor:
# ============ 法线夹角过滤结束 ============
# 使用与CPU版本相同的后续处理
shrunk_visibility = self._shrink_face_visibility(face_visible.cpu().numpy(), 12)
shrunk_visibility = self._shrink_face_visibility(face_visible.cpu().numpy(), 6)
expanded_visibility = self._expand_face_visibility(face_visible.cpu().numpy(), 0)
shrunk_visibility2 = self._shrink_face_visibility(face_visible.cpu().numpy(), 0)
shrunk_visibility3 = self._shrink_face_visibility(face_visible.cpu().numpy(), 100)
expanded_edge = expanded_visibility & ~shrunk_visibility2
delete_edge = face_visible.cpu().numpy() & ~shrunk_visibility
delete_edge2 = face_visible.cpu().numpy() & ~shrunk_visibility3
return shrunk_visibility, expanded_edge, delete_edge, face_normal_visible
return shrunk_visibility, expanded_edge, delete_edge, delete_edge2, face_normal_visible
"""
def _gen_depth_image_gpu(self, cam_data, render):
@@ -1464,6 +1466,7 @@ class ModelProcessor:
visible_faces_dict = {}
edge_faces_dict = {}
delete_edge_faces_dict = {}
delete_edge_faces_dict2 = {}
face_normal_visible_dict = {}
total_start = time.time()
@@ -1490,13 +1493,14 @@ class ModelProcessor:
# continue
start_time = time.time()
face_visibility, face_edge, face_delete_edge, face_normal_visible = self._flag_model_gpu(camera_data)
face_visibility, face_edge, face_delete_edge, face_delete_edge2, face_normal_visible = self._flag_model_gpu(camera_data)
processing_time = time.time() - start_time
visible_faces = np.where(face_visibility)[0].tolist()
visible_faces_dict[img_name] = visible_faces
edge_faces_dict[img_name] = np.where(face_edge)[0].tolist()
delete_edge_faces_dict[img_name] = np.where(face_delete_edge)[0].tolist()
delete_edge_faces_dict2[img_name] = np.where(face_delete_edge2)[0].tolist()
face_normal_visible_dict[img_name] = np.where(face_normal_visible.cpu().numpy())[0].tolist()
print(f"图像 {img_name} 处理完成,耗时: {processing_time:.2f}秒,可见面数量{len(visible_faces)}")
@@ -1505,13 +1509,14 @@ class ModelProcessor:
print(f"所有图像处理完成,总耗时: {total_time:.2f}秒")
print(f"平均每张图像耗时: {total_time/len(images):.2f}秒")
self.save_occlusion_data(visible_faces_dict, edge_faces_dict, delete_edge_faces_dict, face_normal_visible_dict, self.asset_dir)
self.save_occlusion_data(visible_faces_dict, edge_faces_dict, delete_edge_faces_dict, delete_edge_faces_dict2, face_normal_visible_dict, self.asset_dir)
return {
"result1": visible_faces_dict,
"result2": edge_faces_dict,
"result3": delete_edge_faces_dict,
"result4": face_normal_visible_dict
"result4": delete_edge_faces_dict2,
"result5": face_normal_visible_dict
}
#"""
@@ -2098,6 +2103,7 @@ class ModelProcessor:
result2: Dict[str, List[int]],
result3: Dict[str, List[int]],
result4: Dict[str, List[int]],
result5: Dict[str, List[int]],
base_path: str) -> None:
"""
保存遮挡数据到文件
@@ -2133,8 +2139,12 @@ class ModelProcessor:
for image_name, face_list in result3.items():
delete_edge_faces_map[image_name] = set(face_list)
face_normal_visible_map: Dict[str, Set[int]] = {}
delete_edge_faces_map2: Dict[str, Set[int]] = {}
for image_name, face_list in result4.items():
delete_edge_faces_map2[image_name] = set(face_list)
face_normal_visible_map: Dict[str, Set[int]] = {}
for image_name, face_list in result5.items():
face_normal_visible_map[image_name] = set(face_list)
# 保存 visible_faces_map
@@ -2181,16 +2191,27 @@ class ModelProcessor:
except IOError as e:
print(f"Error writing delete_edge_faces_map file: {e}")
# 保存 delete_edge_faces_map2
try:
file_name = "_delete_edge_faces_map2.txt"
file_path = Path(base_path) / file_name
with open(file_path, "w", encoding='utf-8') as map_file4:
for image_name, face_set in delete_edge_faces_map2.items():
line = image_name + " " + " ".join(str(face) for face in face_set) + "\n"
map_file4.write(line)
except IOError as e:
print(f"Error writing delete_edge_faces_map2 file: {e}")
# 保存 face_normal_visible_map
try:
file_name = "_face_normal_visible_map.txt"
file_path = Path(base_path) / file_name
with open(file_path, "w", encoding='utf-8') as map_file4:
with open(file_path, "w", encoding='utf-8') as map_file5:
for image_name, face_set in face_normal_visible_map.items():
line = image_name + " " + " ".join(str(face) for face in face_set) + "\n"
map_file4.write(line)
map_file5.write(line)
except IOError as e:
print(f"Error writing delete_edge_faces_map file: {e}")
print(f"Error writing _face_normal_visible_map file: {e}")
def process(self):