用于增加深度相机图像的精度的技术转让专利

申请号 : CN201380075799.4

文献号 : CN105144710B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : C·罗恩A·兰詹S·马利克

申请人 : 英特尔公司

摘要 :

一种用于改善深度相机图像的精度的技术,包括计算设备,用于生成针对深度相机所生成的图像的前景掩模和背景掩模。所述计算设备基于所述前景掩模和所述背景掩模,将所生成的图像的深度通道的深度图像中的具有未知深度值的区域识别为内部深度孔或外部深度孔中的一个。所述计算设备基于所述内部深度孔的对应部分的阈值距离内的深度图像的区域的深度值,填充所述深度图像的内部深度孔的至少一部分。类似地,所述计算设备基于所述外部深度孔的对应部分的阈值距离内的深度图像的区域的深度值,填充所述深度图像的外部深度孔的至少一部分。

权利要求 :

1.一种用于改善深度相机图像的精度的计算设备,所述计算设备包括:处理器,以及

存储器,在其内存储有:

掩模生成模块,用于(i)生成针对深度相机所生成的图像的前景掩模,其中,所生成的图像包括深度通道,并且所述前景掩模包括所生成的图像的至少一个前景对象,(ii)生成针对所生成的图像的背景掩模,其中,所述背景掩模包括所生成的图像的除了所述至少一个前景对象之外的部分,以及(iii)生成包括第一多个像素的二进制掩模,所述第一多个像素中的每个像素具有对应的已知深度值,(iv)扩张所生成的二进制掩模,(v)使所扩张的二进制掩模与第二多个像素相交以生成减少的多个像素,所述第二多个像素与所述减少的多个像素中的每个像素具有未知深度值,(vi)将所述前景掩模应用到所述减少的多个像素,以识别内部深度孔,以及(vii)将所述背景掩模应用到所述减少的多个像素,以识别外部深度孔;以及图像填充模块,用于(i)填充所述深度相机图像的内部深度孔的至少一部分,该填充是基于所述深度相机图像的在所述内部深度孔的对应部分的阈值距离之内的区域的深度值,以及(ii)填充所述深度相机图像的外部深度孔的至少一部分,该填充是基于所述深度相机图像的在所述外部深度孔的对应部分的所述阈值距离之内的区域的深度值。

2.根据权利要求1所述的计算设备,其中,生成所述前景掩模包括:识别所述至少一个前景对象的边缘;以及

基于所识别出的边缘,生成所述至少一个对象的第二二进制掩模。

3.根据权利要求2所述的计算设备,其中,识别所述至少一个前景对象的边缘包括:向所生成的图像应用边缘检测滤波器。

4.根据权利要求3所述的计算设备,其中,应用所述边缘检测滤波器包括:向所生成的图像应用可分离的Sobel滤波器。

5.根据权利要求3所述的计算设备,其中,生成所述第二二进制掩模包括:连接所述至少一个前景对象的所识别出的边缘,以识别所述至少一个前景对象的边界;以及泛洪填充有界的所述至少一个前景对象。

6.根据权利要求5所述的计算设备,其中,识别所述至少一个前景对象的边界包括:将所述边缘检测滤波器与所生成的图像进行卷积;以及

滤出相对应的图像响应的低值像素。

7.根据权利要求1所述的计算设备,其中,填充所述内部深度孔的至少一部分和填充所述外部深度孔的至少一部分包括:将加权函数应用到所述内部深度孔中的每个和所述外部深度孔中的每个的邻域,所述加权函数具有定义所述阈值和所述邻域的卷积核大小。

8.一种用于改善深度相机图像的精度的计算设备,所述计算设备包括:用于生成针对深度相机所生成的图像的前景掩模的单元,所生成的图像包括深度通道,并且所述前景掩模包括所生成的图像的至少一个前景对象;

用于生成针对所生成的图像的背景掩模的单元,所述背景掩模包括所生成的图像的除了所述至少一个前景对象之外的部分;

用于生成包括第一多个像素的二进制掩模的单元,所述第一多个像素中的每个像素具有对应的已知深度值;

用于扩张所生成的二进制掩模的单元;

用于使所扩张的二进制掩模与第二多个像素相交以生成减少的多个像素的单元,所述第二多个像素与所述减少的多个像素中的每个像素具有未知深度值;

用于将所述前景掩模应用到所述减少的多个像素以识别内部深度孔的单元;

用于将所述背景掩模应用到所述减少的多个像素以识别外部深度孔的单元;

用于填充所述深度相机图像的内部深度孔的至少一部分的单元,该填充是基于所述深度相机图像的在所述内部深度孔的对应部分的阈值距离之内的区域的深度值;以及用于填充所述深度相机图像的外部深度孔的至少一部分的单元,该填充是基于所述深度相机图像的在所述外部深度孔的对应部分的所述阈值距离之内的区域的深度值。

9.根据权利要求8所述的计算设备,其中,用于生成所述前景掩模的单元包括:用于识别所述至少一个前景对象的边缘的单元;以及

用于基于所识别出的边缘生成所述至少一个对象的第二二进制掩模的单元。

10.根据权利要求9所述的计算设备,其中,用于识别所述至少一个前景对象的边缘的单元包括:用于向所生成的图像应用边缘检测滤波器的单元。

11.根据权利要求10所述的计算设备,其中,用于生成所述第二二进制掩模的单元包括:用于连接所述至少一个前景对象的所识别出的边缘以识别所述至少一个前景对象的边界的单元;以及用于泛洪填充有界的所述至少一个前景对象的单元。

12.根据权利要求8所述的计算设备,其中,用于扩张所生成的二进制掩模的单元包括:用于执行膨胀操作的单元。

13.根据权利要求8所述的计算设备,其中,用于填充所述内部深度孔的至少一部分和填充所述外部深度孔的至少一部分的单元包括:用于将加权函数应用到所述内部深度孔中的每个和所述外部深度孔中的每个的邻域的单元,所述加权函数具有定义所述阈值和所述邻域的卷积核大小。

