我正在尝试使用 Project Tango C API,但如果点云的数量超过 ~6.5k(经过一些测试),应用程序崩溃且没有错误,代码如下
int width = mImageSource->getDepthImageSize().x;
int height = mImageSource->getDepthImageSize().y;
double fx = mImageSource->calib.intrinsics_d.projectionParamsSimple.fx;
double fy = mImageSource->calib.intrinsics_d.projectionParamsSimple.fy;
double cx = mImageSource->calib.intrinsics_d.projectionParamsSimple.px;
double cy = mImageSource->calib.intrinsics_d.projectionParamsSimple.py;
memset(inputRawDepthImage->GetData(MEMORYDEVICE_CPU), -1, sizeof(short)*width*height);
for (int i = 0; i < XYZ_ij->xyz_count; i++) {
float X = XYZ_ij->xyz[i*3][0];
float Y = XYZ_ij->xyz[i*3][1];
float Z = XYZ_ij->xyz[i*3][2];
if (Z < EPSILON || (X < EPSILON && -X < EPSILON) || (Y < EPSILON && -Y < EPSILON) || X != X || Y != Y || Z != Z)
continue;
int x_2d = (int)(fx*X/Z+cx);
int y_2d = (int)(fy*Y/Z+cy);
if (x_2d >=0 && x_2d < width && y_2d >= 0 && y_2d < height && (x_2d != 0 || x_2d != 0)) {
inputRawDepthImage->GetData(MEMORYDEVICE_CPU)[x_2d + y_2d*width] = (short) (Z*1000);
} else {
continue;
}
}
但是,如果我使用for (int i = 0; i < XYZ_ij->xyz_count && i < 6500; i++)
一切正常。我只是想知道是否有使用 C API 的接入点云的上限,或者我做错了什么?
(宽度为 320,高度为 180,其他内部函数从 Tango API 加载)
另外,谷歌在此页面底部提到使用最近邻过滤器获取密集深度图,Tango API 中是否有用于此的接口?或者有人会建议它的开源实现。
我还想知道是否有任何方法可以在 onXYZijAvailable 中“拉”彩色图像(1280x720),因为我需要一个密集的同步彩色点云。我是否需要应用外部矩阵来对齐两个坐标系,或者我只需要对彩色图像进行二次采样(假设它们的坐标系相同)?
感谢您的任何建议!