8.3.3.1 量化复杂性-稀疏census变换
低纹理表面的立体匹配要求大尺寸的census变换,这将导致算法的复杂性很高。为了使复杂性可控,所需要的逻辑单元少,可以采用以下方式:仅仅分析每一串的第n个比特位将减少比较海明距离的位数。因此,在匹配过程中,块中只用1/n的像素。如图8.9所示,n=2。这会导致采样过疏,使得实现低纹理表面匹配的大尺寸变换成为可能,同时保持了较低的资源利用率。此外,还可以在恒定的模块尺寸下,调整算法的复杂性。
当然,稀疏计算也导致了准确度下降。不过表8.1所示,当n=4时,准确度下降还很小。总之,三个数据集上的总准确度仍然远高于SAD算法的准确度。
图8.9 稀疏census变换,n=2
表8.1 census变换、稀疏census变换和SAD算法的失配率比较
8.3.3.2 立体匹配单元
目前基于FPGA的立体匹配单元由三个主要流程组成,如图8.10所示。分别是输入、计算和提取阶段,在主同步之后它们是并行工作的。
(www.xing528.com)
图8.10 基于FPGA的立体匹配
输入阶段可以从输入口一行一行地读入图像信息并且把它存在了芯片的内部存储器中。存储器采用循环结构(循环存储器),图像的每一行都存储于一个独立的内存块中。这样,当输入阶段访问某个内存块时,计算阶段可以访问其他的内存块。计算阶段要从内部存储器中读取存储的图像的行。既然每行都是独立存储的,那就可以在每个时钟周期,读取内存块中垂直行的像素。然后,如果选择census变换,读出的内存块的内容就发生了变换并且产生的比特向量存储在内部寄存器中。如果用了SAD算法,这里会存入强度值。随后在这些值的不同视差水平上通过使用海明距离或者绝对差来计算匹配代价。现在,通过WTA算法,估算左、右视差图中最小代价点的位置。
这个阶段是高度流程式的,在一个时钟周期内,可以计算所有视差水平上的每一个像素的匹配代价。不幸的是,这样不仅会导致高帧速率也会产生高增长的逻辑消耗。进一步来说,对于大多数应用,摄像机每秒30帧的速率是足够的,再高的帧速率其实是一种浪费。
因此,我们把视差范围分成独立的部分分别计算,每行都会产生多个回合的计算。产生的中间值,即位置和与之匹配的最佳值都存储在内部存储器中。在图像行的所有划分都计算完之后,提取阶段读出最后一个图像行的中间值,再次通过WTA算法计算出最佳匹配。然后这些匹配就是提取的用于检测相容性的亚像素。最后,产生的值作为视差图的最后像素值显示到输出端。
为了在计算阶段和提取阶段实现并行计算,在这些阶段使用不同的存储器组,它们在每一行计算之后进行转换。
基于循环的计算使得根据帧速率量化逻辑消耗成为可能,也使得在视差范围内通过减少划分的数量调整立体视觉系统的帧速率成为可能。仅仅通过合成时间就可以调整逻辑消耗,与视差相比,在运行期间调整帧速率也是可能的,这曾经属于基于软件的立体系统范畴。
图8.11表明了基于上述构架,针对帧速率为60,尺寸750×400的60级视差图像,分别采用SAD算法和census变换进行处理所需的逻辑消耗。针对census变换,我们使用原始的census变换和n=4的稀疏census变换。当n=4时,块大小15×15,使用5×5的聚合窗口。对于SAD算法使用的是19×19的模块。因此,对于立体匹配来说所有的算法都对相同大小的块进行评价。明显地,在本算法中,稀疏计算可以有效减少逻辑消耗,在模块尺寸等于或小于11×11,其逻辑消耗甚至小于SAD算法的逻辑消耗。与SAD算法在精度方面相比较也仍然具有竞争力。这就使得稀疏census变换成为智能摄像机的最佳选择,因为摄像机中的资源有限,需要简约的解决方案。
图8.11 取决于模块大小的census变换,稀疏census变换以及SAD算法的逻辑消耗
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。