14.根据权利要求13所述的计算设备,其中,用于填充所述内部深度孔的至少一部分的单元包括:用于将所述加权函数应用到所述内部深度孔中的每个的邻域,以使得所述加权函数忽略(i)所述邻域中的未知深度值以及(ii)外部深度孔的单元;以及其中,用于填充所述外部深度孔的至少一部分的单元包括:用于将所述加权函数应用到所述外部深度孔中的每个的邻域,以使得所述加权函数忽略(i)所述邻域中的未知深度值以及(ii)内部深度孔的单元。

15.根据权利要求14所述的计算设备,其中,用于填充所述内部深度孔的至少一部分以及填充所述外部深度孔的至少一部分的单元包括:用于留下具有比阈值数小的加权函数值的深度孔未填充的单元。

16.一种用于在计算设备上改善深度相机图像的精度的方法,所述方法包括:在所述计算设备上生成针对深度相机所生成的图像的前景掩模,所生成的图像包括深度通道,并且所述前景掩模包括所生成的图像的至少一个前景对象;

在所述计算设备上生成针对所生成的图像的背景掩模,所述背景掩模包括所生成的图像的除了所述至少一个前景对象之外的部分;

在所述计算设备上生成包括第一多个像素的二进制掩模,所述第一多个像素中的每个像素具有对应的已知深度值;

在所述计算设备上扩张所生成的二进制掩模;

在所述计算设备上使所扩张的二进制掩模与第二多个像素相交以生成减少的多个像素,所述第二多个像素与所述减少的多个像素中的每个像素具有未知深度值;

在所述计算设备上将所述前景掩模应用到所述减少的多个像素以识别内部深度孔;

在所述计算设备上将所述背景掩模应用到所述减少的多个像素以识别外部深度孔;

在所述计算设备上填充所述深度相机图像的内部深度孔的至少一部分,该填充是基于所述深度相机图像的在所述内部深度孔的对应部分的阈值距离之内的区域的深度值;以及在所述计算设备上填充所述深度相机图像的外部深度孔的至少一部分,该填充是基于所述深度相机图像的在所述外部深度孔的对应部分的所述阈值距离之内的区域的深度值。

17.根据权利要求16所述的方法,其中,填充所述内部深度孔的至少一部分和填充所述外部深度孔的至少一部分包括:将加权函数应用到所述内部深度孔中的每个和所述外部深度孔中的每个的邻域,所述加权函数具有定义所述阈值和所述邻域的卷积核大小。

说明书 :

用于增加深度相机图像的精度的技术

背景技术

[0001] 深度相机用在多种应用中以用于利用例如多个透镜或红外传感器来捕获三维信息。深度相机的特定应用范围从基于手势的接口(例如,在视频游戏系统上)到机器人导航。深度相机所输出的深度通道或流指示在场景中捕获到的对象相对于相机的距离。然而,存在多种情况,其中深度相机不能确定场景内某些点的精确的深度测量。这可能由于多种因素,包括例如遮挡(occlusion)、场景中对象的红外频率吸收、信号噪声和/或到深度相机的距离。这些常见场景导致深度图像(即,深度通道或深度流)具有孔(hole)以及糟糕定义的对象边界。繁忙的环境进一步扩大了深度图像中的深度孔的潜在数量和尺寸。
[0002] 虽然在一些应用中,通常不关注深度孔(例如,在视频游戏中),但在其它应用中,精确的深度图像对于功能性是关键的(例如,机器人导航)。因此,已开发了多种算法来试图补救深度相机的这种缺陷。例如,已利用各种信号和图像处理滤波器来平滑噪声和填充深度孔。由于在视频流中处理大量图像,所以在校正的深度相机图像的精度和效率之间必须进行平衡。

附图说明

[0003] 在附图中通过示例的方式而不是通过限制的方式示出了本文所描述的概念。为了示出的简化和清晰,在图中所示的元件不必按比例绘制。在认为适当的地方,在附图之间重复附图标记以指示对应的或类似的元件。
[0004] 图1是用于改善深度相机图像的精度的计算设备的至少一个实施例的简化框图;
[0005] 图2是图1的计算设备的环境的至少一个实施例的简化框图;
[0006] 图3是用于改善图1的计算设备上的深度相机图像的精度的方法的至少一个实施例的简化流程图;
[0007] 图4是用于在图1的计算设备上生成前景掩模的方法的至少一个实施例的简化流程图;
[0008] 图5是用于在图1的计算设备上将外部深度孔和内部深度孔分离的方法的至少一个实施例的简化流程图;
[0009] 图6是用于在图1的计算设备上基于邻域深度值填充深度孔的方法的至少一个实施例的简化流程图;以及
[0010] 图7是基于用于改善图3的深度相机图像的精度的方法通过图1的计算设备来生成的一组图像。

具体实施方式

