|
|
import numpy as np |
|
|
|
|
|
def judge_bbox_overlay(bbox_1, bbox_2): |
|
|
for i in range(3): |
|
|
if bbox_1[0][i] > bbox_2[1][i] or bbox_2[0][i] > bbox_1[1][i]: |
|
|
return False |
|
|
return True |
|
|
|
|
|
def denoise(pcd): |
|
|
labels = np.array(pcd.cluster_dbscan(eps=0.04, min_points=4)) + 1 |
|
|
mask = np.ones(len(labels), dtype=bool) |
|
|
count = np.bincount(labels) |
|
|
|
|
|
|
|
|
for i in range(len(count)): |
|
|
if count[i] < 0.2 * len(labels): |
|
|
mask[labels == i] = False |
|
|
|
|
|
remain_index = np.where(mask)[0] |
|
|
pcd = pcd.select_by_index(remain_index) |
|
|
|
|
|
pcd, index = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) |
|
|
remain_index = remain_index[index] |
|
|
return pcd, remain_index |
|
|
|
|
|
def filter_boundary(depth, delta=0.05): |
|
|
remove_mask = np.zeros(depth.shape).astype(bool) |
|
|
delta_depth_1 = np.abs(depth[1:, :] - depth[:-1, :]) |
|
|
delta_depth_2 = np.abs(depth[:, 1:] - depth[:, :-1]) |
|
|
remove_mask[1:, :] = remove_mask[1:, :] | (delta_depth_1 > delta) |
|
|
remove_mask[:-1, :] = remove_mask[:-1, :] | (delta_depth_1 > delta) |
|
|
remove_mask[:, 1:] = remove_mask[:, 1:] | (delta_depth_2 > delta) |
|
|
remove_mask[:, :-1] = remove_mask[:, :-1] | (delta_depth_2 > delta) |
|
|
depth[remove_mask] = 0 |
|
|
return depth |