主要内容

立体差异使用Semi-Global块匹配

这个例子展示了如何计算差距使用Semi-Global左右立体相机图像块匹配算法。该算法适用于FPGA实现。

距离估计是一个重要的测量应用程序在自动驾驶和机器人。一种划算的方式执行距离估计是利用立体相机的视野。立体相机,可以推断从通讯点使用三角测量深度。深度在任何给定的点可以计算如果知道这一点的差距。差距的措施两个图像之间的点的位移。差距越高,越接近对象。

这个例子使用Semi-Global块匹配计算差异(SGBM)方法,类似于差距(计算机视觉工具箱)函数。SGBM方法是一种灰度的方法生成一个密集的和光滑的差距地图三维重建。然而,它是高度计算密集型和需要硬件加速使用fpga或gpu来获取实时性能。

本文提供的示例模型FPGA-hardware兼容,因此可以提供实时的性能。

介绍

视差估计算法可以分为两大类:局部方法和全局方法。本地方法评估一个像素,只考虑相邻像素。可用的全局方法考虑信息在整个图像。当地的方法很差在检测突然深度变化和遮挡,因此全球方法者优先。Semi-global匹配使用信息从多个方向相邻像素来计算一个像素的差距。分析多个方向导致大量的计算。而不是使用整个图像,可以计算一个像素的差异考虑像素的小块易于计算。因此,Semi-Global块匹配(SGBM)算法使用基于块匹配path-wise平滑的成本信息从多个方向。

使用基于块的方法,该算法估计近似差距左边图像的一个像素的像素的图像。更多关于立体视觉的信息是可用的在这里。在进入算法和实现细节之前,两个重要的参数需要被理解:差距水平和方向。

差异水平:差距水平是一个参数用于定义匹配的搜索空间。如下图所示,该算法搜索每个像素在左边的图片中D像素的图像。的D值生成D差距水平左图像中的一个像素。第一个D列左图是未使用的,因为正确的图像对应像素不是可供比较。在图中,w代表图像的宽度h图像的高度。对于一个给定的图像分辨率,增加差异水平降低了最小距离探测深度。增加差异水平也会增加算法的计算负荷。在一个给定的水平差距,提高图像分辨率提高了最小距离探测深度。提高图像分辨率也会增加深度估计的准确性。差异的数量水平成正比的输入图像分辨率检测对象在同一深度。这个例子支持差距水平从8到金宝app128年(两个值包容)。算法的解释是指64年的差距水平。这个示例中提供的模型可以接受输入图像的分辨率。

数量的方向:在SGBM算法,优化成本函数,输入图像被认为是来自多个方向。一般来说,差异结果精度提高的数量增加的方向。这个例子分析五个方向:从左到右(A1) top-left-to-bottom-right (A2),自上而下(A3) top-right-to-bottom-left (A4),和从右到左(A5)。

SGBM算法

SGBM算法需要一双纠正左右图像作为输入。原始图像的像素数据可能没有相同的垂直坐标,因为相机位置的轻微变化。图片需要纠正之前进行立体匹配所有epi-polar线平行于水平轴和垂直坐标匹配相应的像素。整改的更多细节,请参阅rectifyStereoImages(计算机视觉工具箱)函数。的图显示了一个框图SGBM算法,使用五个方向。

SGBM算法的实现有三个主要模块:匹配的成本核算,定向成本计算和后处理。

许多方法在文献中已经探讨了计算匹配代价。这个例子实现使用人口普查变换解释[2]。这个模块可以分为两个步骤:Center-Symmetric普查变换(CSCT)的左右图像和汉明距离计算。首先,模型计算CSCT每个使用滑动窗口左边和右边的图像。对于给定的像素,9-by-7像素的窗口被认为是。CSCT窗口的中心像素估计通过比较每个像素的值与对应的center-symmetric对应的窗口。如果像素值大于其相应的center-symmetric像素,结果是1,否则结果是0。图显示了一个示例9-by-7窗口。该中心像素号码是31。第0个像素62像素(蓝色),相比第一像素61像素(红色)相比,等等,来生成31日的结果。 Each result a single bit output and the result of the whole window is arranged as a 31-bit number. This 31-bit number is the CSCT output for each pixel in both images.

汉明距离模块,左边和右边的CSCT输出图像pixel-wise XOR会和设置位计算生成匹配成本为每个差距水平。生成D差距的水平,D使用pixel-wise汉明距离计算模块。匹配的成本D水平差距在给定像素的位置,p,在左边的图像是由计算的汉明距离计算(p D + p)像素位置正确的图像。匹配的成本,C (p、d),计算每个像素的位置,p对每个差异水平,d。匹配的成本是不计算像素对应于第一位置D列左边的图像。

