2013-05-24 3 views
7

У меня есть набор двумерных точек, неорганизованный, и я хочу найти «контур» этого набора (а не выпуклый корпус). Я не могу использовать альфа-формы, потому что у меня есть цель скорости (менее 10 мс на среднем компьютере). Мой первый подход состоял в том, чтобы вычислить сетку и найти квадраты контуров (квадраты, которые имеют пустой квадрат, как сосед). Поэтому я считаю, что эффективно сократил количество очков (от 22000 до 3000). Но мне еще нужно уточнить этот новый набор.Найти контур 2D неорганизованного pointcloud

The outline points are in green

Мой вопрос: как я могу найти реальные очертания точек среди моих зеленых точек?

+0

TRY [альфа- форма] (http://en.wikipedia.org/wiki/Alpha_shape) – chaohuang

ответ

1

После уик-энда, полного отражений, я нашел удобное решение.

Для этого нам нужна сетка, нам нужно заполнить ее своими точками, без труда.

Мы должны решить, какие квадраты считаются «контуром». Наши критерии: по крайней мере один пустой сосед и по крайней мере 3 непустых соседних.

Нам не хватает информации о подключении. Таким образом, мы выбираем квадрат «Контур», который как 2 «Контур» соседи или меньше. Затем мы выбираем одного из соседей. Из этого можно начать разложение. Мы просто обходим вокруг текущей площади, чтобы найти следующий квадрат «Контур», зная предыдущие квадраты «Контур». Наши контурные критерии не позволяют нам зайти в тупик.

Теперь мы имеем векторы связанных квадратов, и обычно, если наша форма не имеет отверстия, только один вектор связанных квадратов!

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

Contour

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

Для набора из 28000 пунктов эта методика занимает 8 мс. Альфа-формы CGAL будут занимать в среднем 125 мс за 28000 очков.

PS: Я надеюсь, что я ясно, английский не мой Родной: s

0

Вы действительно должны использовать альфа-формы. Возможно, использовать только зеленые точки в качестве входов альфа-альфа-алгоритма.

+0

Даже для 2500 точек, CGAL-х Время обработки альфа-форм составляет 15 мс. Добавленный к 5 мс нахождение зеленых точек, это 20 мс вычислительное время. Я нашел решение (я его печатаю), которое занимает 3 мс и имеет хороший выход. – Cyril

+0

@ Xerto: либо ваша машина очень медленная, либо вы плохо используете формы CGAL alpha. На моем ноутбуке время работы 25000 точек составляет около 5 мс, если вы не укажете слишком большие значения альфа и вернете все ребра (в этом случае это около 20 мс, для 25000 точек). – lrineau

+0

My proc - это Core 2 Duo, более того, программное обеспечение предназначено для беспилотного летательного аппарата, поэтому у нас есть низкая спецификация (возможно, Atom). Для CGAL's Alphashapes я использую данный пример в документации. – Cyril

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