改善深度相机获取的深度图质量(稳定性)的trick

2023-05-16

用kinect或者realsense获取的深度图或者点云图,由于传感器获取深度信息的不稳定性,经常出现一张图里面,有些深度信息丢失,尤其是物体边缘,因此怎么进行预处理得到较好的质量的数据很关键。

(自用备忘,若侵则删。)

1.时序数据的统计方法

多取N个时刻的数据(因为相机和物体保持不变),得到N张深度图,理论上这些数据应该相同,但由于传感器的不稳定性,有小部分不一致,因此可通过N张深度图,其每个pixel的值可进行累计求均值来改善,大致算法如下(来自别人的硕士论文“基于RealSense的散乱零件三维目标识别”)

2.双边滤波和联合双边滤波

为保持边沿特征,在滤波时要考虑核范围内的值,不能只用空间阈值。

双边滤波:

 

联合双边滤波

联合双边滤波相对于双边滤波来说,最大的特点就是引入了一幅引导影像。去这幅引导滤波灰度值来计算色域权重,引导图像要跟原图像一样大小,如果用了一幅不一样的图像做引导,需要进行上采样或者下采样,上采样的结果可以对深度图填补一些空洞的作用。

3.引导滤波

可参考,csdn的一篇文章

4.利用卡尔曼滤波算法

之前没了解卡尔曼滤波,看到了这个应用,就去了解了一下,看了B站的视频和CSDN的一篇博文(卡尔曼详解_上善若水-CSDN博客_卡尔曼),

基本公式:

 X(k)=AX(k-1)+BU(k)+W(k)       系统方程   (1)

 Z(k)=HX(k)+V(k)                         观测方程 (2)  

 X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。A和B是系统参数,对于多模型系统,他们为矩阵。Z(k)是k时刻的测量值,H是测量系统的参数,对于多测量系统,H为矩阵。W(k)和V(k)分别表示过程和测量的噪声。他们被假设成高斯白噪声,他们的协方差分别是Q,R,在实际应用中。由于系统中一般不太有控制量,所以B这个参数一般为0,也就是没有U(K)(如果是自动驾驶,有加速度之类的,这些就是控制量)。           

注:虽然在表达式中包括了系统噪声w和转测噪声v,但在计算系统状态转移和系统观测量的时候并不考虑这两个噪声的影响。两个噪声的影响只是在卡尔曼滤波器离散迭代算法过程中使用到了两个噪声的协方差矩阵Q和R。分别用于计算系统状态估计误差的协方差矩阵P和卡尔曼滤波器增益K的大小。                           

自己的大致总结:这是世界任何数据或多或少都会有误差的存在,没有绝对的,我们看到的数据(头脑反馈估计数据-模型估计),设备测量出来的数据(传感器测出的数据),这些误差都是正态分布的。对于深度图来说,上一帧的优化后数据(每个pixel的值)为X(k-1),在下一帧预测模型(观察者大脑反馈)预测的值为X(k),我们的大脑反馈认为这一帧跟上一帧是一样的,所以A为1,B为0),这一帧的传感器测出来的是Z(k),就是得到的这一帧的深度图数据(每个pixel的值),这时候由于各种误差,X(k)和Z(k)并不是一样的(比如在传感器对物体边缘丢失,就是我们看到的黑点,本来就是有的,或者反过来),那怎么去权衡,(到底那个值是真是不知道的,那我只好用这个两个值进行一番太极拳,柔和在一起,得到一个估计值),要用这两个数据拟合出一个优化数据,就需要一个增益量Kg(权重系数),但是计算这个增益量很麻烦,用到上面提到的Q 、R,用来计算估计值误差(噪声)P和Kg。

其计算的基本原理大致如下图所示,左边的上一时刻的优化估计值分布模型(蓝色),和中间蓝色的预测值分布模型,以及右侧橙色的测量值分布模型,最终的目的是找到这一时刻的优化估计模型(灰色),这些分布都是正态分布,因此计算增益量其实就是找到一个优化正态分布模型的过程,这就要用到Q和R,计算出这个优化的正态模型的误差协方差P。

   基于以上两个基本公式,卡尔曼滤波最终要计算的是这一时刻的优化估计值。