第二模块SGBM算法定向成本估算。一般来说,由于噪音,匹配结果是模糊的和一些错误的成本,可能会比正确的成本较低。因此需要额外的约束来增加平滑惩罚邻近的变化差异。这个约束实现通过聚合来自多个方向的一维最小成本路径。它是由聚合成本r方向在每个像素位置,S (p、d),由

$ $ S (p、d) = \ sum_ {r} L_r (p、d) $ $

一维最小成本路径对于一个给定的方向,L_r (p d),所示的计算方程。

$ $ L_r (p、d) = C (p、d) +分钟(L_r (p-r d), L_r (p-r d 1) + P1 L_r (p-r d + 1) + P1, & # xA; \敏\ limits_{我}L_r (p-r我)+ P2) - \敏\ limits_ {k} L_r (p-r k) $ $

$ $ $ $

$ $ L_r (p d)当前\ = \ \成本\ \像素\ p \ \差距\ d \ \ & # xA;方向\ r $ $

$ $ C (p、d)匹配\ = \ \成本\ \像素\ p \ \差距\ d $ $

$ $ L_r之前(p-r d 1) \ = \ \成本\ \像素\ \ r \方向\ \ & # xA;差距\ d 1 $ $

$ $ L_r (p-r d + 1)先前\ = \ \成本\ \像素\ \ r \方向\ \ & # xA;差距\ d + 1 $ $

$ $ \敏\ limits_{我}L_r (p-r, i)的最低成本\ \ = \ \ \像素\ \ r \ & # xA;方向\ \ \计算$ $

$ $ P1, P2 \ \ = \损失\ \不连续$ $

正如前面提到的,这个例子使用五个方向差异计算。传播在每个方向上是独立的。由此产生的差异在每个级别从每个方向是每个像素的聚合。总成本是成本的总和计算为每个方向。

第三个模块SGBM算法的后期处理。这个模块有三个步骤:最低成本指数计算,插值和独特功能。最小成本指数计算发现指数对应于给定像素的最小成本。亚二次插值法应用于索引解决亚像素级别的差距。的独特功能确保可靠性计算最小差距。更高价值的独特性阈值标志更多的差距不可靠。作为最后一步,负差异值无效,取而代之的是1。

HDL实现

下图展示了示例模型的概述。块leftImage和rightImage导入立体图像作为算法的输入。输入子系统中,帧像素块转换输入图像从leftImage和rightImage块中的像素流和相应的控制信号pixelcontrol公共汽车。像素流作为输入传递到SGBMHDLAlgorithm子系统包含上述三个计算模块:匹配的成本核算,定向成本计算和后处理。SGBMHDLAlgorithm子系统的输出是一个差异值像素流。在输出子系统、帧的像素块将输出转换为矩阵差距地图。差异映射是使用视频查看器显示块。

modelname =“SGBMDisparityExample”;open_system (modelname);set_param (modelname“SampleTimeColors”,“关闭”);set_param (modelname“开放”,“上”);set_param (modelname“SimulationCommand”,“更新”);集(allchild (0)“可见”,“关闭”);

匹配的成本核算

匹配的成本核算又分为两个部分:CSCT计算和汉明距离计算。CSCT计算在每个9-by-7像素窗口调整每组的像素比较使用利用延迟(金宝app模型)块,为每个子系统(金宝app模型)块和缓冲区。和零输入像素填充,允许CSCT计算像素的角落。像素的结果流传递给ctLogic子系统。下图显示了ctLogic子系统使用了延迟块生成的一组像素。像素缓冲imgColSize周期,imgColSize是一个图像的像素数量。一组像素排列的比较是来自每一行。对于每个块和逻辑操作符块复制比较逻辑输入向量的每个像素的大小。实现一个9-by-7窗口,为每个块模型使用四个这样的。每个每个块生成的结果是一个向量进一步连接形成一个向量的大小31位。后位Concat(高密度脂蛋白编码器)使用,输出数据类型是什么uint5。CSCT和补零操作执行分别在左边和右边输入图像和结果传递到汉明距离子系统。

open_system (“SGBMDisparityExample / SGBMHDLAlgorithm / MatchingCost / CensusTransform / ctLogic ',“力”);

汉明距离的子系统,第65左CSCT XOR的结果会与第65 2 CSCT正确的结果。位集计算获得汉明距离。这个距离必须计算为每个差距水平。正确的CSCT结果传递给enabledTappedDelay子系统生成的一组像素然后XOR会左CSCT结果为每个块使用。对于每个块也位在结果集。对于每个块复制每个差距的汉明距离的计算水平。结果是一个向量,对应于每个像素有64的差距水平。这个向量是匹配的成本,传递到定向成本子系统。

open_system (“SGBMDisparityExample / SGBMHDLAlgorithm MatchingCost / HammDistA ',“力”);

定向成本核算

定向子系统计算成本差异在多个方向的每个像素。在示例中使用的五个方向从左到右(A1) top-left-to-bottom-right (A2),自上而下(A3) top-right-to-bottom-left (A4),和从右到左(A5)。成本聚集在每个像素在每个方向上是相互独立的,所有五个方向同时实现。

每个方向分析正在调查之前的成本值对当前成本价值。之前的成本的价值需要计算每个像素的当前成本取决于方向考虑。下图显示的位置之前的成本对当前成本计算下,所有五个方向。

在上图中,蓝色框显示当前像素的当前的位置值计算成本。红色框表示的位置之前的成本值用于当前成本计算。A1,当前的成本成为以前的成本值为下一个计算当遍历从左到右。因此,当前的成本值应立即反馈计算出下一个当前的成本,如[3]所述。A2,当遍历从左到右,应该使用当前成本值与前面的成本价值imgColSize + 1周期。当前成本值因此缓冲周期等于imgColSize + 1然后反馈计算下一个当前的成本。

同样,A3、A4的当前成本值缓冲周期等于imgColSizeimgColSize-1,分别。然而,对于A5,当遍历从左到右,前面的成本价值是不可用的。因此,遍历计算A5是相反的方向。这种调整是通过改变输入像素的每一行。当前的成本值就变成了以前的成本价值未来当前成本计算,类似于A1。

一维最小成本路径计算当前成本d差异的位置,使用匹配的成本价值,前面的成本值差异d 1,d,d + 1和最低的成本值。下图展示了最小成本路径子系统,计算当前成本差距位置为一个像素。

open_system (“SGBMDisparityExample / SGBMHDLAlgorithm DirectionalCost / LeftToRight lrSubsystem / minCostPath ',“力”);

对于每个块用于复制的最小成本路径计算为每个差异水平,为每一个方向。下图显示了64年的差距水平A1的实现。如图所示,64年最低成本路径计算生成由minCostPath子系统。汉明距离的匹配的成本是一个输入子系统。当前成本计算minCostPath子系统是立即反馈给自己以前的成本值,为下一个当前成本计算。因此,值prevCost_d现在可用。值prevCost_d-1将获得1到2 64 63反馈值的位置。d 1子系统包含一个选择器(金宝app模型)块的位置变化值,在第一位置填写零。

同样的,值prevCost_d + 1位置是通过第二转向64反馈值1 63位置,插入一个零在64位置。当前成本计算也传递到最小块计算最小值从当前成本值。这个值反馈到minPrevCostminCostPath子系统的输入。下一个当前成本然后计算通过使用当前成本值,作为以前的成本值,在下一个周期A1。以来的最低成本差距水平较前设置立即需要当前设置,这种反馈路径是关键路径的设计。

open_system (“SGBMDisparityExample / SGBMHDLAlgorithm / DirectionalCost / LeftToRight / lrSubsystem ',“力”);

当前成本计算A2、A3、A4以同样的方式实现。因为当前的成本值不是立刻要求这些方向,有一个缓冲的反馈路径。这个缓冲区可以防止这个反馈路径被关键路径的设计。下图展示了A3与一个缓冲区实现反馈路径。

open_system (“SGBMDisparityExample / SGBMHDLAlgorithm / DirectionalCost / TopToBottom / tbSubsystem ',“力”);

目前成本核算对A5有额外的逻辑扭转行输入和再次扭转行输出匹配的像素位置总成本计算。一个缓冲区imgColSize周期达到这种逆转。从四面八方同时计算,所需的时间反向行必须补偿路径。延迟相当于2 * imgColSize介绍了周期其他四个方向。优化资源,而不是缓冲64每个像素的值匹配成本,31位结果CSCT缓冲。然后需要一个单独的汉明距离模块计算匹配成本A5。这个设计可以减少片上内存使用。CSCT计算和匹配后的行逆转成本是使用一个单独的汉明距离计算模块,提供匹配的成本A5的输入。同时,dataAligner子系统用于删除数据不连续为每一行之前将它传递给汉明距离子系统。这有助于容易聚合时的数据同步。当前的成本从五个方向获得每个像素聚合获得每个像素的总成本。总成本传递给后处理子系统。

后处理

后处理子系统,最低成本计算的指数从64年开始在每个像素位置差异水平通过使用最小块在一个树结构。索引值获得每个像素的差距。随着最低成本指数计算,在计算指数最低成本价值,成本值索引1指数+ 1也计算。Minimum_Cost_Index子系统实现了树结构来计算最小值从128年值。64与64多个值差异值填充128矢量值。计算最小值从128年这个向量与价值观。用128年值的情况下,一个向量可以没有值填充一个向量或换句话说,向量是通过直接为最小值的计算。变体子系统、变体模型变体装配子系统(金宝app模型)用于选择使用不同子系统之间的逻辑变量。亚像素的二次插值法应用于索引来解决在亚像素级别的差距。另外,独特功能是用于索引计算最小块,以确保可靠的差异的结果。作为最后一步,无效的差异识别,取而代之的是1。

模型参数

本文介绍的模型需要水平差异和独特性阈值作为输入参数,如图。差距水平是一个整数值从8到128年与64年的默认值。更高的价值差距水平降低了检测到的最小距离。同时,对于较大的输入图像尺寸大的差距水平有助于更好的探测深度的对象。独特性阈值必须是一个正整数的值,0到100之间的一个典型的范围从5到15。低价值的独特性阈值标志更多的差距可靠。独特性阈值的默认值是5。

仿真和结果

示例模型可以模拟通过指定路径的输入图像leftImage和rightImage块。示例使用样本大小640 -由480像素的图像。图显示了一个示例输入图像和计算差异的地图。计算模型出口这些差异和相应的有效信号,MATLAB工作区,使用变量名dispMapdispMapValid分别。输出差异地图是576————480像素,自64年第一列中未使用的差异计算。0的未使用的像素填充输出子系统生成输出图像的大小640 - - 480所示视频查看器。差距地图生成colorbar使用如下所示的命令。更高的差距值结果表明对象是靠近相机和更低的差距值显示对象。

dispMapValid =找到(dispMapValid = = 1);disparityMap =(重塑(dispMap (dispMapValid (1: imgRowSize * imgColSize):), imgColSize, imgRowSize)) ';图();显示亮度图像(disparityMap);标题(“差距地图”);colormap喷射;colorbar;

示例模型生成HDL代码兼容。你必须有一个高密度脂蛋白编码器™许可生成HDL代码。设计合成了英特尔®Arria®10 GX 115 s2f45i1sg FPGA。下面的表格显示了三个资源利用率差异水平在不同的图像分辨率。金宝搏官方网站考虑一对立体声输入图像帧,该算法吞吐量估计通过寻找所需的时钟周期数处理当前帧到来之前下一帧。核心算法的吞吐量,没有缓冲输入和输出数据的开销,是最高工作频率除以输入帧之间所需的最小周期。例如,由- 720和1280 - 128年差距水平图像分辨率,最小周期过程输入帧938857时钟周期/帧。最大工作频率与128年获得算法差异水平为61.69 MHz,核心算法吞吐量计算65帧每秒。

% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =% |差距水平| | 64 | | 96 | | 128 |% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =输入图像分辨率% | | | 640 x 480 | | 960 x 540 | | 720 | 1280 x% | ALM利用率| | 45613 (11%)| | 64225 (15%)| | 85194 (20%)|总额% |注册| | 49232 | | 64361 | | 85564 |% |总块内存碎片| | 3137312 (6%)| | 4599744 (9%)| | 11527360 (21%)|总内存块% | | | 264 (10%)| | 409 (16%)| | 741 (28%)|% |总DSP模块| | 65 (4%)| | 97 (6%)| | 129 (8%)|% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

引用

[1]Hirschmuller H。,Accurate and Efficient Stereo Processing by Semi-Global Matching and Mutual Information, International Conference on Computer Vision and Pattern Recognition, 2005.

[2]Spangenberg R。,兰纳T。,Rojas R., Weighted Semi-Global matching and Center-Symmetric Census Transform for Robust Driver Assistance, Computer Analysis of Images and Patterns, 2013.

[3]伽。埃尔拜利,F。,Meyer T., A Real-Time Low-Power Stereo Vision Engine Using Semi-Global Matching, International Conference on Computer Vision System, 2009.