5

Я пытаюсь определить углы (координаты x/y) в 2D векторах рассеяния данных.Угловое обнаружение в двумерных векторных данных

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

Угловое обнаружение является частью алгоритма SLAM, а углы служат ориентирами.

Я также с нетерпением, чтобы достичь чего-то близко к 100Hz с точки зрения скорости, если это возможно (я знаю его Matlab, но мой набор данных довольно мал.)

Образец данных:

Corner Detection

[Синий - это сырые данные, красный - это то, что мне нужно обнаружить. (Эта точка зрения фактически сверху вниз.)]

[Actual vector data from above shots]

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

Моим первым подходом был первоклассный строгальный инструмент для мини-квадратов, который разделил бы строки наполовину resurivly, пока они не встретили какое-то значение r^2, а затем попытаются объединить те, у кого похожий наклон/перехваты. Затем он вычислил пересечения этих линий. Это было не очень хорошо, но работало около 70% времени с приличной точностью, хотя у него были некоторые плохие проблемы с отсутствием некоторых функций полностью.

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

[Source Code to Current Method] [cnrs, dat, ~, ~] = CornerDetect(data, 4, 1) Используя приведенные выше данные, мы создадим местоположения, которые я получаю.

Мне не нужно писать это с нуля, просто казалось, что большинство методов более высокого класса предназначено для 2D-изображений или 3D-облаков точек, а не 2D-данных рассеяния. Я много читал о преобразованиях Hough и всех методах кластеризации данных (k-Means и т. Д.). Я также попробовал несколько консервированных линейных детекторов без особого успеха. Я попытался поиграть с Line Segment Detector, но ему нужно изображение с оттенками серого в качестве входного сигнала, и я решил, что было бы нецелесообразно медленно конвертировать мой вектор в полное 2D-изображение, чтобы передать его во что-то вроде ЛСД.

Любая помощь очень ценится!

ответ

2

Я бы приблизился к нему как к проблеме нахождения экстремумов кривизны, стабильных в нескольких масштабах, - и метод split-and-merge, который вы пробовали с линиями, намекает на это.

+0

Есть ли у вас какие-либо рекомендации или подходы к алгоритму, над которыми я должен смотреть? (Разделение и слияние были не копией учебника, а просто тем, что я написал после того, как разочаровались, прочитав все эти документы, которые дают только плохой psuedocode.) – athypes

+0

Большая часть последних работ была сосредоточена на поверхностях. Старый, но хороший в 2D - это «согласованность кривизны» Андре Лежен. Более поздним из них является пособие Леонтьева: http://www.cs.bgu.ac.il/~icbv061/StudentProjects/ICBV061/ICBV-2006-1-Leonid-Leontiev-Anna-Bakshi/Literature/00735812.pdf –

1

Вы можете использовать угловой детектор harris для обнаружения углов.

+0

Харрис для вышеуказанного рассеянного набора данных? Или для обработки всей рамки глубины? Все реализации harris, которые я нашел, принимают только полноцветные изображения в черно-белом или черно-белом изображении. – athypes

+0

Вы можете перемасштабировать свои данные (диапазон x и y) в определенном диапазоне, чтобы точки стали непрерывными, может выполняться бит дилатации, создавать изображение (из этих данных) и выполнять Harris.Харрис также будет работать для двоичных изображений, он просто вычисляет собственные значения матрицы, которая содержит градиентные величины в ортогональных направлениях внутри окна. В большинстве случаев это можно сделать быстрее, используя динамическое программирование (известное как интегральные изображения), и сложность зависит от диапазона (xmax, ymax) ваших данных. – Bharat

+0

Глупости, как правильно указывает OP, его данные не являются изображениями. –

Смежные вопросы