[0011] 尽管本公开的概念是易受各种修改和可替代形式影响的,但在附图中已经通过示例的方式示出了其具体实施例并将在本文对其具体实施例进行详细地描述。然而,应该理解的是,并不存在将本公开的概念限制为所公开的特定形式的意图,而是相反地,本发明要覆盖与本公开和所附权利要求一致的所有修改、等价物以及替代物。
[0012] 在说明书中提及的“一个实施例”、“实施例”、“示例性实施例”等表示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可以或可以不必须包括所述特定特征、结构或特性。此外,这样的短语不必指的是相同的实施例。此外,当结合实施例描述特定特征、结构或特性时,认为结合其它无论是否明确描述的实施例来影响这种特征、结构或特性是在本领域技术人员的认知范围内的。
[0013] 在一些情况下,所公开的实施例可以被实施在硬件、固件、软件或其任意组合中。所公开的实施例还可以被实施为由暂时性或非暂时性机器可读(例如,计算机可读)存储介质承载的或存储于其上的指令,其可以由一个或多个处理器读取并执行。机器可读存储介质可以被实施为任意存储设备、机制、或用于存储或传输以机器可读的形式的信息的其它物理结构(例如,易失性或非易失性存储器、媒体盘或其它媒体设备)。
[0014] 在附图中,一些结构或方法特征可以以具体布置和/或顺序示出。但是,应当意识到,可以不要求这样的具体的布置和/或顺序。而是,在一些实施例中,可以与示例性附图中所示的不同的方式和/或顺序来布置这样的特征。另外,在特定附图中包含结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,而是在一些实施例中,可以不包含这种特征或者可以与其它特征组合。
[0015] 现在参考图1,在示例性实施例中,用于改善深度相机图像的精度的计算设备100被配置为填充、校正、减小或另外修改深度图像中的未知的深度值(即,深度孔)。如下文详细讨论的,通过填充深度孔,可以实质上改善深度图像的精度。计算设备100可以被实施为能够改善深度相机图像的精度并执行本文描述的功能的任意类型的计算设备100。例如,计算设备100可以被实施为蜂窝电话、智能电话、平板计算机、膝上型计算机、个人数字助理、移动互联网设备、台式计算机、服务器、游戏系统和/或任意其它计算/通信设备。如图1所示,示例性计算设备100包括处理器110、输入/输出(“I/O”)子系统112、存储器114、通信电路116、数据存储设备118以及一个或多个外围设备120。当然,在其它实施例中,计算设备100可以包括其它或额外的部件,例如那些通常在典型计算设备中出现的部件(例如,各种输入/输出设备)。另外,在一些实施例中,示例性部件中的一个或多个可以并入另一部件或者以其他方式来自另一部件的一部分。例如,在一些实施例中存储器114或其部分可以并入到处理器110中。
[0016] 处理器110可以被实施为能够执行本文所描述的功能的任意类型的处理器。例如,处理器可以被实施为单核或多核处理器、数字信号处理器、微控制器或者其他处理器或处理/控制电路。类似地,存储器114可以被实施为能够执行本文所描述的功能的任意类型的易失性或非易失性存储器或数据存储设备。在操作中,存储器114可以存储在计算设备100的操作期间使用的各种数据和软件,例如操作系统、应用、程序、库以及驱动器。存储器114经由I/O子系统112通信地耦合到处理器110上,所述I/O子系统112可以被实施为便于处理器110、存储器114和计算设备100的其它部件的输入/输出操作的电路和/或部件。例如,I/O子系统112可以被实施为或者以其他方式包括存储器控制器中心、输入/输出控制中心、固件设备、通信链路(即,对等链路、总线链路、电线、电缆、光导、印刷电路板迹线等)和/或便于输入/输出操作的其它部件和子系统。在一些实施例中,I/O子系统112可以形成片上系统(SoC)的一部分,并和处理器110、存储器114以及计算设备100的其它部件一起并入到单个印刷电路芯片上。
[0017] 计算设备100的通信电路116可以被实施为能够使能通过网络在计算设备100和其它远程设备(例如,在云计算环境中)之间通信的任意通信电路、设备或其集合。通信电路116可以配置为使用任意一个或多个通信技术(例如,无线或有线通信)和相关联的协议(例如,以太网、 等)来产生这样的通信。此外,网络可以被
实施为能够便于计算设备100和远程设备之间通信的任意类型的电信网络。如此,网络可以包括一个或多个网络、路由器、交换机、计算机和/或其它居间设备。例如,网络可以被实施为或者以其他方式包括一个或多个蜂窝网络、电话网络、局域网或广域网、公用全球网络(例如,互联网)、自组织网络或其任意组合。例如,在一个实施例中,图像深度数据可以由客户端计算设备卸载到计算设备100,以用于分析和减少深度孔。在这样的实施例中,计算设备100可以将校正的或以其他方式修改的图像深度数据传输回客户端计算设备事后分析(post-analysis)。
[0018] 数据存储设备118可以被实施为被配置为短期或长期存储数据的任意类型的设备或多个设备,例如,存储器设备和电路、存储器卡、硬盘驱动器、固态驱动器或其它数据存储设备。计算设备100的一个或多个外围设备120可以包括任意数量的额外的外围或接口设备。包含在外围设备120中的特定设备可以取决于例如计算设备100的类型和/或期望的用途。如图1所示,示例性外围设备120包括用于捕获图像和/或视频的深度相机122,其可以由计算设备100使用以用于捕获深度图像。在示例性实施例中,深度相机122还被配置为捕获颜色图像。例如,深度相机122可以具有RGBD(红色-绿色-蓝色-深度)传感器或类似的相机传感器,其可以捕获具有四个通道—深度通道和三个颜色通道(即,非深度通道)—的图像。换言之,深度相机122可以具有RGB颜色流和深度流。当然,可以以另一方式(例如,灰度)来表示图像的颜色值。在一些实施例中,RGB图像颜色值可以被表示为HSL(色相-饱和度-明度)或HSV(色调-饱和度-亮度)值作为代替。此外,计算设备100可以具有深度相机122,其具有被配置为捕捉颜色图像的传感器以及被配置为捕捉深度的另一传感器。为简单起见,本文提及“RGB图像”和/或“颜色图像”指的是基于特定图像的颜色/灰度通道(例如,来自RBG流)的图像,而提及“深度图像”指的是相同图像的仅基于深度通道/流的对应的图像。例如,深度相机122可以捕捉灰度RGBD图像,其包括对应的RGB图像702和深度图像706,如图7所示。
[0019] 应当意识到的是,深度相机122可以通过依赖于所使用的特定深度相机122的多种方式来确定场景中对象的深度测量。例如,深度相机122可以包括红外(IR)投影仪和IR传感器,以使得IR传感器通过分析IR投影仪投射在场景上的IR光模式(light pattern)来估计场景中对象的深度值。在另一实施例中,深度相机122包括至少两个透镜和对应的传感器,其被配置为从场景的至少两个不同的视点捕捉图像(例如,立体相机)。基于那些视点,计算设备100可以计算在所捕捉场景中的对象的距离。深度相机122可能由于多种因素(例如,遮挡、IR吸收、噪声和距离)而不能准确地捕捉场景中特定对象的深度。如此,在所捕捉的深度图像/通道中可能存在深度孔(即,未知的深度值),其可能像这样被用对应的深度像素值(例如,零或空)来指示。当然,在深度图像中,表示未知的深度像素值的特定值或符号可以基于特定实现方式而变化。如上文所讨论的,在一些实施例中,计算设备100可以分析从“本地”深度相机122接收的深度图像,除此之外或另外地,计算设备100可以分析从远程深度相机124接收的深度图像。
[0020] 现在参考图2,在使用中,计算设备100建立用于改善深度相机图像的精度的环境200。在示例性实施例中,环境200包括图像处理模块202和相机图像204。另外,图像处理模块202包括对象检测模块206、掩模(mask)生成模块208以及图像填充模块210。此外,掩模生成模块208包括形态学(morphology)模块212。图像处理模块202、对象检测模块206、掩模生成模块208、图像填充模块210以及形态学模块212中的每个均可以被实施为硬件、软件、固件或其组合。
[0021] 如下文更详细讨论的,图像处理模块202从深度相机122接收相机图像204(例如,作为流视频)。图像处理模块202可以分析相机图像204中的每个(例如,流视频或其子集的每一帧),并减少图像204中深度孔的数量。在这样做时,图像处理模块202识别图像204的各种特性。例如,图像处理模块202可以确定在图像204中是否存在任何深度孔。如果在特定图像204中不存在深度孔,则图像处理模块202可以移动到待分析的下一图像204(例如,视频流的下一帧)。然而,如果在图像204中存在深度孔,则图像处理模块202通过发现在RGB流中的前景对象、分离深度流中的前景和背景孔、以及填充深度流中的孔来消除或减少那些深度孔的数量,如下文将更详细讨论的那样。
[0022] 对象检测模块206识别图像204的场景中(例如,前景中)的对象,并利用任何适当的对象检测算法来这样做。如下文所讨论的,对象检测模块206可以利用边缘检测滤波器和/或在RGB流中识别对象的边界的算法。例如,对象检测模块206可以利用图像梯度算子(例如,可分离的(separable)Sobel滤波器)、Canny边缘检测器和/或其它边缘检测算法。在另一实施例中,对象检测模块206可以另外地或可替代地利用一个或多个适当的图像分割算法来识别场景中的对象(例如,金字塔分割)。
[0023] 掩模生成模块208生成各种图像掩模(例如,二进制掩模),用于减少图像204的深度通道中的深度孔的数量。如下文详细讨论的,掩模生成模块208可以生成例如前景掩模、背景掩模、与将内部深度孔与外部深度孔分离相关联的掩模,和/或其它图像掩模。在这样做时,掩模生成模块208可以使用任意适当的技术、算法或其它机制,来选择图像204中的出于特定目的而要在其中进行遮掩的部分。例如,掩模生成模块208可以对以对象检测模块206所识别出的边缘为边界的对象进行泛洪填充(flood-fill),并且创建该对象的二进制掩模。换言之,掩模生成模块208生成忽略图像204中的非对象像素的掩模,以使得一个或多个后续过程可以仅指向与对象相关联的像素。在一个实施例中,在二进制掩模中的被遮掩的像素为高值(例如,具有值1)而未被遮掩的像素为低值(例如,具有值0)。
[0024] 生成某些图像掩模可能涉及使用一个或多个形态学算子(morphological operator)。因此,形态学模块212可以执行各种形态学操作(例如,膨胀、腐蚀、打开、关闭、形态学梯度、白顶帽变换(white top-hat transformation)、黑顶帽变换(black top-hat transformation)以及其它形态学操作)。在示例性实施例中,掩模生成模块208创建包括所有有效深度像素的二进制掩模。在这样的实施例中,形态学模块212可以在二进制掩模上执行膨胀操作以将掩模(例如,向外)扩张到未被遮掩的区域,并因此是零值区域。如下文所讨论的,扩张的掩模可用于减少图像处理模块202所考虑的深度孔的集合,这显著地减少了计算设备100的计算开销。
[0025] 图像填充模块210基于邻近深度值(即,在相同“邻域”中或在阈值距离内的像素的已知深度值)来填充识别出的深度孔/像素。在这样做时,图像填充模块210选择加权函数、滤波器和/或各种参数。例如,在一个实施例中,图像填充模块210可以使用具有5x5的卷积核大小的零均值(zero-mean)Gaussian滤波器。换言之,Gaussian滤波器具有以感兴趣的深度像素为中心的5x5的像素邻域。如下文所讨论的,在一些实施例中,图像填充模块210可以忽略在深度像素的邻域中的一个或多个像素值(例如,其它未知深度值)。
[0026] 现在参考图3,在使用中,计算设备100可以执行方法300以用于改善深度相机图像的精度。示例性方法300开始于框302,其中,计算设备100确定是否已通过深度相机122捕捉到帧。如上文所讨论的,深度相机122除了标准RGB(例如,颜色或灰度)视频流外还可以提供深度流。计算设备100可以分析视频流中的每个被捕捉到的帧或被捕捉到的帧的一部分(例如,每隔三帧)。在另一实施例中,计算设备100分析独立的图像而不是来自视频的图像的集合。
[0027] 如果已经捕捉到帧,则在框304中,计算设备100确定是否已识别出任何深度孔。换言之,计算设备100确定在图像中是否有任何深度值是未知的。如上文所讨论的,深度相机122可能由于各种原因不能够确定场景中特定点(即,图像的特定像素)的精确深度测量。例如,对于深度相机122而言,图像中的一个对象可能被遮挡了。在使用IR传感器来确定深度的实施例中,IR频率吸收可能引起问题。具体地,场景中的对象可能吸收IR投影仪所使用的某些IR频率,这导致没有关于深度的可用于IR传感器的可用信息。在又一实施例中,例如,在近似地垂直于深度相机122的表面上可能发生显著量的噪声。此外,在超过IR传感器的最大可检测距离的距离处的对象可能导致未知的深度值。
[0028] 如果没有识别出深度孔,则方法300返回到框302,其中,计算设备100确定深度相机122是否已捕捉到另一帧(例如,在视频流中的下一帧)。然而,如果识别出深度孔,则在框306中计算设备100生成前景掩模。为此,计算设备100可以执行如图4所示的方法400。也就是,计算设备生成包括在图像的前景中的所有对象的掩模(例如,参见图7的图像704)。
[0029] 示例性方法400开始于框402,其中,计算设备100在图像/帧中识别对象边缘。在这样做时,在框404中,计算设备100可以对图像应用边缘检测滤波器或算法。具体地,计算设备100识别RGB流的帧中对象的边缘;深度流中对应的帧被忽略。应该意识到,计算设备100可以利用边缘检测滤波器和/或边缘检测算法的任意适当组合,来识别对象的边缘。例如,计算设备100可以用可分离的Sobel滤波器对RGB图像进行卷积。在另一实施例中,计算设备100可以利用例如Canny边缘检测算法或其它边缘检测算法来识别边缘。
[0030] 在框406中,计算设备100创建针对每个检测到的对象的二进制掩模。为此,在框408中,计算设备100可以连接所识别出的对象边缘。例如,在使用可分离的Sobel滤波器或另一其它边缘检测滤波器的实施例中,具有对卷积的低值响应的像素可以被阈值限制或以其他方式过滤出。换言之,弱边缘被滤出,留下强边缘,强边缘很可能对应于对象的边界。计算设备100可以使用连接部件算法,来连接图像中每个对象的剩余边缘。在框410中,计算设备100泛洪填充(例如,向内)以所识别出的对象边缘为边界的对象。通过泛洪填充有界的边缘,针对场景中的每个对象的二进制掩模被创建。当然,计算设备100可以利用其它方式来估计场景中对象的边界(例如,更复杂的边缘检测)和/或识别并遮掩对象(例如,图像分割算法)。
[0031] 在框412中,计算设备100确定图像中是否存在多个泛洪填充的对象(即,独立对象)。如果是,则在框414中,计算设备100生成复合的二进制掩模(即,前景掩模),其包括那些泛洪填充的对象中的每个(例如,通过添加或以其他方式组合对应的各个对象掩模中的每个)。然而,如果在图像中只存在一个泛洪填充的对象,则前景掩模是对应于该对象的二进制掩模。
[0032] 返回参考图3,基于前景掩模,在框308中计算设备100生成背景掩模。在示例性实施例中,背景掩模包括未包含在前景掩模中的所有像素。因此,在一些实施例中,背景掩模和前景掩模不具有共同的像素。在框310中,计算设备100将在深度图像中的内部深度孔与外部深度孔分离。为此,计算设备100可以执行如图5所示的方法500,其中,计算设备100基于深度孔的减少集合来识别内部深度孔和外部深度孔。应该意识到,深度孔通常不包括单个未知的深度像素。而是,深度孔常常是由具有未知的深度值的连续区域或深度图像的一部分来定义的。背景中的区域通常创建在邻域不具有可靠深度值的大深度孔,而前景中的深度孔倾向于较小并且具有邻近的可靠深度值。当前景对象和背景之间的深度差大时,前景对象边界周围的深度孔与背景的深度孔重叠,这使得难以分离两种类型的深度孔。因此,方法500将大的外部孔与相对较小的内部孔分离。
[0033] 示例性方法500开始于框502,其中,计算设备100在深度图像中生成所有有效深度像素的二进制掩模。如上所述,如果特定像素的深度值是未知的,则深度相机122可以将特定值赋值给所述像素。例如,深度相机122可以针对未知深度赋值为零值而针对已知的深度赋值为非零值。如此,计算设备100可以区别那些具有有效深度值的像素和那些具有无效/未知深度值(例如,深度孔)的像素。例如,图7的图像708示例性地示出了对应的深度图像706中的由未知深度值构成的区域718(即,深度孔)以及由有效深度值构成的区域720。
[0034] 在框504中,计算设备100扩张所生成的有效像素掩模。在这样做时,在框504中,计算设备100可以例如在有效像素掩模上执行形态学膨胀操作。应当意识到,在示例性实施例中,有效像素掩模是二进制掩模。也就是,掩模中的有效深度像素被赋值为一,而无效或未知深度像素被赋值为零。因此,膨胀操作向外扩张了有效像素掩模,这是因为有效深度像素具有比未知深度像素(即,零)大的值(即,一)。在一些实施例中,对掩模的膨胀可以统一地应用于图像中(例如,如果所有的前景对象具有大致相同的大小),而在其它实施例中,可以在掩模的不同段或部分上执行不同级别的膨胀。例如,膨胀的量可以取决于图像中对象的大小,并且可以是预先确定的或由计算设备100动态地确定的。例如,在一个实施例中,使用对象的像素区域的大约十分之一的膨胀。
[0035] 在框508中,计算设备100通过使得扩张的有效像素掩模与所有深度孔的集合相交,而生成深度孔的减少集合。也就是,保留扩张的有效像素掩模和未知深度像素集合共同的深度像素,而过滤出其它像素。在相交操作之后,保留围绕对象的具有对应于扩张(例如,来自膨胀)量的厚度的未知深度像素的区域以及对象内部的全部未知深度像素的区域。然而,在围绕对象的未知深度像素的区域外部的、背景中的未知深度像素被过滤出并被忽略。如下所讨论的,在一些实施例中,计算设备100分析深度孔的减少集合来确定它们是否可以被填充,而不是分析深度图像中所有的深度孔。
[0036] 一旦识别出计算设备100将试图填充的深度孔的减少集合,则将对象内部的未知深度像素与对象外部的那些未知深度像素分离。在框510中,计算设备100通过向深度孔的减少集合应用前景掩模(参见图3的框306)来识别内部深度孔。在框512,计算设备100通过向深度孔的减少集合应用背景掩模(参见图3的框308)而识别外部深度孔。在框510、512的每个中,计算设备100可以例如使得对应的二进制掩模(即,前景或背景)与深度孔的减少集合相交。
[0037] 现在参考图7,为了分离内部深度孔和外部深度孔,计算设备100可以分析深度图像,以识别有效深度像素的区域722和未知深度像素的区域724(即,深度孔),并识别在如图像710所示的RGB图像中前景和背景之间的边界726。在基于区域722生成有效像素掩模之后,计算设备100扩张(例如,经由膨胀)该掩模,并使得扩张的掩模与区域724所定义的深度孔集合相交,以生成如上所讨论的深度孔的减少集合。换言之,忽略深度孔的部分728。设置有深度孔的减少集合,计算设备100识别内部深度孔730和外部深度孔732,如图像712、714、716中示例性示出的那样。
[0038] 返回参考图3,在框312中,计算设备100基于邻近的深度值来填充内部深度孔和外部深度孔。在一些实施例中,计算设备100可以使用适当的“图像修补(inpainting)”方法来填充内部未知深度值区域(即,内部深度孔所定义的区域)和外部未知深度值区域(即,外部深度孔所定义的区域)中的每个。例如,对于每个未知区域,计算设备100可以迭代地“跟踪”区域的外边界,并试图基于其邻近像素值来填充该边界上的每个深度像素,以填充尽可能多的未知深度像素。如下所讨论的,通过确保仅利用来自相同对象的其它像素而不利用来自超过对象边界的像素来填充对象边界附近的深度像素,在填充过程期间独立地填充内部区域和外部区域保留了强边缘。还通过对填充过程能够将所填充的背景或对象边界扩展到多远创建限制来防止填充过分扩展,这产生了更精确地反映对象的真实深度值的深度值。还应当意识到,通过在填充前建立内部区域和外部区域,RGB图像的结构被隐含地确定,从而使得不必在填充深度孔的同时执行与RGB图像的另外的像素比较。
[0039] 在示例性实施例中,计算设备100可以执行如图6所示的方法600,其中,计算设备100利用所选的加权函数和各种参数(例如,核大小/形状、阈值、权重系数等)来分别填充内部深度孔和外部深度孔。示例性方法600开始于框602,其中,计算设备100选择加权函数和参数,以用于填充深度孔。例如,计算设备100可以利用5x5的矩形滤波器核/邻域通过对像素的有效邻居的加权平均来填充像素。
[0040] 在框604中,计算设备100选择下一个待填充的内部深度孔或外部深度孔(即,未知深度像素)。当然,在框604的第一次迭代期间,计算设备100可以选择任意内部深度孔或外部深度孔。在后续迭代时,计算设备100选择计算设备尚未对其进行处理(即,填充或确定其不能被填充)的深度孔。在框606中,计算设备100确定所选的深度孔是否是内部深度孔。如果是,则在框608中,计算设备100忽略在背景掩模中的像素的邻域深度值(参见图3的框308)。换言之,在计算所选像素的新的深度值时,忽略对应于RGB图像的背景中的对象的像素的深度值。然而,如果计算设备100确定所选深度孔是外部深度孔,则在框610中计算设备
100忽略在前景掩模中的像素的邻域深度值。也就是,在计算所选像素的新的深度值时,忽略对应于RGB图像的前景中的对象的像素的深度值。
[0041] 在框612中,计算设备100确定剩余的有效邻域深度值是否超过阈值。也就是,计算设备100基于未被忽略(即,在框608、610中)并且具有有效深度值(即,不是深度孔本身)的所选深度孔的邻域中的像素的深度值,来确定是否超过阈值或以其他方式超越阈值。例如,加权函数可用于确定那些邻域深度值是否超越所选深度孔的邻域被认为有效的权重阈值(例如,最小权重)。如果超越(即,满足)了阈值,则在框614中计算设备向那些剩余的有效邻域深度值应用加权函数,以生成新的深度值并赋值到所选的深度孔。在框616中,计算设备100确定是否有任何深度孔仍然待分析。如果是,则方法600返回到框604,其中,计算设备
100选择下一深度孔。返回到框612,如果没有超越阈值,则计算设备100前进到框616,其中,计算设备100确定是否有任何深度孔仍然待分析。换言之,对于每个内部深度孔和外部深度孔,计算设备100或者生成新的深度值或者确定不能生成新的深度值并保持未知深度值。
[0042] 在方法600的至少一个实现方式中,计算设备100选择加权函数Wij,具有有限的支持函数f(i,j),从而对于每个像素i∈I以及在i的邻域中的j,
[0043]
[0044] 其中,I被定义为内部深度孔的集合,F被定义为前景掩模,H被定义为所有深度孔的集合。类似地,对于每个像素i∈E以及在i的邻域中的j,
[0045]
[0046] 其中,E被定义为外部深度孔的集合,而B被定义为背景掩模。函数f(i,j)可以是像素i和j上的有限支持函数,例如i和j之间的欧几里得距离(Euclidean distance)。计算设备100将权重计算为,针对i周围邻域(例如,基于5x5的核)中的每个像素j的i和j的像素位置之间的曼哈顿距离(Manhattan distance)上的零均值高斯(zero mean Gaussian)。在该实施例中,以上讨论的阈值(参见图6的块612)被定义为:针对特定阈值k,∑Wij>k。换言之,只在所选深度像素周围存在足够的有效邻居的情况下,通过新的深度值来填充所选的深度孔i,其中k表示认为该邻域对于所选深度像素有效的最小权重阈值。阈值可以预先确定或由计算设备100取决于实施例动态选择。如果满足阈值,则计算设备100为所选深度孔计算新的深度值D(i)为
[0047]
[0048] 然而,如上文所讨论的,如果没有满足阈值,则计算设备100不计算新的深度值和赋值给深度孔。而是,为所述深度像素保持未知深度值。应当意识到,在其它实施例中,可以使用其它适当的加权函数、参数和阈值来生成针对深度孔的新的深度值。
[0049] 例子
[0050] 以下提供本文所公开的技术的示例性例子。技术的实施例可以包括以下描述的例子中的任意一个或多个或其任意组合。
[0051] 例子1包括一种用于改善深度相机图像的精度的计算设备,所述计算设备包括:掩模生成模块,用于(i)生成针对深度相机所生成的图像的前景掩模,其中,所生成的图像包括深度通道,并且所述前景掩模包括所生成的图像的至少一个前景对象,(ii)生成针对所生成的图像的背景掩模,其中,所述背景掩模包括所生成的图像的除了所述至少一个前景对象之外的部分,以及(iii)基于所述前景掩模和所述背景掩模,将所生成的图像的深度通道的深度图像中的具有未知深度值的区域识别为内部深度孔或外部深度孔中的一个;以及图像填充模块,用于(i)基于所述内部深度孔的对应部分的阈值距离内的深度图像的区域的深度值,填充所述深度图像的内部深度孔的至少一部分,以及(ii)基于所述外部深度孔的对应部分的阈值距离内的深度图像的区域的深度值,填充所述深度图像的外部深度孔的至少一部分。
[0052] 例子2包括例子1的主题,并且其中,生成所述前景掩模包括:识别至少一个前景对象的边缘;以及基于所识别出的边缘,生成至少一个对象的二进制掩模。
[0053] 例子3包括例子1和2中的任一项的主题,并且其中,识别至少一个前景对象的边缘包括:向所生成的图像应用边缘检测滤波器。
[0054] 例子4包括例子1-3中的任一项的主题,并且其中,应用边缘检测滤波器包括:向所生成的图像应用可分离的Sobel滤波器。
[0055] 例子5包括例子1-4中的任一项的主题,并且其中,生成二进制掩模包括:连接至少一个前景对象的所识别出的边缘,以识别至少一个前景对象的边界;以及泛洪填充至少一个有界的前景对象。
[0056] 例子6包括例子1-5中的任一项的主题,并且其中,识别至少一个前景对象的边界包括:将边缘检测滤波器与所生成的图像进行卷积;以及滤出相对应的图像响应的低值像素。
[0057] 例子7包括例子1-6中的任一项的主题,并且其中,生成二进制掩模包括:组合至少一个前景对象的每个的二进制掩模。
[0058] 例子8包括例子1-7中的任一项的主题,并且其中,将所述深度图像的区域识别为内部深度孔或外部深度孔中的一个,包括:生成包括所有已知深度值的二进制掩模;扩张所生成的二进制掩模;使扩张的二进制掩模与所有未知深度值的集合相交以生成未知深度值的减少集合;将前景掩模应用到未知深度值的减少集合,以识别内部深度孔;以及将背景掩模应用到未知深度值的减少集合,以识别外部深度孔。
[0059] 例子9包括例子1-8中的任一项的主题,并且其中,扩张所生成的二进制掩模包括:执行膨胀操作。
[0060] 例子10包括例子1-9中的任一项的主题,并且其中,填充所述内部深度孔的至少一部分和填充所述外部深度孔的至少一部分包括:将加权函数应用到内部深度孔中的每个和外部深度孔中的每个的邻域,所述加权函数具有定义阈值和邻域的卷积核大小。
[0061] 例子11包括例子1-10中的任一项的主题,并且其中,填充所述内部深度孔的至少一部分包括:将加权函数应用到内部深度孔中的每个的邻域,以使得加权函数忽略(i)所述邻域中的未知深度值,以及(ii)外部深度孔;并且其中,填充所述外部深度孔的至少一部分包括:将加权函数应用到外部深度孔中的每个的邻域,以使得加权函数忽略(i)所述邻域中的未知深度值,以及(ii)内部深度孔。
[0062] 例子12包括例子1-11中的任一项的主题,并且其中,填充所述内部深度孔的至少一部分以及填充所述外部深度孔的至少一部分包括:留下具有比阈值数小的加权函数值的深度孔未填充。
[0063] 例子13包括一种用于改善计算设备上的深度相机图像的精度的方法,所述方法包括:在计算设备上生成针对深度相机所生成的图像的前景掩模,所生成的图像包括深度通道,并且所述前景掩模包括所生成的图像的至少一个前景对象;在计算设备上生成针对所生成的图像的背景掩模,所述背景掩模包括所生成的图像的除了所述至少一个前景对象之外的部分;在计算设备上,基于所述前景掩模和所述背景掩模,将所生成的图像的深度通道的深度图像中的具有未知深度值的区域识别为内部深度孔或外部深度孔中的一个;在计算设备上,基于所述内部深度孔的对应部分的阈值距离内的深度图像的区域的深度值,填充所述深度图像的内部深度孔的至少一部分;以及在计算设备上,基于所述外部深度孔的对应部分的阈值距离内的深度图像的区域的深度值,填充所述深度图像的外部深度孔的至少一部分。
[0064] 例子14包括例子13的主题,并且其中,生成所述前景掩模包括:识别至少一个前景对象的边缘;以及基于所识别出的边缘,生成至少一个对象的二进制掩模。
[0065] 例子15包括例子13和14中的任一项的主题,并且其中,识别至少一个前景对象的边缘包括:向所生成的图像应用边缘检测滤波器。
[0066] 例子16包括例子13-15中的任一项的主题,并且其中,应用边缘检测滤波器包括:向所生成的图像应用可分离的Sobel滤波器。
[0067] 例子17包括例子13-16中的任一项的主题,并且其中,生成二进制掩模包括:连接至少一个前景对象的所识别出的边缘,以识别至少一个前景对象的边界;以及泛洪填充至少一个有界的前景对象。
[0068] 例子18包括例子13-17中的任一项的主题,并且其中,识别至少一个前景对象的边界包括:将边缘检测滤波器与所生成的图像进行卷积;以及滤出相对应的图像响应的低值像素。
[0069] 例子19包括例子13-18中的任一项的主题,并且其中,生成二进制掩模包括组合所述至少一个前景对象的每个的二进制掩模。
[0070] 例子20包括例子13-19中的任一项的主题,并且其中,将所述深度图像的区域识别为内部深度孔或外部深度孔中的一个,包括:生成包括所有已知深度值的二进制掩模;扩张所生成的二进制掩模;使扩张的二进制掩模与所有未知深度值的集合相交以生成未知深度值的减少集合;将前景掩模应用到未知深度值的减少集合,以识别内部深度孔;以及将背景掩模应用到未知深度值的减少集合,以识别外部深度孔。
[0071] 例子21包括例子13-20中的任一项的主题,并且其中,扩张所生成的二进制掩模包括:执行膨胀操作。
[0072] 例子22包括例子13-21中的任一项的主题,并且其中,填充所述内部深度孔的至少一部分和填充所述外部深度孔的至少一部分包括:将加权函数应用到内部深度孔中的每个和外部深度孔中的每个的邻域,所述加权函数具有定义阈值和邻域的卷积核大小。
[0073] 例子23包括例子13-22中的任一项的主题,并且其中,填充所述内部深度孔的至少一部分包括:将加权函数应用到内部深度孔中的每个的邻域,以使得加权函数忽略(i)所述邻域中的未知深度值,以及(ii)外部深度孔;并且其中,填充所述外部深度孔的至少一部分包括:将加权函数应用到外部深度孔中的每个的邻域,以使得加权函数忽略(i)所述邻域中的未知深度值,以及(ii)内部深度孔。
[0074] 例子24包括例子13-23中的任一项的主题,并且其中,填充所述内部深度孔的至少一部分以及填充所述外部深度孔的至少一部分包括:留下具有比阈值数小的加权函数值的深度孔未填充。
[0075] 例子25包括计算设备,其包括处理器;以及其中存储有多个指令的存储器,所述多个指令在被处理器执行时使得计算设备执行如例子13-24中的任一项所述的方法。
[0076] 例子26包括一种或多种其上存储有多个指令的机器可读存储介质,所述指令响应于被执行而使得计算设备执行如例子13-24中的任一项所述的方法。
[0077] 例子27包括一种用于改善深度相机图像的精度的计算设备,所述计算设备包括:用于生成针对深度相机所生成的图像的前景掩模的单元,所生成的图像包括深度通道,并且所述前景掩模包括所生成的图像的至少一个前景对象;用于生成针对所生成的图像的背景掩模的单元,所述背景掩模包括所生成的图像的除了所述至少一个前景对象之外的部分;用于基于所述前景掩模和所述背景掩模将所生成的图像的深度通道的深度图像中的具有未知深度值的区域识别为内部深度孔或外部深度孔中的一个的单元;用于基于所述内部深度孔的对应部分的阈值距离内的深度图像的区域的深度值填充所述深度图像的内部深度孔的至少一部分的单元;以及用于基于所述外部深度孔的对应部分的阈值距离内的深度图像的区域的深度值填充所述深度图像的外部深度孔的至少一部分的单元。
[0078] 例子28包括例子27的主题,并且其中,用于生成前景掩模的单元包括:用于识别至少一个前景对象的边缘的单元;以及用于基于所识别出的边缘生成至少一个对象的二进制掩模的单元。
[0079] 例子29包括例子27和28中的任一项的主题,并且其中,用于识别至少一个前景对象的边缘的单元包括:用于向所生成的图像应用边缘检测滤波器的单元。
[0080] 例子30包括例子27-29中的任一项的主题,并且其中,用于应用边缘检测滤波器的单元包括:用于向所生成的图像应用可分离的Sobel滤波器的单元。
[0081] 例子31包括例子27-30中的任一项的主题,并且其中,用于生成二进制掩模的单元包括:用于连接至少一个前景对象的所识别出的边缘以识别至少一个前景对象的边界的单元;以及用于泛洪填充至少一个有界的前景对象的单元。
[0082] 例子32包括例子27-31中的任一项的主题,并且其中,用于识别至少一个前景对象的边界的单元包括:用于将边缘检测滤波器与所生成的图像进行卷积的单元;以及用于滤出相对应的图像响应的低值像素的单元。
[0083] 例子33包括例子27-32中的任一项的主题,并且其中,用于生成二进制掩模的单元包括:用于组合至少一个前景对象的每个的二进制掩模的单元。
[0084] 例子34包括例子27-33中的任一项的主题,并且其中,用于将所述深度图像的区域识别为内部深度孔或外部深度孔中的一个的单元包括:用于生成包括所有已知深度值的二进制掩模的单元;用于扩张所生成的二进制掩模的单元;用于使扩张的二进制掩模与所有未知深度值的集合相交以生成未知深度值的减少集合的单元;用于将前景掩模应用到未知深度值的减少集合,以识别内部深度孔的单元;以及用于将背景掩模应用到未知深度值的减少集合以识别外部深度孔的单元。
[0085] 例子35包括例子27-34中的任一项的主题,并且其中,用于扩张所生成的二进制掩模的单元包括:用于执行膨胀操作的单元。
[0086] 例子36包括例子27-35中的任一项的主题,并且其中,用于填充所述内部深度孔的至少一部分和填充所述外部深度孔的至少一部分的单元包括:用于将加权函数应用到内部深度孔中的每个和外部深度孔中的每个的邻域的单元,所述加权函数具有定义阈值和邻域的卷积核大小。
[0087] 例子37包括例子27-36中的任一项的主题,并且其中,用于填充所述内部深度孔的至少一部分的单元包括:用于将加权函数应用到内部深度孔中的每个的邻域的单元,以使得加权函数忽略(i)所述邻域中的未知深度值,以及(ii)外部深度孔;并且其中,用于填充所述外部深度孔的至少一部分的单元包括:用于将加权函数应用到外部深度孔中的每个的邻域的单元,以使得加权函数忽略(i)所述邻域中的未知深度值,以及(ii)内部深度孔。
[0088] 例子38包括例子27-37中的任一项的主题,并且其中,用于填充所述内部深度孔的至少一部分以及填充所述外部深度孔的至少一部分的单元包括:用于留下具有比阈值数小的加权函数值的深度孔未填充的单元。