Обнаружение круговых структур в данных облака точек

10

Для какого-то алгоритма реконструкции объема, над которым я работаю, мне нужно обнаружить произвольное количество круговых паттернов в данных трехмерных точек (поступающих с устройства LIDAR). Образцы могут быть произвольно ориентированы в пространстве, и предполагается, что они лежат (хотя и не идеально) в тонких двумерных плоскостях. Вот пример с двумя кругами в одной плоскости (хотя помните, что это трехмерное пространство):

введите описание изображения здесь

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

Я попробовал K-средства, но это не очень хорошо: я подозреваю, что расположение круговых точек может не подходить для этого. Кроме того, у меня есть дополнительная проблема, не зная заранее значение К.

Я попробовал более сложные подходы, основанные на обнаружении циклов в графе ближайшего соседа, но то, что я получил, было либо слишком хрупким, либо вычислительно дорогим.

Я также читал о многих смежных темах (преобразование Хафа и т. Д.), Но в этом конкретном контексте кажется, что ничего не подходит. Любая идея или вдохновение будет оценено.

cjauvin
источник
Более простой вопрос: как бы вы пошли по поводу обнаружения отрезков в двумерных данных?
charles.y.zheng
"как в примерах"? Какие примеры? Вы можете добавить ссылку?
Одна остановка
Преобразование Хафа - очевидный выбор. Это должно работать хорошо.
whuber
Тем временем у меня достаточно репутации, чтобы добавить пример изображения, на который я ссылался.
cjauvin
3
Это не проблема кластеризации. В статистике «кластеры» состоят из наборов объектов, которые взаимно ближе друг к другу, чем другие объекты. Близость не улавливает цикличность: поэтому ни K-средства, ни какой-либо другой алгоритм кластеризации не будут работать. По этой причине этот вопрос, вероятно, лучше подходит для сайтов обработки изображений или ГИС-сайтов, где вы можете найти экспертов по этому вопросу.
whuber

Ответы:

9

Обобщенное преобразование Хафа - именно то, что вы хотите. Сложность состоит в том, чтобы сделать это эффективно, потому что пространство кругов в 3D имеет шесть измерений (три для центра, два для ориентации плоскости, одно для радиуса). Кажется, это исключает прямой расчет.

Одна возможность состоит в том, чтобы подкрасться к результату через последовательность более простых преобразований Хафа. Например, вы можете начать с (обычного) преобразования Хафа, чтобы обнаружить плоские подмножества: для них требуется только трехмерная сетка для вычислений. Для каждого обнаруженного плоского поднабора нарежьте исходные точки вдоль этой плоскости и выполните обобщенное преобразование Хафа для обнаружения круга. Это должно работать хорошо, если исходное изображение не имеет много копланарных точек (кроме тех, которые сформированы кругами), которые могли бы заглушить сигнал, генерируемый кругами.

Если размеры кругов имеют заранее определенную верхнюю границу, вы потенциально можете сэкономить много вычислений: вместо того, чтобы смотреть на все пары или тройки точек в исходном изображении, вы можете сосредоточиться на парах или тройках в ограниченной окрестности каждой точки.

Whuber
источник
Я попытался бы объединить все предложенные подходы: первый кластер, основанный только на расстоянии, как обсуждалось в оригинальном плакате, который даст вам кластеры, которые могут состоять из нескольких кругов. Затем используйте Hough для обнаружения плоских подмножеств в каждом кластере. Затем в каждом плоском подмножестве снова используйте Hough, чтобы найти круги. Если этот последний шаг дорог, вы можете сделать эффективное короткое замыкание: попробуйте несколько тройок, угадать круг и посмотрите, не окажется ли значительная часть точек в вашем подмножестве очень близко к этому кругу. Если это так, запишите этот круг и удалите все эти точки, затем продолжите.
Эрик П.
3
Эта последняя идея называется RANSAC и, вероятно, может использоваться сама по себе, особенно если количество кружков на изображение мало.
ШелдонКупер
Спасибо за интересные идеи! Многошаговое преобразование Хафа кажется мне наиболее мощным и общим решением, но RANSAC действительно выглядит проще в реализации, и, возможно, этого достаточно в моем контексте. Одна проблема, которую я быстро заметил, - это случай несбалансированных размеров, который явно смещает выборку в сторону более крупных объектов. Есть мысли по поводу этой проблемы?
cjauvin
Как только вы обнаружите большой круг, удалите все точки, которые принадлежат ему, из выборки.
SheldonCooper