返回上级
共6条
跳至  页 
  • 阅读数:479发布于2021-07-01 16:09:57

    只看该作者
    Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题 复制本文链接

    相机:Gemini 3D双目结构光深度相机
    环境:Android7.1
    软件:SDK中的java demo下的depthforopenni2
    问题:
    在Android样例depthforopenni2的OpenGLView中,读取深度数据后,转为点云并保存为文件,用点云工具查看点云效果,总是有很多噪点,而且这些噪点都是从相机向外延伸状;但用SDK的PC样例运行同样的过程,点云效果就很干净;手动编译c++样例到linux环境下,点云效果也很干净;
    噪点效果类似下图:
    深度数据转点云后噪点多的效果

    “锥型”图底部是正确的点云效果,其他都是噪点。

    深度转点云的过程如下:
    ByteBuffer byteBuffer = frame.getData();//深度数据

    NativeUtil.test(byteBuffer);//JNI方法,把深度数据转为点云,并保存为文件

    JNI方法代码如下:
    extern “C”
    JNIEXPORT void JNICALL Java_PclNativeUtils_test(JNIEnv env,jclass clazz,jobject depBuff)
    {
    pcl::PointCloud::Ptr cloud(new pcl::PointCloud);
    int error_count = 0;
    char
    buff = (char)malloc(500 1024 1024);
    short
    srcBuf = (short )env->GetDirectBufferAddress(depBuff);
    unsigned int depth;
    int cum=0;
    int filteredCnt = 0;
    for (int v = 0; v < height; ++v)//240
    {
    for (int u = 0; u < width; ++u)//320
    {
    depth = srcBuf[v
    width+u];
    if (depth <= 0 || depth < min_depth || depth > max_depth)
    {continue;}

            //分辨率缩放,这里假设标定时的分辨率分RESOULTION_X,RESOULTION_Y
            float fdx = f_x * ((float)(width) / RESOULTION_X);
            float fdy = f_y * ((float)(height) / RESOULTION_Y);
            float u0 = c_x * ((float)(width) / RESOULTION_X);
            float v0 = c_y * ((float)(height) / RESOULTION_Y);
            float tx = (u - u0) / fdx;
            float ty = (v - v0) / fdy;
            cloud->points[cum].x = depth * tx;
            cloud->points[cum].y = depth * ty;
            cloud->points[cum].z = depth;
            cum+=1;
        }
    }
    cloud->resize(cum+1);
    char oriName[64]  = "";
    sprintf(oriName,"storage/emulated/0/pcd/yuanshi.pcd");
    pcl::io::savePCDFile(oriName, *cloud);
    

    }

    也就是把深度数据转为点云后,保存为文件。

    同样的JNI代码,移植到AstraSDKJavaDemo样例中,效果一样,深度数据转点云后,非常多噪点。但用windows样例获取深度数据,调用同样的方法转换为点云,则没有任何噪点。

    想请教:这种情况是相机的AndroidSDK驱动不兼容有问题?还是我们使用方法有问题?因为我们一定要在Android平台上使用深度相机,但现在噪点问题无法解决,已经无法往前推进了。希望能得到及时的技术帮助。谢谢

    回复 (1)

    举报
  • 发布于2021-07-12 22:05:39

    只看该作者 显示全部

    您好, 请问能否分析下windows和安卓下的深度图的质量,是否质量一样,还是有区别?

    回复 (0)

    举报
  • 发布于2021-07-21 17:51:59

    只看该作者 显示全部
    不爱唠叨的唐僧 发表于 2021-07-12 22:05:39

    您好, 请问能否分析下windows和安卓下的深度图的质量,是否质量一样,还是有区别?

    我们看到的现象是有区别的,在安卓下深度图“雪花”状比较明显,而在windows下则要没那么明显。

    不知道是否可以指导我们直接通过NDK重新编译安卓下的驱动。

    回复 (0)

    举报
  • 发布于2021-07-22 09:36:00

    只看该作者 显示全部
    不爱唠叨的唐僧 发表于 2021-07-12 22:05:39

    您好, 请问能否分析下windows和安卓下的深度图的质量,是否质量一样,还是有区别?

    深度图的质量如何评判呢?
    下面是windows下的深度图:
    https://cloud.rojao.cn:15443/s/BPcbbHpkfGmmcWp

    这是安卓下的深度图,都是拍摄桌面上一个杯子
    https://cloud.rojao.cn:15443/s/7yyBeJbTqRiQifZ

    回复 (0)

    举报
  • 发布于2021-08-12 09:09:32

    只看该作者 显示全部
    不爱唠叨的唐僧 发表于 2021-07-12 22:05:39

    您好, 请问能否分析下windows和安卓下的深度图的质量,是否质量一样,还是有区别?

    深度图质量如何对比呢?
    下面是Andoid和PC分别拍摄杯子的深度图,不懂如何判断深度图的质量。

    Android上拍摄杯子的深度图

    PC拍摄杯子的深度图

    回复 (0)

    举报
  • 发布于2021-08-13 14:31:12

    只看该作者 显示全部
    138****4827 发表于 2021-08-12 09:09:32

    深度图质量如何对比呢?
    下面是Andoid和PC分别拍摄杯子的深度图,不懂如何判断深度图的质量。

    Android上拍摄杯子的深度图

    PC拍摄杯子的深度图

    建议您核对一下两个版本SDK中orbbec.ini文件参数设置是否保持一致,重点核对这几组参数。
    深度图配置:
    1.输出格式配置
    ; Output format. 100 - 1mm depth values (default), 102 - u9.2 Shift values.
    ;设置depth的输出格式 100:表示1mm精度;101:100um精度;102:表示输出原始视差;如果要输出原始视差,修改该配置项,修改完后,不能在Niviewer在切换分辨率(因为会切换depth的输出模式)。
    ;OutputFormat=100
    3.分辨率设置
    ; 0 - QVGA, 1 - VGA, 4 - QQVGA. Default: Arm - 4, other platforms - 0 -16 1280x800, -17 640x400 -20 320x200
    ;设置Depth的分辨率;
    ;Resolution=1
    分辨率设置具体根据规格书进行确认,苍龙和Deeyea型号产品应使用640*400这个分辨率
    4.帧率配置
    ; Frames per second (default is 30)
    ;设置depth的帧率(目前不支持动态设置分辨率)
    ;FPS=30
    5.最小深度值配置
    ; Min depth cutoff. 0-10000 mm (default is 0)
    ;过滤的最小深度值,小于该深度值,过滤掉,置为0
    ;举例:(如:MinDepthValue =300,那么小于30厘米的depth就会过滤掉)
    ;MinDepthValue=0
    6.最大深度值配置
    ; Max depth cutoff. 0-10000 mm (default is 10000)
    ;过滤最大的深度值,大于该值的depth会过滤掉,置为0 (如果 OutputFormat=101,那么只有2.3.0.51后的版本才支持)
    ;MaxDepthValue=10000
    7.输入格式配置
    ; Input format. 0 - Uncompressed 16-bit, 1 - PS Compression, 3 - Packed 11-bit, 4 - Packed 12-bit. Default: Arm - 4, other platforms - 3
    ;深度打包格式,现在我们用到的有(10bit,11bit,12bit) 其中3:表示11bit;4:表示12bit;2:表示10bit(龙卷风D2使用)
    InputFormat=3
    10.滤波配置
    ; Hole Filler. 0 - Off, 1 - On (default)
    ;填洞滤波,0:表示关闭滤波功能,开启时取值1,2,3;
    ;HoleFilter=0

    回复 (0)

    举报
  • 发布于2021-08-16 13:58:09

    只看该作者 显示全部
    悟空 发表于 2021-08-13 14:31:12

    建议您核对一下两个版本SDK中orbbec.ini文件参数设置是否保持一致,重点核对这几组参数。
    深度图配置:
    1.输出格式配置
    ; Output format. 100 - 1mm depth values (default), 102 - u9.2 Shift values.
    ;设置depth的输出格式 100:表示1mm精度;101:100um精度;102:表示输出原始视差;如果要输出原始视差,修改该配置项,修改完后,不能在Niviewer在切换分辨率(因为会切换depth的输出模式)。
    ;OutputFormat=100
    3.分辨率设置
    ; 0 - QVGA, 1 - VGA, 4 - QQVGA. Default: Arm - 4, other platforms - 0 -16 1280x800, -17 640x400 -20 320x200
    ;设置Depth的分辨率;
    ;Resolution=1
    分辨率设置具体根据规格书进行确认,苍龙和Deeyea型号产品应使用640*400这个分辨率
    4.帧率配置
    ; Frames per second (default is 30)
    ;设置depth的帧率(目前不支持动态设置分辨率)
    ;FPS=30
    5.最小深度值配置
    ; Min depth cutoff. 0-10000 mm (default is 0)
    ;过滤的最小深度值,小于该深度值,过滤掉,置为0
    ;举例:(如:MinDepthValue =300,那么小于30厘米的depth就会过滤掉)
    ;MinDepthValue=0
    6.最大深度值配置
    ; Max depth cutoff. 0-10000 mm (default is 10000)
    ;过滤最大的深度值,大于该值的depth会过滤掉,置为0 (如果 OutputFormat=101,那么只有2.3.0.51后的版本才支持)
    ;MaxDepthValue=10000
    7.输入格式配置
    ; Input format. 0 - Uncompressed 16-bit, 1 - PS Compression, 3 - Packed 11-bit, 4 - Packed 12-bit. Default: Arm - 4, other platforms - 3
    ;深度打包格式,现在我们用到的有(10bit,11bit,12bit) 其中3:表示11bit;4:表示12bit;2:表示10bit(龙卷风D2使用)
    InputFormat=3
    10.滤波配置
    ; Hole Filler. 0 - Off, 1 - On (default)
    ;填洞滤波,0:表示关闭滤波功能,开启时取值1,2,3;
    ;HoleFilter=0

    对比了orbbec.ini文件参数,发现只有一个参数有差异:Resolution,Android平台下我们使用了20,也就是320x200;而Windows下使用的是SDK里默认的分别率的值1,也就是VGA,其他参数没有差异。
    下面是Android平台下使用的orbbec.ini文件:

    ;---------------- Sensor Default Configuration -------------------
    [Device]
    ; Mirroring. 0 - Off (default), 1 - On
    ;Mirror=1
    
    ; FrameSync. 0 - Off (default), 1 - On
    ;FrameSync=1
    
    ; Stream Data Timestamps. 0 - milliseconds, 1 - microseconds (default)
    ;HighResTimestamps=1
    
    ; Stream Data Timestamps Source. 0 - Firmware (default), 1 - Host
    ;HostTimestamps=0
    
    ; A filter for the firmware log. Default is determined by firmware.
    ;FirmwareLogFilter=0
    
    ; Automatic firmare log retrieval. 0 - Off (default), or the number of milliseconds between log retrievals operations.
    ;FirmwareLogInterval=1000
    
    ; Print firmware log to console when automatic firmware log retrieval is on. 0 - Off (default), 1 - On
    ;FirmwareLogPrint=1
    
    ; Is APC enabled. 0 - Off, 1 - On (default)
    ;APCEnabled=1
    
    ; USB interface to be used. 0 - FW Default, 1 - ISO endpoints (default on Windows), 2 - BULK endpoints (default on Linux/Mac/Android machines), 3 - ISO endpoints for low-bandwidth depth
    UsbInterface=2
    
    [Depth]
    ; Output format. 100 - 1mm depth values (default), 102 - u9.2 Shift values.
    ;OutputFormat=100
    
    ; Is stream mirrored. 0 - Off, 1 - On
    ;Mirror=1
    
    ; 0 - QVGA, 1 - VGA, 4 - QQVGA. Default: Arm - 4, other platforms - 0, -14 1280x720, 15 1280x960,-16 1280x800, -17 640x400 -20 320x200,-26 800x1280,-27 400x640
    Resolution=20
    
    ; Frames per second (default is 30)
    ;FPS=30
    
    ; Min depth cutoff. 0-10000 mm (default is 0)
    ;MinDepthValue=0
    
    ; Max depth cutoff. 0-10000 mm (default is 10000)
    ;MaxDepthValue=10000
    
    ; Input format. 0 - Uncompressed 16-bit, 1 - PS Compression, 3 - Packed 11-bit, 4 - Packed 12-bit. Default: Arm - 4, other platforms - 3
    InputFormat=3
    
    ; Registration. 0 - Off (default), 1 - On
    ;Registration=1
    
    ; Registration Type. 0 - Don't care (default), 1 - use hardware accelaration, 2 - perform in software
    ;RegistrationType=0
    
    ; software filter 0-off ,1--on (default)
    ;SoftFilter=0
    
    ;ReadParams=0
    
    ; dual sensor: 5.96 mm
    ;focallength=5.96
    
    ;dual sensor: 0.0052mm
    ;dPlanePixelSize=0.113967
    
    ;dPlaneDistance=130
    
    ;dual sensor: 75mm
    ;dEmitterDcmosDistance=7.500000
    
    ;dhorizontalFov=0.022600
    
    ;dverticalFov=0.796616
    
    
    ; Hole Filler. 0 - Off, 1 - On (default)
    ;HoleFilter=0
    
    ; White Balance. 0 - Off, 1 - On (default)
    ;WhiteBalancedEnabled=0
    
    ; Gain. 0-50 (0 - Auto, 1 - Min., 50 - Max.). Default value is set by firmware.
    ;Gain=0
    
    ; Close Range Mode. 0 - Off (default), 1 - On
    ;CloseRange=1
    
    ; GMC Mode. 0 - Off, 1 - On (default)
    ;GMCMode=0
    
    ; GMC Debug. 0 - Off (default), 1 - On
    ;GMCDebug=1
    
    ; Depth Auto Gain Region-of-Interest. Default values are set by firmware.
    ;DepthAGCBin0MinDepth=500
    ;DepthAGCBin0MaxDepth=800
    ;DepthAGCBin1MinDepth=1500
    ;DepthAGCBin1MaxDepth=1800
    ;DepthAGCBin2MinDepth=2500
    ;DepthAGCBin2MaxDepth=2800
    ;DepthAGCBin3MinDepth=3500
    ;DepthAGCBin3MaxDepth=3800
    
    ; Wavelength Correction Mechanism. 0 - Off (default), 1 - On
    ;WavelengthCorrection=1
    
    ; Wavelength Correction debug info. 0 - Off (default), 1 - On
    ;WavelengthCorrectionDebug=1
    
    ; Cropping mode. 1 - Normal (default), 2 - Increased FPS, 3 - Software only
    ;CroppingMode=2
    
    ; Cropping area
    [Depth.Cropping]
    OffsetX=0
    OffsetY=0
    SizeX=320
    SizeY=240
    ;Enabled=1
    
    [Image]
    ; Output format. 200 - RGB888 (default), 201 - YUV422, 202 - Gray8 (2.0 MP only), 205 - YUYV
    ;OutputFormat=201
    
    ; Is stream mirrored. 0 - Off, 1 - On
    ;Mirror=1
    
    ; 0 - QVGA (default), 1 - VGA, 2 - SXGA (1.3MP), 3 - UXGA (2.0MP), 14 - 720p, 15 - 1280x960
    Resolution=1
    
    ; Frames per second (default is 30)
    ;FPS=30
    
    ; Input format. 0 - Compressed 8-bit BAYER (1.3MP or 2.0MP only), 1 - Compressed YUV422 (default in BULK), 2 - Jpeg, 5 - Uncompressed YUV422 (default in ISO), 6 - Uncompressed 8-bit BAYER (1.3MP or 2.0MP only), 7 - Uncompressed YUYV
    InputFormat=5
    
    ; Anti Flicker. 0 - Off (default), 50 - 50Hz, 60 - 60 Hz.
    ;Flicker=50
    
    ; Image quality when using Jpeg. 1-10 (1 - Lowest, 10 - Highest (default))
    ;Quality=10
    
    ; Cropping mode. 1 - Normal (default), 2 - Increased FPS, 3 - Software only
    ;CroppingMode=1
    
    ; Cropping area
    [Image.Cropping]
    ;OffsetX=0
    ;OffsetY=0
    ;SizeX=320
    ;SizeY=240
    ;Enabled=1
    
    [IR]
    ; Output format. 200 - RGB888, 203 - Grayscale 16-bit (default)
    ;OutputFormat=203
    
    ; Is stream mirrored. 0 - Off, 1 - On
    ;Mirror=1
    
    ; 0 - QVGA (default), 1 - VGA, 2 - SXGA(1.3MP), 4 - QQVGA. -14 1280x720, 15 1280x960,-16 1280x800, -17 640x400 -20 320x200,-26 800x1280,-27 400x640
    Resolution=1
    
    ; Frames per second (default is 30)
    ;FPS=30
    
    ; Cropping mode. 1 - Normal (default), 2 - Increased FPS, 3 - Software only
    ;CroppingMode=1
    
    ; Cropping area
    [IR.Cropping]
    ;OffsetX=0
    ;OffsetY=0
    ;SizeX=320
    ;SizeY=240
    ;Enabled=1
    

    Windows下使用的orbbec.ini文件为SDK中自带的默认文件,没有修改。

    接下来,我们应该如何调整配置或其他呢??谢谢!!

    回复 (0)

    举报
返回上级
共6条
跳至  页 
举报

请选择举报理由

  • 垃圾广告
  • 违规内容
  • 恶意灌水
  • 重复发帖
提示

奥比中光 · 3D视觉开发者社区...

站长统计