обработка изображений — Группировка точек, созданных Kinect в Stack Overflow

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

1

Решение

Это широкая тема называется «кластерный анализ». Посмотрите Вот для получения дополнительной информации. Вы должны провести несколько экспериментов с несколькими методами кластеризации.

4

Другие решения

Один простой метод заключается в следующем:

  1. исправьте значение «epsilon», которое вы хотите использовать для кластеризации
  2. для каждой точки вычисляем «ключ кластера» из координат
  3. добавить все точки на карту, проиндексированную ключом кластера
  4. собрать все группы, проверив кластер и только соседние кластеры

в коде:

std::map<CellIndex, std::vector<P3d> > pmap;

for (int  i=0,n=pts.size(); i<n; i++)
{
int ix = int(pts[i].x / eps);
int iy = int(pts[i].y / eps);
int iz = int(pts[i].z / eps);
pmap[CellIndex(ix, iy, iz)].push_back(pts[i]);
}

for (std::map<CellIndex, std::vector<P3d> >::iterator i=pmap.begin(),e=pmap.end();
i != e;
++i)
{
// get cluster center
int cx = i->first.ix;
int cy = i->first.iy;
int cz = i->first.iz;

// collect points from all 9 cluster with x index between cx-1 and cx+1
// between cy-1 and cy+1 and between cz-1 and cz+1 (inclusive).
// Not all clusters are guaranteed to be present in the map.
// You will be considering only points that are at most 1.5*sqrt(3)*eps from
// the center of the (cx, cy, cz) cell.
}

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

0

Рассматривали ли вы использование значит сдвиг?

0