fix bug: view_sample
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user