X(k|k)=X(k|k-1)+Kg(k)*(Z(k)-Hx(k|k-1))            (3)

其中x(k|k)是这一时刻的优化估计值,x(k|k-1)是根据上一时刻的状态(优化后的值)对现在时刻状态的预测,在我们深度图例子中就是前面提到的观测者大脑根据上一时刻反馈出来的这一时刻的值(预测模型估计),Kg(k)就是我们要求的增益量(权重系数),Z(k)就是这一时刻设备测量值,即这一时刻的相机获取的深度图数据,H为测量系数,我们这个案例里面为1.

接下来那就算公式3中的每个值,以计算出x(k|k),

根据1、2公式,可得

X(k|k-1)=AX(k-1|k-1)+Bu(k)+W(k)           (4)

本例 B=0  以及系统方程和观测方程计算不考虑噪声,所以 可变为

                              X(k|k-1)=AX(k-1|k-1)         

P(k|k-1)=A*P(k-1|k-1)A'+Q                      ( 5 )

P(k|k-1)为根据上一帧的优化模型估计的误差协方差P(k-1)来做预测的误差协方差,用来计算当前帧的增益量。

Kg(k)=P(k|k-1)*H'/(H*P(k|k-1)*H' + R).....  .( 6 )

这样通过公式4、5、6导入到3,就可以求出此时刻优化估计的值X(k|k)

那为了一个时刻P的预测,还需要计算当前时刻的P

p(k|k)=(I-Kg(k)*H)*P(k|k-1).....................( 5 )  

总结起来就是下图的两个阶段(参考B站视频,注:表示符号与上面提到的公式不一样)

 

但在应用中,怎么去确定X、Z、A、H、Q、R呢?

X为我们想得到的状态结果,Z就是传感器的观测值

我自己最大的疑惑是观察方程里面怎么用状态方程里面的X表示,度娘很多文章,但是还是有疑问,但最终自己总结理解:Z(k)=HX(k)+V(k)    这个只是观察值的模拟表达式,观测方程是对传感器输出的描述,在直接观测模式下,H都是单位矩阵,z是通过传感器值输入的,只是在模拟里面或者没法直接测量(比如测火箭喷气温度,智能在接近的地方测)需要。

回到本深度图案例中,

X是我们深度图中的每个像素值和其与上一帧的变化值△x组成,A、B、U 、H取如下值

3.直方图均衡化

直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。直方图均衡化虽然只是数字图像处理(Digital Image Processing)里面的基本方法,但是其作用很强大,是一种很经典的算法。

其作用就是让灰蒙蒙的图,变得清晰些(灰度图),具体参考知乎直方图均衡化 - 知乎

使用的效果就像下图

 可使用Python库PIL中的ImageOps 的API实现

eq_img = ImageOps.equalize(img)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

