Для какого-то алгоритма реконструкции объема, над которым я работаю, мне нужно обнаружить произвольное количество круговых паттернов в данных трехмерных точек (поступающих с устройства LIDAR). Образцы могут быть произвольно ориентированы в пространстве, и предполагается, что они лежат (хотя и не идеально) в тонких двумерных плоскостях. Вот пример с двумя кругами в одной плоскости (хотя помните, что это трехмерное пространство):
Я перепробовал много подходов ... самый простой (но наиболее эффективный) - кластеризация на основе непересекающихся множеств графа ближайших соседей. Это работает достаточно хорошо, когда шаблоны находятся далеко друг от друга, но в меньшей степени с кругами, похожими на те, что в примере, действительно близко друг к другу.
Я попробовал K-средства, но это не очень хорошо: я подозреваю, что расположение круговых точек может не подходить для этого. Кроме того, у меня есть дополнительная проблема, не зная заранее значение К.
Я попробовал более сложные подходы, основанные на обнаружении циклов в графе ближайшего соседа, но то, что я получил, было либо слишком хрупким, либо вычислительно дорогим.
Я также читал о многих смежных темах (преобразование Хафа и т. Д.), Но в этом конкретном контексте кажется, что ничего не подходит. Любая идея или вдохновение будет оценено.
источник
Ответы:
Обобщенное преобразование Хафа - именно то, что вы хотите. Сложность состоит в том, чтобы сделать это эффективно, потому что пространство кругов в 3D имеет шесть измерений (три для центра, два для ориентации плоскости, одно для радиуса). Кажется, это исключает прямой расчет.
Одна возможность состоит в том, чтобы подкрасться к результату через последовательность более простых преобразований Хафа. Например, вы можете начать с (обычного) преобразования Хафа, чтобы обнаружить плоские подмножества: для них требуется только трехмерная сетка для вычислений. Для каждого обнаруженного плоского поднабора нарежьте исходные точки вдоль этой плоскости и выполните обобщенное преобразование Хафа для обнаружения круга. Это должно работать хорошо, если исходное изображение не имеет много копланарных точек (кроме тех, которые сформированы кругами), которые могли бы заглушить сигнал, генерируемый кругами.
Если размеры кругов имеют заранее определенную верхнюю границу, вы потенциально можете сэкономить много вычислений: вместо того, чтобы смотреть на все пары или тройки точек в исходном изображении, вы можете сосредоточиться на парах или тройках в ограниченной окрестности каждой точки.
источник
источник