发明内容
本发明的目的是提供一种双目立体匹配算法的硬件实现系统和方法,以解决现有技术中立体匹配算法实现方法运算速度较慢、电路存储器成本较大且不能针对不同的应用场景进行扩展的问题。
为了实现上述目的,本发明提供如下技术方案:
一种双目立体匹配算法的硬件实现方法,包括:
S101,配置一个双目图像采集装置。双目图像采集装置包括一个第一图像采集装置和一个第二图像采集装置。第一图像采集装置能够采集第一图像,第二图像采集装置能够采集第二图像。标定双目图像采集装置的内外参数。
S102,一个极线校正模块,其配置为能够接收第一图像采集装置输出的第一输出数据和第二图像采集装置输出的第二输出数据。
极线校正模块通过极线校正得到处于同一水平方向的第一图像和第二图像。
极线校正模块通过双目图像采集装置的内外参数对接收到的输出数据双线性插值。
S103,配置一个像素代价模块,其通过像素代价计算并行运算一个时钟周期得到n个像素代价,像素代价模块流水线依次遍历第一图像的每一个像素点,得到一个n维像素代价图。
S104,配置一个块代价计算模块,其将一个搜索窗范围内的像素代价相加得到该像素的代价,块代价计算模块通过并行计算和流水线输出一个时钟周期的n维块像素代价图。
S105,一个代价聚合模块,其配置为能够接收n维块像素代价图。代价聚合模块通过动态规划的方式进行代价聚合。代价聚合模块根据接收到的n维块像素代价图并行计算得到n维聚合代价图。
S106,一个视差计算模块,其配置为能够接收n维聚合代价图。视差计算模块根据接收到的n维聚合代价图比较得到一个最小的代价值。最小代价值对应的视差是该像素点的视差。视差计算模块能够输出一张一维原始视差图。
视差计算模块能够将次小聚合代价值、最小聚合代价值、最小聚合代价值维度相邻的两个聚合代价值合成一张四维聚合代价图;
S107,一个视差优化模块,其配置为能够接收四维聚合代价图,视差优化模块接收四维聚合代价图后对原始视差图进行优化。
S108,一个视差融合模块,融合模式能够将m视差范围切割成若干个n范围分别进行S102~S107的计算。
融合模式能够将图像数据进行纵向切割。
融合模式下,视差融合模块能够输出一个一维视差图。
S109,一个视差滤波模块,其能够对一维视差图和一维原始视差图进行处理。视差滤波器通过滤波算法分别对一维视差图和一维原始视差图平滑处理。
S110,一个视差填充模块,其通过连通域检查的方式将平滑处理后视差图存在的小范围噪声检查出来,通过视差替换,输出一张视差图。
S111,配置一个外部存储器,融合模式下,视差优化模块将优化后的视差图输出到外部存储器。
非融合模式下,视差优化模块将优化后的视差图输出到视差滤波模块。
其能够接收n维聚合代价图、n维块像素代价图和视差图。
在上述技术方案的基础上,本发明还可以做如下改进:
进一步地,双目图像采集装置采集若干幅棋盘格图像,根据每幅图像棋盘格角点在像素坐标系与世界坐标系的坐标转换关系计算双目图像采集装置的内参数f和外参数R、T。
f表示双目图像采集装置的归一化焦距,R表示双目图像采集装置的旋转矩阵,T表示双目图像采集装置的平移向量。
进一步地,视差融合模块将需要计算的视差范围拆分成多个相同视差范围的计算;拆分是视差范围的拆分,不涉及分辨率的切割。
进一步地,第一图像和第二图像每行都有A个像素,需要计算的视差范围是B,拆分为C次计算,那么每次计算的视差范围是B/C;用m表示行像素序号,用n表示第几次计算,第一图像的第m个像素与第二图像的m-((n-1)B/C)到m-nB/C范围的像素计算得到B/C维像素代价。
进一步地,经过块代价计算之后,输出B/C维块像素代价到外部存储器,再经过代价聚合之后,输出B/C维聚合代价到外部存储器,再经过视差计算,视差优化输出一维视差图到外部存储器;所有计算完成后,得到C个B/C维快代价值图、B/C维聚合代价值图、一维视差图。
进一步地,多次计算得到的视差结果对应的是第一图像的同一个点。视差融合模块根据n维块像素代价图、n维聚合代价图和双目图像采集装置的内外参数,得到一个视差值作为该像素的最优视差值。
进一步地,视差融合模块在融合模式下能够将需要计算的宽是B个像素的原始图像,切割成宽是B/2个像素的第一切割图像和第二切割图像。
进一步地,第一切割图像和第二切割图像有部分像素交叠。
分别对第一切割图像和第二切割图像视差计算,根据融合算法对交叠部分的视差融合得到整图的视差图。
进一步地,配置一个双目图像采集装置。双目图像采集装置包括一个第一图像采集装置和一个第二图像采集装置。第一图像采集装置能够采集第一图像,第二图像采集装置能够采集第二图像。标定双目图像采集装置的内外参数。
一个极线校正模块,其配置为能够接收第一图像采集装置输出的第一输出数据和第二图像采集装置输出的第二输出数据。极线校正模块通过极线校正得到处于同一水平方向的第一图像和第二图像。
极线校正模块通过双目图像采集装置的内外参数对接收到的输出数据双线性插值。
配置一个像素代价模块,其通过像素代价计算并行运算一个时钟周期得到n个像素代价,像素代价模块流水线依次遍历第一图像的每一个像素点,得到一个n维像素代价图。
配置一个块代价计算模块,其将一个搜索窗范围内的像素代价相加得到该像素的代价,块代价计算模块通过并行计算和流水线输出一个时钟周期的n维块像素代价图。
一个代价聚合模块,其配置为能够接收n维块像素代价图。代价聚合模块通过动态规划的方式进行代价聚合。代价聚合模块根据接收到的n维块像素代价图并行计算得到n维聚合代价图。
一个视差计算模块,其配置为能够接收n维聚合代价图。视差计算模块根据接收到的n维聚合代价图比较得到一个最小的代价值。最小代价值对应的视差是该像素点的视差。视差计算模块能够输出一张一维原始视差图。
视差计算模块能够将次小聚合代价值、最小聚合代价值、最小聚合代价值维度相邻的两个聚合代价值合成一张四维聚合代价图;
一个视差优化模块,其配置为能够接收四维聚合代价图,视差优化模块接收四维聚合代价图后对原始视差图进行优化。
一个视差融合模块,融合模式能够将m视差范围切割成若干个n范围分别进行S102~S107的计算。
融合模式能够将图像数据进行纵向切割。
融合模式下,视差融合模块能够输出一个一维视差图。
一个视差滤波模块,其能够对一维视差图和一维原始视差图进行处理。视差滤波器通过滤波算法分别对一维视差图和一维原始视差图平滑处理。
一个视差填充模块,其通过连通域检查的方式将平滑处理后视差图存在的小范围噪声检查出来,通过视差替换,输出一张视差图。
配置一个外部存储器,融合模式下,视差优化模块将优化后的视差图输出到外部存储器。
非融合模式下,视差优化模块将优化后的视差图输出到视差滤波模块。
其能够接收n维聚合代价图、n维块像素代价图和视差图。
本发明具有如下优点:
本发明中的双目立体匹配算法的硬件实现系统,具有一个支持图像拼接和深度融合的立体匹配专用电路,支持将输入图像按照分辨率或者深度范围分割成若干子图,分别通过流水线和并行运算进行加速,然后再将计算得到的子目标图通过融合计算电路,最终得到目标深度图。实现在兼顾运算速度的同时,大幅降低了电路存储器开销,并且可以针对不同的应用场景进行扩展。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1-6所示,本发明实施例提供了一种双目立体匹配算法的硬件实现系统和方法,包括:一个支持图像拼接和深度融合的立体匹配专用电路,支持将输入图像按照分辨率或者深度范围分割成若干子图,分别通过流水线和并行运算进行加速,然后再将计算得到的子目标图通过融合计算电路,最终得到目标深度图。实现在兼顾运算速度的同时,大幅降低了电路存储器开销,并且可以针对不同的应用场景进行扩展。
原始图像存储在外部存储器110内,在启动双目运算前,需要通过模块控制寄存器配置好原始图像分辨率、目标视差范围、分辨率分组数量、视差分组数量、原始图像存放基地址,然后启动运算。模块在去外部存储器110取数据时就会按照分割好的子图分辨率进行数据读取,计算完成第一幅子图后开始计算第二幅,直至计算完成所有子图。
视差分割是在像素代价计算模块完成的,像素代价计算模块根据目标视差范围和视差分组数量计算出每次的视差计算范围,完成该次计算,直至完成分组数量的计算后,得到分组数量的视差图,然后读入视差融合模块80进行融合。
流水线是一种是多条指令重叠执行的处理机实现技术。它已经成为现代处理机设计中最为关键的技术。计算机中的流水线是把一个重复的过程分解为若干个子过程,每个子过程可以与其它子过程并行进行。由于这种工作方式与工厂中的生产流水线十分相似,因此称为流水线技术。
并行计算是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。
S101,配置一个双目图像采集装置,通过双目图像采集装置采集第一图像和第二图像。
本步骤中,双目图像采集装置10包括一个第一图像采集装置和一个第二图像采集装置。第一图像采集装置能够采集第一图像,第二图像采集装置能够采集第二图像。标定双目图像采集装置10的内外参数。
摄像头参数是标定获得的,会得出第一图像权重坐标、第一图像插值坐标,第二图像权重坐标、第二图像插值坐标和权重数据,并将这些数据存储在外部存储器110。
S102,极线校正模块接收第一输出数据和第二输出数据,并通过内外参数对结束到的输出数据双线性插值。
本步骤中,极线校正模块20配置为能够接收第一图像采集装置输出的第一输出数据和第二图像采集装置输出的第二输出数据,并将第一输出数据和第二输出数据分别存储在极线校正模块20的第一行存储器201内。
极线校正模块20通过极线校正得到处于同一水平方向的第一图像和第二图像。以便于后续将第一图像与第二图像立体匹配。
极线校正模块20通过双目图像采集装置10的内外参数对接收到的输出数据双线性插值。
启动双目立体匹配算法计算后,极线校正模块20读入一行的插值坐标和权重坐标。根据坐标由原始图像中取出对应像素值,由权重数据中取出对应权重,然后做乘加运算得到校正后的像素数据。一行数据计算完成之后开始下面一行数据计算,直至整幅图像完成。
S103,配置一个像素代价模块,得到一个n维像素代价图。
本步骤中,像素代价模块30通过像素代价计算并行运算一个时钟周期得到n个像素代价,像素代价模块30流水线依次遍历第一图像的每一个像素点,得到一个n维像素代价图,并将n维像素代价图存储在第二行存储器301内。
像素代价就是第一图像某个像素与其在第二图像对应视差范围内像素的差值绝对值,绝对值越小表示两个像素匹配代价越小,相似度越高。
如图4所示,第一图像第n-1个像素在第二图像有n(由视差范围决定)个匹配点,像素代价模块30通过并行计算一个时钟周期计算出n个像素代价,然后流水线依次遍历左图每一个像素点,最终得到一个n维的像素代价图。
S104,配置一个块代价计算模块,通过并行计算和流水线输出一个时钟周期的n维块像素代价图。
本步骤中,块代价计算模块40将一个搜索窗范围内的像素代价相加得到该像素的代价,块代价计算模块40通过并行计算和流水线输出一个时钟周期的n维块像素代价图,并将n维块像素代价图存储在第三行存储器401内。
像素代价可能会存在一定的噪声,为了消除这种噪声,块代价计算模块40将一个搜索窗范围内的像素代价累加起来作为该像素的代价。
如图5所示,将虚线所示的一个3x3(窗口大小可以配置)窗口内的所有像素代价累加之后作为像素11的块代价输出。块代价模块通过并行计算和流水线实现一个时钟周期输出n维块像素代价图。模块支持将计算结果输出到外部存储器110,用于后续的视差融合计算。
S105,代价聚合模块根据接收到的n维块像素代价图并行计算得到n维聚合代价图。
本步骤中,代价聚合模块50配置为能够接收n维块像素代价图。代价聚合模块50通过动态规划的方式进行代价聚合。代价聚合模块50根据接收到的n维块像素代价图并行计算得到n维聚合代价图,并将n维聚合代价图存储在第五行存储器501内。
代价聚合模块50支持将计算结果输出到外部存储器110,用于后续的视差融合计算。
S106,视差计算模块能够输出一张一维原始视差图和一张四维聚合代价图。
本步骤中,视差计算模块60配置为能够接收n维聚合代价图。视差计算模块60根据接收到的n维聚合代价图比较得到一个最小的代价值。最小代价值对应的视差是该像素点的视差。视差计算模块60能够输出一张一维原始视差图。
由于原始视差图中会有噪声干扰,视差计算模块60能够将次小聚合代价值、最小聚合代价值、最小聚合代价值维度相邻的两个聚合代价值合成一张四维聚合代价图输出给下级模块。
S107,一个视差优化模块70能够将噪声点的视差去除改成无效视差值。
本步骤中,其配置为能够接收四维聚合代价图,视差优化模块70接收四维聚合代价图后对原始视差图进行优化。视差优化模块70将噪声点的视差去除,改成无效视差值。融合模式下,模块会将优化后的视差图输出到外部存储器110,用于后续融合计算。非融合模式下,模块会将优化后的视差图直接输出给视差滤波模块90进行进一步的处理。
S108,一个视差融合模块在融合模式能够将m视差范围切割成若干个n范围分别进行S102~S107的计算。
本步骤中,融合模式能够将图像数据进行纵向切割。融合模式下,视差融合模块80能够输出一个一维视差图。
视差范围的减小,会直接降低每级模块输入输出的维度,能带来行存储器开销的降低,并且可以降低计算的并行度,降低峰值功耗。
假设需要计算的视差范围是0~127,可以将其拆分为0~63和64~127两部分分别计算,左图的第127个像素在第一次计算过程中分别与右图的第64~127个像素计算,得到一个64维的像素代价,然后与周边的8个像素代价做窗口累加得到一个64维的窗口代价,经过代价聚合、代价计算和代价优化之后,得到一个一维的代价。然后开始第二次计算流程,这次唯一不同的是左图的第127个像素要与右图的0~63个像素进行计算,流程结束也得到一个视差,两次计算得到的视差结果对应的是左图的同一个点,融合模块需要根据之前获得的块代价和聚合代价,再加上用户配置的补偿参数,选择出一个视差值作为该像素的最优视差。
融合模式还支持将图像数据进行纵向切割,同样可以降低行存储器的大小。假设需要计算的原始图像宽是1920个像素,可以将其切割为2张宽是992像素的图像,两张图像有64像素(可以进行配置)的交叠,分别对两张图像进行视差计算,最后根据融合算法对交叠部分的视差进行融合就可以得到整图的视差图。
融合模式下,视差融合模块80输出完整的1维视差图给下级模块。
S109,一个视差滤波模块通过滤波算法分别对一维视差图和一维原始视差图平滑处理。
本步骤中,视差滤波模块90配置为对一维视差图和一维原始视差图进行处理。视差滤波器通过滤波算法分别对一维视差图和一维原始视差图平滑处理,并将一维视差图和一维原始视差图平滑处理结果存储到第六行存储器901。
S110,一个视差填充模块其通过连通域检查的方式将平滑处理后视差图存在的小范围噪声检查出来,通过视差替换,输出一张视差图。
本步骤中,经过前面平滑处理之后的视差图依然可能会存在小范围的连续噪声,为了消除这部分噪声,视差填充模块100通过连通域检查的方式将其检查出来,然后进行视差替换,最终输出一张平滑稠密的视差图,并将输出的平滑稠密的视差图存储到第六行存储器1001。
S111,配置一个外部存储器。
本步骤中,融合模式下,视差优化模块70将优化后的视差图输出到外部存储器110。
非融合模式下,视差优化模块70将优化后的视差图输出到视差滤波模块90。
其能够接收n维聚合代价图、n维块像素代价图和视差图。
在上述技术方案的基础上,本发明还可以做如下改进:
双目图像采集装置10采集若干幅棋盘格图像,根据每幅图像棋盘格角点在像素坐标系与世界坐标系的坐标转换关系计算双目图像采集装置10的内参数f和外参数R、T。
f表示双目图像采集装置10的归一化焦距,R表示双目图像采集装置10的旋转矩阵,T表示双目图像采集装置10的平移向量。
视差融合模块80将视差融合模块将需要计算的视差范围拆分成多个相同视差范围的计算;拆分是视差范围的拆分,不涉及分辨率的切割。
第一图像和第二图像每行都有A个像素,需要计算的视差范围是B,拆分为C次计算,那么每次计算的视差范围是B/C;用m表示行像素序号,用n表示第几次计算,第一图像的第m个像素与第二图像的m-((n-1)B/C)到m-nB/C范围的像素计算得到B/C维像素代价。
经过块代价计算之后,输出B/C维块像素代价到外部存储器,再经过代价聚合之后,输出B/C维聚合代价到外部存储器,再经过视差计算,视差优化输出一维视差图到外部存储器;所有计算完成后,得到C个B/C维快代价值图、B/C维聚合代价值图、一维视差图。
多次计算得到的视差结果对应的是第一图像的同一个点。视差融合模块80根据n维块像素代价图、n维聚合代价图和双目图像采集装置10的内外参数,得到一个视差值作为该像素的最优视差值。
如图6所示,视差融合模块80在融合模式下能够将需要计算的宽是B个像素的原始图像,切割成宽是B/2个像素的第一切割图像和第二切割图像。
第一切割图像和第二切割图像有部分像素交叠。
分别对第一切割图像和第二切割图像视差计算,根据融合算法对交叠部分的视差融合得到整图的视差图。
配置一个双目图像采集装置10。双目图像采集装置10包括一个第一图像采集装置和一个第二图像采集装置。第一图像采集装置能够采集第一图像,第二图像采集装置能够采集第二图像。标定双目图像采集装置10的内外参数。
一个极线校正模块20,其配置为能够接收第一图像采集装置输出的第一输出数据和第二图像采集装置输出的第二输出数据。极线校正模块20通过极线校正得到处于同一水平方向的第一图像和第二图像。
极线校正模块20通过双目图像采集装置10的内外参数对接收到的输出数据双线性插值。
配置一个像素代价模块30,其通过像素代价计算并行运算一个时钟周期得到n个像素代价,像素代价模块30流水线依次遍历第一图像的每一个像素点,得到一个n维像素代价图。
配置一个块代价计算模块40,其将一个搜索窗范围内的像素代价相加得到该像素的代价,块代价计算模块40通过并行计算和流水线输出一个时钟周期的n维块像素代价图。
一个代价聚合模块50,其配置为能够接收n维块像素代价图。代价聚合模块50通过动态规划的方式进行代价聚合。代价聚合模块50根据接收到的n维块像素代价图并行计算得到n维聚合代价图。
一个视差计算模块60,其配置为能够接收n维聚合代价图。视差计算模块60根据接收到的n维聚合代价图比较得到一个最小的代价值。最小代价值对应的视差是该像素点的视差。视差计算模块60能够输出一张一维原始视差图。
视差计算模块能够将次小聚合代价值、最小聚合代价值、最小聚合代价值维度相邻的两个聚合代价值合成一张四维聚合代价图;一个视差优化模块70,其配置为能够接收四维聚合代价图,视差优化模块70接收四维聚合代价图后对原始视差图进行优化。
一个视差融合模块80,融合模式能够将m视差范围切割成若干个n范围分别进行S102~S107的计算。
融合模式能够将图像数据进行纵向切割。
融合模式下,视差融合模块80能够输出一个一维视差图。
一个视差滤波模块90,其配置为能够接收一维视差图和一维原始视差图。视差滤波器通过滤波算法对一维视差图和一维原始视差图平滑处理。
一个视差填充模块100,其通过连通域检查的方式将平滑处理后视差图存在的小范围噪声检查出来,通过视差替换,输出一张视差图。
配置一个外部存储器110,融合模式下,视差优化模块70将优化后的视差图输出到外部存储器110。
非融合模式下,视差优化模块70将优化后的视差图输出到视差滤波模块90。
其能够接收n维聚合代价图、n维块像素代价图和视差图。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。