Обнаружение прямоугольного отверстия с помощью PCL - PullRequest
0 голосов
/ 13 января 2019

Используя PCL, я пытаюсь обнаружить и локализовать прямоугольный вырез из большой стальной рамы (см. Ниже): Теперь я использую класс корпуса Concave и получаю контуры от прямоугольника. Тем не менее, внешние границы обзора камеры также следуют. Я использовал сквозной фильтр, чтобы избавиться от границ, однако это работает только в определенных случаях. Я спрашиваю: знаете ли вы какие-нибудь методы, которые могли бы дать лучший результат?

Для отверстий они не всегда находятся на одной высоте или в одном месте. Но они стандартного размера (+/- 1 см). Критерии размера могут устранить ложные обнаружения.

enter image description here

Это модель, имитирующая беседку, и облако точек, полученное с помощью имитированного кинекта с использованием ROS.

Используя PCL, я использовал плоскостную сегментацию SAC, затем извлек вогнутый корпус. Как видно на изображении, края обзора камеры также считаются вогнутыми. enter image description here

pcl::SACSegmentation<pcl::PointXYZ> segmentation;
segmentation.setOptimizeCoefficients (true);
segmentation.setModelType(pcl::SACMODEL_PLANE);
segmentation.setMethodType(pcl::SAC_RANSAC);
segmentation.setMaxIterations(1000);
segmentation.setDistanceThreshold(0.01);
segmentation.setInputCloud(cloud_ptr);//breytti
segmentation.segment(*inliers, *coefficients);

pcl::ConcaveHull<pcl::PointXYZ> chull;
chull.setInputCloud (cloud_projected);

chull.setAlpha (0.1);
chull.reconstruct (*cloud_hull, hullPolygons);

Eigen::Vector4f centroid;//new object for centroid calculation
pcl::PointXYZ minpt, maxpt;//min max boundary of new cloud
pcl::compute3DCentroid(*cloud_hull, centroid);
pcl::getMinMax3D(*cloud_hull,minpt,maxpt);

Подводя итог, ищите надежный метод или идеи для обнаружения прямоугольного надреза на раме. Спасибо

...