(self, residual, seg_idx, point_cloud=None, range_image=None)
| 55 | self.flat_num = flat_num |
| 56 | |
| 57 | def quantize_residual(self, residual, seg_idx, point_cloud=None, range_image=None): |
| 58 | if self.uniform: |
| 59 | residual_quantized = quantization_utils_cpp.uniform_quantize(seg_idx, residual, self.acc) |
| 60 | # # python version |
| 61 | # residual_collect = [] |
| 62 | # cluster_num = np.max(seg_idx) + 1 |
| 63 | # for m in range(cluster_num): |
| 64 | # if m == 1: |
| 65 | # # zero points. |
| 66 | # continue |
| 67 | # residual_collect.extend(residual[..., 0][np.where(seg_idx == m)]) |
| 68 | # residual_quantized = np.rint(np.array(residual_collect) / self.acc).astype(np.int16) |
| 69 | salience_level = None |
| 70 | key_point_map = None |
| 71 | else: |
| 72 | feature_map, key_point_map = extract_features_without_ground(range_image, seg_idx, |
| 73 | self.feature_region, self.segments, |
| 74 | self.sharp_num, self.less_sharp_num, |
| 75 | self.flat_num) |
| 76 | # range_image, seg_idx, feature_region=3, segments=8, sharp_num=4, less_sharp_num=8, flat_num=6 |
| 77 | (residual_quantized, salience_level) = quantization_utils_cpp.nonuniform_quantize(seg_idx, |
| 78 | residual, key_point_map, |
| 79 | self.level_kp_num, |
| 80 | self.acc, |
| 81 | self.ground_level) |
| 82 | # # python version |
| 83 | # cluster_num = np.max(seg_idx) + 1 |
| 84 | # salience_level = np.ones(cluster_num, dtype=np.int32) * 3 |
| 85 | # |
| 86 | # for cluster_id in range(cluster_num): |
| 87 | # if cluster_id == 0 or cluster_id == 1: |
| 88 | # continue |
| 89 | # cluster_idx = np.where(seg_idx == cluster_id) |
| 90 | # key_point_num = np.where(key_point_map[cluster_idx] > 0)[0].shape[0] |
| 91 | # cluster_points = point_cloud[cluster_idx] |
| 92 | # if cluster_points.shape[0] < 30: |
| 93 | # continue |
| 94 | # if key_point_num >= 3: |
| 95 | # salience_level[cluster_id] = 2 |
| 96 | # if key_point_num >= 10: |
| 97 | # salience_level[cluster_id] = 1 |
| 98 | # if key_point_num >= 30: |
| 99 | # salience_level[cluster_id] = 0 |
| 100 | # salience_level[0] = self.ground_level # ground |
| 101 | # salience_level[1] = 3 # zero points |
| 102 | # residual_collect = [] |
| 103 | # for m in range(cluster_num): |
| 104 | # if m == 1: |
| 105 | # # zero points |
| 106 | # continue |
| 107 | # cluster_acc = nonuniform_accuracy[salience_level[m]] |
| 108 | # cur_residual = residual[..., 0][np.where(seg_idx == m)] |
| 109 | # residual_collect.extend(list(np.rint(cur_residual / cluster_acc))) |
| 110 | # |
| 111 | # residual_quantized = np.array(residual_collect).astype(np.int32) |
| 112 | return residual_quantized, salience_level, key_point_map |
| 113 | |
| 114 | def dequantize_residual(self, quantized_residual, seg_idx, salience_level=None): |
no test coverage detected