改善深度相机获取的深度图质量(稳定性)的trick 的相关文章

  • 汽车UDS诊断详解及Vector相关工具链使用说明——2.2.7 动态定义DID(0x2C)

    1 概述 动态定义DID服务允许诊断仪在ECU内部动态定义一个临时的DID 可以通过该DID读取一段内存的数据 也可以通过改DID一次性读取多个原有DID的数据 动态定义DID既可以是支持22服务的DID 也可以是支持2A服务的周期性读取
  • 关于RTOS中信号量、互斥量、邮箱、消息队列的一些理解

    1 信号量 信号量有两种 xff1a 计数性信号量和二值信号量 xff0c 计数性信号量可以被获取多次 xff0c 二值信号量只有0和1两种状态 xff0c 只能被获取一次 信号量可以用来对资源进行保护 xff0c 防止多个任务同时访问某个
  • 英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM

    本系列的其它几篇文章 xff1a 英飞凌 AURIX 系列单片机的HSM详解 xff08 2 xff09 与HSM相关的UCB和寄存器 英飞凌 AURIX 系列单片机的HSM详解 xff08 3 xff09 开发方法 英飞凌 AURIX 系
  • DoIP(一)——基础概念

    1 DoIP概述 DoIP xff08 Diagnostic communication over Internet Protocol xff09 是基于车载以太网的诊断 xff0c 在OSI 七层模型中属于传输层 xff0c 其传输的诊断
  • DoIP(二)——报文类型

    我们上一篇文章提到 xff0c DoIP报头中有两字节的数据类型 xff08 Payload Type xff09 xff0c 代表DoIP报文类型 xff0c 本文就来详细介绍一下每一种报文类型 标准中对报文类型的定义如下 xff1a 数
  • AUTOSAR —— CAN网络管理(CanNm)

    1 网络状态 AUTOSAR网络管理节点内部有两个状态 xff0c 一个是Requested 被请求状态 xff0c 另一个是Released 被释放状态 xff0c 当节点的应用层需要使用总线进行通讯的时候 xff0c 会调用接口使得节点
  • S32K1XX系列单片机 ——(1)开发环境搭建

    本文介绍一下NXP S32系列单片机开发环境的搭建方法 xff0c 分两种 xff1a S32DS和Keil 1 S32DS S32DS是NXP开发的一款IDE xff0c 编译器是GCC xff0c 支持Lauterbach P amp
  • AUTOSAR —— S32K144 的 Fls 和 Fee 模块配置

    本文来简要介绍一下如何在EB中配置AUTOSAR Fls和Fee模块 Fls模块是Flash的驱动 xff0c 执行具体的Flash擦写读取等操作 Fee模块的全称是FlashEEPROMEmulation xff0c 即Flash模拟EE
  • NXP MCU CAN波特率(位时间)配置详解

    1 概述 本文将会详细讲解如何设置NXP MCU的CAN波特率 位时间 采样点等属性 波特率即CAN总线传输频率 xff0c 位时间是波特率的倒数 xff0c 例如波特率是500K xff0c 那么位时间 61 1 500000 61 0
  • 51单片机之蜂鸣器

    include 34 reg52 h 34 include 34 intrins h 34 typedef unsigned int ui typedef unsigned char uc define led P2 34 34 sbit
  • vnc配置

    centos版本在7 0以上的 一 安装 yum grouplist 查看是否已经安装过 yum groupinstall GNOME Desktop 如没有安装则运行命令安装 以root用户运行以下命令来安装vncserver yum i
  • 【WebAPI 验证】给 webapi加上token 验证(包括上传文件方法)

    需要给网站开发对接EMI 接口 xff0c 因此想通过Webapi 进行传递参数 xff0c 但是由于该方法不太安全 xff0c 因此不选用 xff0c 但是记录下该方法的使用 1 xff0c 创建WEBAPI 项目 xff0c 打开nug
  • 委托和事件

    一 委托与事件的区别 委托是一种用于存储方法引用的引用类型 xff0c 它定义了一种类型安全的调用回调方法的方式 事件使用委托来封装触发时将要调用的方法 xff0c 事件是一种函数成员 委托是指向一个方法的指针 xff0c 而且我们采取和调
  • OS文件/目录方法----获取当前py文件的路径

    获取当前py文件的路径 xff1a 1 直接获取 只返回当前文件的工作目录 aa 61 os getcwd print 39 当前文件的路径 39 aa 输出 当前文件的路径 G PycharmProjects SeleniumUnitte
  • vscode如何配置git-2022.10

    文章目录 1 vscode填写git配置2 打开git命令行界面 windows本地已经安装git 并配置成功 1 vscode填写git配置 在搜索框中搜索 terminal integrated automation profile w
  • LCD12864串口高级操作

    上面是LCD12864的串口通信时序图 其中RW是方向位 xff0c RS是命令数据选择位 xff0c SID为数据线 xff0c SCLK为时钟线 xff0c CS为使能端 其中CS为1时使能时序操作 xff0c 由图可以看出 xff0c
  • Ubuntu server 18.04 服务器配置

    文章目录 前言一 下载镜像 制作系统u盘启动盘二 安装设置三 创建用户 给普通用户root权限四 GPU驱动安装五 miniconda安装 操作虚拟环境常用指令六 pytracking环境配置总结 前言 例如 xff1a 原有centos服
  • OpenCV数据载入、显示与保存

    一 图像存储器 OpenCV提供了一个Mat类用于存储矩阵数据 Mat类用来保存矩阵类型的数据信息 xff0c 包括向量 矩阵 灰度或彩色图像等数据 Mat类分为矩阵头和指向存储数据的矩阵指针的两部分 矩阵头中包含矩阵的尺寸 存储方法 地址
  • Colab运行YOLOv5训练自己的数据集

    最近想使用YOLOv5模型训练自己的数据集 xff0c 但是没有GPU 所以白嫖一下Google的Colab 第一 xff1a 制作自己的数据集 这里给出一篇自己看过的博客写和博主自制的视频 xff0c 我觉得讲的挺好 xff0c 数据集方
  • HC05主从蓝牙通信的配置步骤

    HC05主从一体化蓝牙模块 xff0c 可以配置为一个主蓝牙和一个从蓝牙 xff0c 两个蓝牙之间实现互相通信 拿到蓝牙之后只需接VCC GND RX TX 首先让蓝牙进入AT模式 先按住蓝牙上的微动开关 xff0c 然后给蓝牙上电 蓝牙上

