avoid clean_pcd process large number of points; roll back to conservative version (retain noise cluster)
Browse files- handcrafted_solution.py +13 -9
handcrafted_solution.py
CHANGED
@@ -775,16 +775,20 @@ def clean_gest(gest_seg_np):
|
|
775 |
return gest_seg_np
|
776 |
|
777 |
def clean_PCD(XYZ, rgb):
|
778 |
-
|
779 |
-
labels = db.labels_
|
780 |
-
unique_labels = set(labels)
|
781 |
-
core_samples_mask = np.zeros_like(labels, dtype=bool)
|
782 |
center_thr = 500
|
783 |
-
retain_class_mask = labels == -2
|
784 |
largest_blob_size = 0
|
785 |
largest_blob = 0
|
786 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
787 |
#print('uni label:', len(unique_labels))
|
|
|
|
|
788 |
if len(unique_labels) > 40 or len(unique_labels) == 1:
|
789 |
return XYZ, rgb, lowest_z
|
790 |
|
@@ -797,11 +801,11 @@ def clean_PCD(XYZ, rgb):
|
|
797 |
|
798 |
for k in unique_labels:
|
799 |
class_member_mask = labels == k
|
800 |
-
|
801 |
if k == -1:
|
802 |
retain_class_mask = retain_class_mask | class_member_mask
|
803 |
continue
|
804 |
-
|
805 |
''' center prior is not valid
|
806 |
pt_k = XYZ[class_member_mask]
|
807 |
Xmean = np.mean(pt_k[:,0])
|
@@ -813,7 +817,7 @@ def clean_PCD(XYZ, rgb):
|
|
813 |
retain_class_mask = retain_class_mask | class_member_mask
|
814 |
pt_k = XYZ[class_member_mask]
|
815 |
lowest_z = min(pt_k[:,2])
|
816 |
-
break
|
817 |
|
818 |
XYZ = XYZ[retain_class_mask]
|
819 |
rgb = rgb[retain_class_mask]
|
|
|
775 |
return gest_seg_np
|
776 |
|
777 |
def clean_PCD(XYZ, rgb):
|
778 |
+
lowest_z = 0
|
|
|
|
|
|
|
779 |
center_thr = 500
|
|
|
780 |
largest_blob_size = 0
|
781 |
largest_blob = 0
|
782 |
+
# avoid memory issue
|
783 |
+
if len(XYZ) > 130000 or len(XYZ) < 20:
|
784 |
+
return XYZ, rgb, lowest_z
|
785 |
+
# clustering
|
786 |
+
db = DBSCAN(eps=150, min_samples=20).fit(XYZ)
|
787 |
+
labels = db.labels_
|
788 |
+
unique_labels = set(labels)
|
789 |
#print('uni label:', len(unique_labels))
|
790 |
+
#core_samples_mask = np.zeros_like(labels, dtype=bool)
|
791 |
+
retain_class_mask = labels == -2
|
792 |
if len(unique_labels) > 40 or len(unique_labels) == 1:
|
793 |
return XYZ, rgb, lowest_z
|
794 |
|
|
|
801 |
|
802 |
for k in unique_labels:
|
803 |
class_member_mask = labels == k
|
804 |
+
|
805 |
if k == -1:
|
806 |
retain_class_mask = retain_class_mask | class_member_mask
|
807 |
continue
|
808 |
+
|
809 |
''' center prior is not valid
|
810 |
pt_k = XYZ[class_member_mask]
|
811 |
Xmean = np.mean(pt_k[:,0])
|
|
|
817 |
retain_class_mask = retain_class_mask | class_member_mask
|
818 |
pt_k = XYZ[class_member_mask]
|
819 |
lowest_z = min(pt_k[:,2])
|
820 |
+
#break
|
821 |
|
822 |
XYZ = XYZ[retain_class_mask]
|
823 |
rgb = rgb[retain_class_mask]
|