fix bug: view_sample

This commit is contained in:
hofee
2024-10-20 23:45:44 +08:00
parent 5eff15d408
commit c2849ce9bb

View File

@@ -123,21 +123,24 @@ class ViewSampleUtil:
look_at_point_world = look_at_point_world[:3]
cam_position_world = cam_position_world[:3]
forward_vector = look_at_point_world - cam_position_world
forward_vector = cam_position_world - look_at_point_world
forward_vector /= np.linalg.norm(forward_vector)
up_vector = np.array([0, 0, 1])
dot_product = np.dot(forward_vector, up_vector)
angle = np.degrees(np.arccos(dot_product))
right_vector = np.cross(up_vector, forward_vector)
print(angle)
if angle < 110:
target_angle = np.random.uniform(110, 150)
if angle > 90 - min_cam_table_included_degree:
max_angle = 90 - min_cam_table_included_degree
min_angle = max(90 - min_cam_table_included_degree*2, 30)
target_angle = np.random.uniform(min_angle, max_angle)
angle_difference = np.radians(target_angle - angle)
rotation_axis = np.cross(forward_vector, up_vector)
rotation_axis /= np.linalg.norm(rotation_axis)
rotation_matrix = PoseUtil.rotation_matrix_from_axis_angle(rotation_axis, angle_difference)
rotation_matrix = PoseUtil.rotation_matrix_from_axis_angle(rotation_axis, -angle_difference)
new_cam_position_world = np.dot(rotation_matrix, cam_position_world - look_at_point_world) + look_at_point_world
cam_position_world = new_cam_position_world
forward_vector = cam_position_world - look_at_point_world
@@ -148,7 +151,10 @@ class ViewSampleUtil:
corrected_up_vector = np.cross(forward_vector, right_vector)
rotation_matrix = np.array([right_vector, corrected_up_vector, forward_vector]).T
else:
rotation_matrix = np.array([right_vector, up_vector, forward_vector]).T
right_vector = np.cross(up_vector, forward_vector)
right_vector /= np.linalg.norm(right_vector)
corrected_up_vector = np.cross(forward_vector, right_vector)
rotation_matrix = np.array([right_vector, corrected_up_vector, forward_vector]).T
cam_pose = np.eye(4)
cam_pose[:3, :3] = rotation_matrix
cam_pose[:3, 3] = cam_position_world
@@ -162,7 +168,7 @@ class ViewSampleUtil:
cos_angle = np.dot(direction_vector, horizontal_normal) / (np.linalg.norm(direction_vector) * np.linalg.norm(horizontal_normal))
angle = np.arccos(np.clip(cos_angle, -1.0, 1.0))
angle_degree = np.degrees(angle)
if angle_degree > 90 + min_cam_table_included_degree:
if angle_degree < 90 - min_cam_table_included_degree:
filtered_cam_poses.append(cam_pose)
if random.random() < random_view_ratio:
pertube_pose = PoseUtil.get_uniform_pose([0.1, 0.1, 0.1], [3, 3, 3], 0, 180, "cm")
@@ -172,7 +178,7 @@ class ViewSampleUtil:
cam_points = np.array([cam_pose[:3, 3] for cam_pose in filtered_cam_poses])
_, indices = PtsUtil.fps_downsample_point_cloud(cam_points, max_views, require_idx=True)
filtered_cam_poses = [filtered_cam_poses[i] for i in indices]
return np.array(filtered_cam_poses)
@staticmethod