随机推荐

  • 游记_秦皇岛-北戴河两日游

    写在开篇 在北京上学 xff0c 经常收到各种关于秦皇岛 北戴河的安利 xff0c 一直想去但是都没有实现 xff0c 前段时间终于和男朋友决定用一个周末的时间 xff08 周五晚上从北京出发 xff0c 周六早上到秦皇岛 xff0c 周日
  • STM32学习之路(首篇)

    STM32的学习之路 xff0c 到目前为止学习32也有一段时间了 xff0c 学习32的过程和学51单片机的道路差不多 首先要拥有自己的32开发板 xff0c 我买的是正点原子的开发板 xff0c 商家提供了很多学习资料 xff0c 一开
  • STM32学习之路(五---IIC)

    IIC是由数据线SDA和时钟SCL构成的串行总线 xff0c 可以发送和接收数据 在CPU与被控IC之间 xff0c IC与IC之间进行双向传送 IIC总线在传送数据过程中共有三种类型的信号 xff0c 分别是 xff1a 开始信号 xff
  • PWM调速的原理

    PWM调速实质上是调节占空比 xff0c 我们都是根据占空比的大小来衡量速度 xff0c 但是为什么我们调节占空比就可以实现对速度的调节呢 xff1f 这就需要我们了解调速的本质 xff0c 我们用PWM调节速度问什么能够实现 xff1f
  • keil中显示expected expression

    在keil中出现error expected expression的错误 xff0c 网上很多人都是在 Misc Cortrols这里改一下写c99就好了 xff0c 但是我改过之后还是没好 xff0c 依然报警告 xff0c 后来我自己的
  • Linux学习(C语言学习之Gcc)

    言之者无罪 xff0c 闻之者足以戒 诗序 Linux的学习需要对C语言有一个透彻性的了解 xff0c 需要有非常好的C语言基础 xff0c Gcc是Linux中的C文件的一个编译器 xff08 当然也不只局限于C文件 xff09 Gcc最
  • 如何在 python中查询某个函数的使用方法

    在Python 中查询某个函数的使用 方法时由两种途径 xff1a 1 利用help来查询 xff0c 比如用help来查询print内置函数的使用 xff0c 直接打开Shell输入 help print 就可以了 2 利用Python官
  • 玩转电机驱动——电机编码器

    玩转电机驱动 电机编码器 文章目录 玩转电机驱动 电机编码器前言一 旋转编码器1 光学编码器2 光学旋转编码器与Arduino连接3 程序 二 Arduino Encoder h库相关知识1 硬件要求2 基本用法3 了解正交编码信号4 示例
  • 6、SYSTEM文件夹介绍

    1 delay文件夹 delay c和delay h两个文件 xff0c 其中有七个函数 xff1a void delay osschedlock void void delay osschedunlock void void delay
  • 姿态估计0-06:DenseFusion(6D姿态估计)-源码解析(2)-linemod数据集,预处理解读

    以下链接是个人关于DenseFusion 6D姿态估计 所有见解 xff0c 如有错误欢迎大家指出 xff0c 我会第一时间纠正 有兴趣的朋友可以加微信 xff1a 17575010159 相互讨论技术 若是帮助到了你什么 xff0c 一定
  • 动作识别0-02:mmaction2(SlowFast)-官方数据训练测试-ucf101

    以下链接是个人关于mmaction2 SlowFast 动作识别 所有见解 xff0c 如有错误欢迎大家指出 xff0c 我会第一时间纠正 有兴趣的朋友可以加微信 xff1a 17575010159 相互讨论技术 若是帮助到了你什么 xff
  • 如何快速找到你想要的文献

    阅读文献是深入科研和跟随前沿发展的必要条件 xff0c 大家写论文的时候也需要查阅各种文献 xff0c 引证自己的观点 很多人并不太清楚下载文献的途径 xff0c 只简单了解图书馆 xff0c 知网 xff0c sci等 xff0c 多者使
  • java中private,public,protected详解

    参照甲骨文的java文档 xff1a 点击打开链接 访问级别 访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法 有两个级别的访问控制 xff1a 1 在顶级 public或package private xff08 没有显式修饰符
  • 史上最简SLAM零基础解读(10.1) - g2o(图优化)→简介环境搭建(slam十四讲第二版为例)

    本人讲解关于slam一系列文章汇总链接 史上最全slam从零开始 文末正下方中心提供了本人 联系方式 xff0c 点击本人照片即可显示 W X
  • (02)Cartographer源码无死角解析-(19) SensorBridge→雷达点云数据帧处理与坐标系变换(涉及函数重载)

    本人讲解关于slam一系列文章汇总链接 史上最全slam从零开始 xff0c 针对于本栏目讲解 02 Cartographer源码无死角解析 链接如下 02 Cartographer源码无死角解析 00 目录 最新无死角讲解 xff1a h
  • 目标检测0-02:YOLO V3-网络结构输入输出解析

    以下链接是个人关于YOLO V3所有见解 xff0c 如有错误欢迎大家指出 xff0c 我会第一时间纠正 xff0c 如有兴趣可以加微信 xff1a 17575010159 相互讨论技术 目标检测0 00 xff1a YOLO V3目录 史
  • arm, 任务调度,上下文切换,硬件软件

    1 hardware 1 1 The ARM architecture is a Reduced Instruction Set Computer RISC architecture with the following RISC arch
  • docker-registry相关知识

    私有仓库docker registry 一 关于registry xff1a 官方的Docker hub是一个用于管理公共镜像的好地方 xff0c 我们可以在上面找到我们想要的镜像 xff0c 也可以把我们自己的镜像推送上去 但是 xff0
  • javascript中的delete操作符

    delete 操作符用于删除对象的某个属性 xff1b 如果没有指向这个属性的引用 xff0c 那它最终会被释放 var Employee 61 firstname 34 John 34 lastname 34 Doe 34 console
  • 改善深度相机获取的深度图质量(稳定性)的trick

    用kinect或者realsense获取的深度图或者点云图 xff0c 由于传感器获取深度信息的不稳定性 xff0c 经常出现一张图里面 xff0c 有些深度信息丢失 xff0c 尤其是物体边缘 xff0c 因此怎么进行预处理得到较好的质量