Я бы предложил попробовать статистический фильтр выбросов, встроенный в PCL: http://pointclouds.org/documentation/tutorials/statistical_outlier.php
Вы сможете буквально скопировать этот пример в свой код, и он очистит эти редкие точки для вас (после изменения двух жестко закодированных значений, чтобы соответствовать вашей сцене). Если вы всегда будете смотреть на одну и ту же сцену или похожие сцены, этого будет достаточно. Однако, если вам нужно более универсальное решение c, которое будет адаптироваться к переменно-шумным или разреженным облакам точек, я бы посоветовал вам заранее сделать гистограмму ближайшего соседа (в коде), а затем провести простой анализ пиков, чтобы установить стандартное отклонение для фильтр.
После применения этого фильтра кластеризация должна стать тривиальной, поскольку разреженные точки будут удалены, а любые разреженные мосты между кластерами также будут предназначены для удаления.
Хотя существует несколько решений для кластеризации, в этом случае я бы, вероятно, go для извлечения евклидовых кластеров (вам, вероятно, не нужно делать воксельную сетку в качестве предварительного шага, показанного в примере, поскольку ваше облако по своей сути хорошо разнесено из-за вашего датчика): http://www.pointclouds.org/documentation/tutorials/cluster_extraction.php
Переменная допуска кластера позволит вам точно указать, насколько далеко друг от друга точки могут быть включены в один кластер.