Я пытаюсь создать облако точек, где каждая точка имеет цвет. Я могу получить только облако точек, или я могу заставить камеру сделать снимок, но мне нужно, чтобы они были максимально возможными. Если бы я мог искать RGB-изображение с отметкой времени или вызывать функцию для получения текущего кадра при вызове onXYZijAvailable()
, я бы это сделал. Я мог бы просто перейти по точкам, узнать, где он будет пересекаться с плоскостью изображения и получить цвет этого пикселя.Извлечь pointclouds с цветом с использованием Project Tango; то есть получение текущего кадра камеры
Как сейчас, я не нашел способа получить информацию о пикселях изображения или получить цветные точки. Я видел приложения AR, где камера подключена к CameraView
, а затем вещи отображаются сверху, но поток камеры никогда не затрагивается приложением.
Согласно сообщению this, должно быть возможно получить нужные данные и синхронизировать облако точек и плоскость изображения простым преобразованием. This сообщение также говорит что-то подобное. Однако я не знаю, как получить данные RGB. Я не могу найти какие-либо проекты с открытым исходным кодом или учебные пособия.
Ближайшим Я получил это выяснить, когда кадр готов с помощью этого:
public void onFrameAvailable(final int cameraId) {
if (cameraId == TangoCameraIntrinsics.TANGO_CAMERA_COLOR) {
//Get the new rgb frame somehow.
}
}
Я работаю с API Java, и я очень хотел бы, чтобы не углубляться в JNI и если NDK во всех возможных. Как я могу получить фрейм, который наиболее точно соответствует временной метке моего текущего облака точек?
Благодарим за помощь.
Update:
Я реализовал версию процессора этого и даже после оптимизации его немного мне удалось получить .5 FPS на маленьком облаке точек. Это также связано с тем, что цвета должны быть преобразованы из собственного цветного пространства NV21 в андроид в цветовое пространство RGBA на GPU. Я мог бы оптимизировать его дальше, но я не собираюсь получать эффект в реальном времени с этим. Процессор на устройстве Android просто не может работать достаточно хорошо. Если вы хотите сделать это более чем на несколько тысяч пунктов, пойдите для дополнительной проблемы с использованием GPU или сделайте это в сообщении.
У меня нет проблем с OpenGL, к счастью. Это андроид и API танго, с которыми я борюсь. Я закончил с использованием NDK для извлечения данных. Я знаю, что могу напрямую связать цветное изображение с текстурой, но мне нужен доступ к данным, чтобы изменить его и передать данные на сервер для анализа. Я написал функцию TangoService_connectOnFrameAvailable() перед тем, как отправиться домой сегодня, поэтому завтра я буду работать над извлечением данных. Я очень рад видеть производительность пересечения границы между c и java и насколько дорого нужно извлечь изображение! Спасибо за ваш ответ. –
Даже если вам нужны цветные точки вне графического процессора, весьма вероятно, что наиболее эффективным способом их цветопередачи является использование графического процессора. То есть, будет менее дорого обтекать данные облачных облаков, сделать магию OpenGL в renderbuffer и потопить данные из renderbuffer, чем делать эти поисковые запросы (с возможностью интерполяции, возможно) и преобразования цветового пространства на CPU , – rhashimoto
Я хочу увидеть peeformance в первую очередь, поскольку программирование GPGPU на андроиде может быть более опасным. Если это слишком медленно, я попытаюсь это сделать. У вас есть данные по этому поводу? –