ToF相机从Camera2 API中获取DEPTH16格式深度图[通俗易懂]

ToF相机从Camera2 API中获取DEPTH16格式深度图[通俗易懂]ToF相机工作原理:ToF相机给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲往回的飞行时间来得到目标距离。ToF相机可以同时得到整幅图像的深度(距离)信息。  深度图通常是灰度图,其中的每个值代表光反射表面和相机的距离。灰度图水平垂直坐标对应像素点位置,该位置的灰度值对应的是该像素距离摄像头的距离。所以深度图中的每个像素可以表示空间中一个点的三维坐标。如果光源被吸收或者未收到反射信号则呈现黑色。从Camera2API中获取DEPTH16格式的深度信息ImageFormat.DE

大家好,又见面了,我是你们的朋友全栈君。

ToF相机工作原理:

ToF相机给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲往回的飞行时间来得到目标距离。ToF相机可以同时得到整幅图像的深度(距离)信息。
  深度图通常是灰度图,其中的每个值代表光反射表面和相机的距离。灰度图水平垂直坐标对应像素点位置,该位置的灰度值对应的是该像素距离摄像头的距离。所以深度图中的每个像素可以表示空间中一个点的三维坐标。如果光源被吸收或者未收到反射信号则呈现黑色。

从Camera2API中获取DEPTH16格式的深度信息

ImageFormat.DEPTH16: Android密集深度图像格式。每个深度值是16位。16位由置信度值和实际测距测量组成。置信度是该样本正确性的估计值。它被编码在样本的3个最高效有效位中,其值0表示100%置信度,值1表示0%置信度,值2表示1/7,值3表示2/7. 剩下的13位就是表示每个像素的深度值。
获取深度信息流程:打开深度ToF相机—->给ImageReader设置长宽和格式ImageFormat.DEPTH16。在回调接口onImageAvailabe中拿到image数据。

  private int[] getDepth(Image image){
          ShortBuffer shortDepthBuffer=image.gePlanes()[0].getBuffer().asShortBuffer();
          int[] arr=new int[WIDTH*HEIGHT];
          for(int y=0;y<HEIGHT;y++){
               for(int x=0;x<WIDTH;x++){
                  int index=y*WIDTH+x;
                  short depth=shortDepthBuffer.get(indxe);
                  int newValue=extractRange(depthSample,0.1);
                  arr[index]=newVaule;
                  }
                }
           }

private int extractRange(short sample,float confidenceFilter){
     //2字节后13位保存深度信息
      int depthRange=(short)(sample&0x1FFF);
      //2字节的前3位保存置信度值
      int depthConfidence=(short)((sample>>13) & 0x7);
      //其值0表示100%置信度,值1表示0%置信度,值2表示1/7,值3表示2/7.
      //转换成我们熟悉点的表示方式 0~~1
      float depthPercentage=depthConfidence==0?1.f:(depthConfidence-1)/7.f;
      return depthPercentage>confidenceFilter?depthRange:0;
      }

获取到的距离信息归一化位0~255的像素值,最后转为RGB Bitmap,然后显示出来,基本可以看到物体的轮廓。

写在最后的话

今天是五一,放假,有时间可以写写博客,刚好可以对自己学习的东西有个整理~~~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142697.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于MIUI12.5或者任何无法使用GMS谷歌全家桶的解决办法[通俗易懂]

    关于MIUI12.5或者任何无法使用GMS谷歌全家桶的解决办法[通俗易懂]首先感谢酷安社区的@兔子吃肉不吃草原文链接:https://www.coolapk.com/feed/24583874由于其文章全部都是图片贴的代码而且没加说明对于小白比较难懂,我在这里对其进行进一步的补充和完善必要条件:手机已经root,电脑安装有adb(不知道adb是什么没关系,下载个小米助手,里边会自带一个adb.exe)开始1.电脑连接手机手机打开usb调试,电脑连接手机2.进入adb命令行如果你之前已经安装了adb并且配置了环境变量,可以直接打开cmd

    2022年6月27日
    142
  • 线性内插interp1函数用法

    线性内插interp1函数用法线性内插是假设在二个已知数据中的变化为线性关系,因此可由已知二点的座标(a,b)去计算通过这二点的斜线,公式如下:其中 a 在上式的 b 点即是代表要内插的点,f(b) 则是要计算的内插函数值。下图即是一个以二种内插法的比较\pcxfile[12cm,5cm]{fig9_1.pcx}\caption{线性式与spline函数的曲线契合}线性内插是最简单的内插方

    2022年5月8日
    94
  • 用数据说话,外贸B2C产品选择(上篇)-热门搜索法

    用数据说话,外贸B2C产品选择(上篇)-热门搜索法

    2022年1月30日
    56
  • PermitRootLogin yes无效问题

    PermitRootLogin yes无效问题奶奶的,搞了半下午终于找到原因。/etc/ssh/sshd_config明明设置了PermitRootLogin为yes,可就是用putty连,root登录不了,每次都accessdenied。气死我也。同一个集群的另外10几台机器每个都是好的,唯独这一台出问题。到处查资料,翻文章,甚至直接把其他机器的sshd_config拷贝过来还是不行。最后突然想起来,会不会是root尝…

    2022年6月11日
    192
  • springboot框架详解_springboot加载spring框架

    springboot框架详解_springboot加载spring框架一图胜千言:springboot容器启动流程:其中最重要的:运行机制为:springboot事件驱动:详情见:springboot事件驱动与观察者模式(http://www.cnblogs.com/dennyzhangdd/p/8343229.html)springboot启动流程图:分层图:…

    2022年8月21日
    6
  • idea2022激活码截至2022年【中文破解版】2022.02.01

    (idea2022激活码截至2022年)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    1.8K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号