2014-02-05 3 views
1

Я собираю трехмерное изображение руки из моего Kinect, и я хочу сгенерировать 2d-изображение, используя только значения X и Y для обработки изображений с использованием OpenCV. Размер 3d-матрицы является переменным и зависит от выхода от Kinect, а значения X и Y не в надлежащем масштабе для генерации 2-го изображения. Мои 3d очки и мой 3d изображения являются: http://postimg.org/image/g0hm3y06n/Преобразование 3d в 2d - PointCloud в OpenCV Image - C++

enter image description here

Я действительно не знаю, как я могу генерировать мой 2d изображения для выполнения моей обработки изображений.

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

ответ

0

Я думаю, вы должны применить триангуляцию Делоне к 2D-координатам облака точек (глубина игнорируется), а затем удалить слишком длинные вершины из треугольников. Вы можете оценить порог длины путем подсчета точек на одну область и оценки квадратного корня из значения, которое вы получите. После триангуляции вы можете нарисовать заполненные треугольники и найти контуры.

+0

Привет, Андрей, спасибо за ответ. Контуры, которые я найду, будут трехмерными точками? На самом деле, более простой подход, который я хочу, - создать Mat, jpg или другой вид изображения, который я могу выполнить Обработкой изображений, используя OpenCV для распознавания жестов. Вы знаете, как я могу сделать это преобразование? – lfelipesv

+0

Вы можете получить двоичное изображение с помощью операторов морфологии. Вы можете применить cv :: dilate с размером ядра немного больше среднего расстояния между точками на изображении. Это увеличит количество очков, и вы получите сильный силуэт. Затем вы можете применить эрозию, чтобы уменьшить силуэт до первоначального размера. Эта операция называется закрытием http://en.wikipedia.org/wiki/Closing_(morphology) –

+0

Привет, Андрей, это будет хорошо работать для меня, но у меня есть основная проблема, потому что для выполнения Erosion и Dilatation мне нужно создать изображение, которое я могу читать с помощью OpenCV imread. Теперь у меня есть только PCD (Point Cloud File), я уже сделал проецирование, поэтому мои компоненты X и Y отличаются от 0. Знаете ли вы, как я могу получить свой файл PCD и создать файл, который я могу читать с помощью imread ? Спасибо! – lfelipesv

0

Я думаю, что вы ищете OKPCL package .. Кроме того, не забудьте проверить this PCL post по теме .. Существует также класс OpenCVPCL Bridge, но, судя по всему, сайт не работает.

И наконец, было official word, что OpenCV и PCL объединяют усилия для платформы разработки, которая объединяет вычисления GPU с восприятием и обработкой 2d/3D.

НТН

0

Вы можете использовать PCLS RangeImage соответственно RangeImagePlanar класса с методом createFromPointCloud (я думаю, что у вас есть пункт облако, верно? Или то, что вы подразумеваете под 3D изображение?).

Затем вы можете создать мат OpenCV с использованием функций getImagePoint.

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