CN103281548B - 一种实时高清深度估计系统 - Google Patents
一种实时高清深度估计系统 Download PDFInfo
- Publication number
- CN103281548B CN103281548B CN201310173915.8A CN201310173915A CN103281548B CN 103281548 B CN103281548 B CN 103281548B CN 201310173915 A CN201310173915 A CN 201310173915A CN 103281548 B CN103281548 B CN 103281548B
- Authority
- CN
- China
- Prior art keywords
- data
- address
- depth
- row
- edge graph
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Abstract
本发明公开了一种实时高清深度估计系统,对相对高度的深度估计算方法并对其改进,将需要大量幂运算和除法运算的约束计算公式简化为只包含加法、减法和比较运算的计算形式,有效降低了计算复杂度。并提出了一种基于DDR2的行列/列行转换器,逐行/逐列传输的边缘图数据/深度图数据经过行列/列行转换器处理后会逐列/逐行传输,有效解决了深度估计与传输方式的冲突。同时,本发明实时高清深度估计系统充分采用流水线技术和外部DDR2存储器来提高系统的工作频率和降低内存消耗。实验结果表明,本实时高清深度估计系统在200MHz时钟频率下可支持720P视频的实时处理,对室外场景具有较好的估计效果。
Description
技术领域
本发明属于视频图像处理技术领域,更为具体地讲,涉及一种实时高清深度估计系统。
背景技术
随着显示技术的发展,3D电视已成为电视技术发展的主流趋势,人们越来越强烈地渴望在家中就能体验到3D技术带来的震撼效果。然而,3D片源的短缺,制作成本的昂贵,严重阻碍了3D电视技术的发展。如果能将目前大量的2D视频实时转为3D视频,则不仅可以为立体显示提供丰富的素材,而且能大大节约制作成本。因此,2D转3D技术成为当前3D电视技术发展的主流方向。
深度图由于包含物体的三维信息即深度信息,而被广泛应用于2D转3D系统中,其精确与否直接影响到生成3D视图质量的好坏。然而,直接拍摄深度图不仅价格昂贵,而且设备复杂,周期长,不适合3D的家用发展前景。正因于此,深度估计技术油然而生。深度估计能从一幅或多幅彩色图中估计出深度图,有效的解决了该问题。然而,深度估计算法的复杂度大都比较高,对于高清乃至全高清视频,深度估计算法的复杂度更会显著增加,软件已无法满足实时处理的要求。例如,采用深度估计参考软件(DERS)对640×480分辨率的图片进行估计,估计一幅深度图像需要30s的时间。因此,为满足实时处理的要求,采用硬件实现深度估计具有重要的理论意义和研究价值。
目前,深度估计系统的硬件实现还研究的比较少。2011年Altera全国大学教师会议上,中山大学展示了“基于SOPC的2D转3D多媒体处理系统”。该系统采用Nios II来进行深度估计,可实时估计出深度图像。然而,该系统最高支持分辨率为800×600,且深度估计部分采用C语言进行设计,不利于ASIC的代码移植。台湾大学提出了一种适用于1080P的2D转3D系统。该系统可实时处理1080P视频流。上海大学2012年提出了一种基于双目视觉的实时深度估计系统,该系统能实时处理1080P视频流,且吞吐量达到131fps。然而,该系统采用视差进行深度估计,处理时需要至少两幅图像,且必须知道摄像机标定参数。然而,在大多 数情况下,摄像机标定参数是未知的,且需要由单幅图像进行深度估计,因而该系统不能满足上述要求。
基于相对高度的深度估计方法可基于摄像机标定参数是未知的,且由单幅图像进行深度估计,其流程如图1所示,可分为四步:
(1)、彩色图转灰度图:将输入的彩色图转为灰度图;
(2)、边缘检测:采用Sobel算子求取物体的边缘,得到对应的边缘图;
(3)、线轨迹追踪:首先根据上远下近模型给定一个间距平均分布的初始线轨迹图(initial line map)和初始深度图;其次根据每列的边缘值及相应约束条件从左向右追踪,逐列求取初始线轨迹点在下一列上的对应匹配点,得到线轨迹图;
(4)、深度赋值:根据每列线轨迹点的坐标,逐列进行赋值,从而得到深度图。
然而,在上述线轨迹追踪步骤中,存在大量指数运算和除法运算的约束计算公式,计算复杂度高,不利于硬件的实现。同时,上述相对高度的深度估计方法采用软件方法,不能满足实时处理的要求。
发明内容
本发明的目的在于克服现有技术的不足,提供一种实时高清深度估计系统,以硬件方式实现相对高度的深度估计,以满足实时处理的要求
为实现上述目的,本发明实时高清深度估计系统,其特征在于,包括:
一边缘检测模块,用于接收输入的分辨率为1280×720p彩色图像数据,然后将彩色图像数据即彩色值转换为灰度值;内部的块RAM对转换得到连续三行灰度值进行缓存,每一个时钟输出三个灰度值进行sobel算子处理,计算每个灰度值对应的边缘值即边缘图数据并按行输出给边缘图数据缓存模块,其中边缘图数据的位宽为8bit;
一边缘图数据缓存模块,采用16片块RAM对逐行输入的边缘图数据进行缓存,每片块RAM缓存一行数据;缓存完16行边缘图数据后,同步读取16片块RAM中的数据,并对同地址的数据组合为128bit的边缘图数据后输出给多口内存控制模块;组合输出完毕后,对下16行逐行输入的边缘图数据进行缓存、同步读取以及组合输出;
一DDR2存储器,内部开辟4段地址E1、E2、D1、D2;其中地址段E1、E2用于交替存储和读取一帧边缘图数据即向地址段E1存储边缘图数据时,从地址段E2读取边缘图数据,一帧边缘图像数据存储和读取完毕后,交换地址段E2用于存储,地址段E1用于读取,地址段D1、D2用于交替存储和读取一帧深度图数据即向地址段D1存储深度图数据时,从地址段D2读取深度图数据,一帧深度图像数据存储和读取完毕后,交换地址段D2用于存储,地址段D1用于读取;
一多口内存控制模块,将来自边缘图数据缓存模块的128bit的组合边缘图数据存储到DDR2存储器中,写入起始地址采用基地址加偏移量的方式进行计算,基地址初始值为地址段E1的起始地址,偏移量从0开始,每存储一次128bit的组合边缘图数据,则偏移量增加:45×address_num,address_num为存储一次128bit的组合边缘图数据所占地址单元的个数;
完成16行8bit的边缘图数据即1行128bit的组合边缘图数据的存储后,基地址增加address_num,进行下1行128bit的组合边缘图数据的存储,这样不断重复,直到一帧边缘图像数据存储完毕,交换基地址为地址段E2的起始地址开始一帧下边缘图像数据存储,存储完后,再交换基地址为地址段E1的起始地址,这样不断交替;
在一帧边缘图像数据存储完毕后,多口内存控制模块读取DDR2存储器存储的128bit的组合边缘图数据给边缘图数据拆分模块,读起始地址采用基地址加偏移量的方式进行计算,基地址为地址段E1的起始地址,偏移量从0开始,每读取一次128bit的组合边缘图数据,则偏移量增加address_num;当一帧边缘图像数据读取完毕后,将基地址交换为地址段E2的起始地址,这样不断交替;
一边缘图数据拆分模块,将45次读取的128bit的组合边缘图数据都进行拆分,然后依次输出,得到按列输出的8bit的边缘图数据,其中拆分是将128bit的组合边缘图数据拆分为16个8bit的边缘图数据,然后输出给深度图估计模块;
一深度图估计模块,将接收边缘图数据拆分模块按例输出的边缘图数据,根据边缘值即边缘图像数据和约束公式,求得每列线轨迹点的坐标,进而根据线轨迹点坐标进行赋值,求得每列对应的深度值即深度图数据,并逐列输出给深度图数据缓存模块;
其中,约束公式为:
T=argmin{(256–edge(x,y))+2×de(x,y)} (1)
公式(1)中,edge(x,y)表示坐标(x,y)处的边缘值,de(x,y)为第一列起始点坐标与候选像素点坐标的垂直距离,argmin表示求取最小值操作,T表示求得的最小的约束值;
一深度图数据缓存模块,采用16片块RAM对逐列输入的深度图数据进行缓存,每片块RAM缓存一列数据;缓存完16列深度图数据后,同步读取16片块RAM中的数据,并对同地址的数据组合为128bit的边缘图数据后输出给多口内存控制模块;组合输出完毕后,对下16列逐列输入的边缘图数据进行缓存、同步读取以及组合输出;
多口内存控制模块将来自深度图数据缓存模块的128bit的组合深度图数据存储到DDR2存储器中,写入起始地址采用基地址加偏移量的方式进行计算,基地址初始值为地址段D1的起始地址,偏移量从0开始,每存储一次128bit的组合深度图数据,则偏移量增加:80×address_num,address_num为存储一次128bit的组合深度图数据所占地址单元的个数;
完成16行8bit的深度图数据即1行128bit的组合深度图数据的存储后,基地址增加address_num,进行下1行128bit的组合深度图数据的存储,这样不断重复,直到一帧深度图像数据存储完毕,交换基地址为地址段D2的起始地址开始一帧下深度图像数据存储,存储完后,再交换基地址为地址段D1的起始地址,这样不断交替;
在一帧深度图像数据存储完毕后,多口内存控制模块读取DDR2存储器存储的128bit的组合深度图数据给深度图数据拆分模块,读起始地址采用基地址加偏移量的方式进行计算,基地址为地址段D1的起始地址,偏移量从0开始,每读取一次128bit的组合边缘图数据,则偏移量增加address_num;当一帧深度图像数据读取完毕后,将基地址交换为地址段D2的起始地址,这样不断交替;Wi来表示图像的宽度
一深度图数据拆分模块,将Wi/16次读取的128bit的组合深度图数据都进行拆分,其中Wi表示图像的宽度,然后依次输出,得到按行输出的8bit的深度图数据,其中拆分是将128bit的组合深度图数据拆分为16个8bit的深度图数据, 深度图数据拆分模块将每80次读取的128bit的组合深度图数据进行拆分和输出,直到一帧深度图像数据拆分输出完毕,得到一帧深度图,然后进行下一帧组合深度图数据拆分输出,这样不断重复。
本发明的发明目的是这样实现的:
本发明实时高清深度估计系统,为适应摄像机标定参数未知和只需单幅图像进行深度估计的场景,在综合考虑算法效果和硬件实现难易程度的基础上,相对高度的深度估计算方法并对其改进,将需要大量指数运算和除法运算的约束计算公式简化为只包含加法、减法和比较运算的计算形式,有效降低了计算复杂度。在改进算法的基础上,为满足深度估计算法中线轨迹追踪按列处理的要求,提出了一种基于DDR2的行列/列行转换器,逐行/逐列传输的边缘图数据/深度图数据经过行列/列行转换器处理后会逐列/逐行传输,有效解决了深度估计与传输方式的冲突。同时,本发明实时高清深度估计系统充分采用流水线技术和外部DDR2存储器来提高系统的工作频率和降低内存消耗。实验结果表明,本实时高清深度估计系统在200MHz时钟频率下可支持720P视频的实时处理,对室外场景具有较好的估计效果。
附图说明
图1是基于相对高度的深度估计方法流程图;
图2是本发明实时高清深度估计系统一种具体实施方式结构图;
图3是边缘图数据缓存模块存储读取示意图;
图4是DDR2存储器内存分配示意图;
图5是DDR2存储器数据读写调度示意图;
图6是边缘图数据拆分示意图;
图7是具有45条线的初始线轨迹图及初始深度图;
图8是线轨迹追踪示意图;
图9是深度赋值示意图;
图10是分级流水线架构图;
图11是帧级流水线的调度图;
图12是列级流水线的调度图;
图13是边缘图数据写入DDR2存储器的示意图;
图14是边缘图数据在DDR2存储器中存储示意图;
图15是边缘图数据在DDR2存储器中存储示意图;
图16是测试结果。
具体实施方式
下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
图2是本发明实时高清深度估计系统一种具体实施方式结构图。
在本实施例中,如图1所示,本发明实时高清深度估计系统由以下模块构成:边缘检测模块1、边缘图数据缓存模块2、边缘图数据拆分模块3、多口内存管理模块4(MPMC)、深度图估计模块6、深度图数据缓存模块7和深度图数据拆分模块8。整个实时高清深度估计系统的参数由参数设置模块9进行设置。此外还用到了外部高速DDR2存储器5以及各模块内部块RAM。所有模块的时钟频率(clock frequency)均为200MHz。其中边缘图数据缓存模块2、多口内存管理模块4和边缘图数据拆分模3块共同完成了边缘图数据行列转换功能,逐行输入的边缘图数据经过这三个模块的处理后最终会逐列输出。之所以要进行行列转换,是因为边缘图数据是逐行得到的,而后续深度图估计模块是基于列进行处理的,因而需要进行转换。同样,由于深度图是逐列生成的,而显示屏显示或其它应用都是逐行进行的,需要对深度图进行列行转换。深度图数据缓存模块7、多口内存管理模块4和深度图数据拆分模块8共同完成了深度图数据列行转换功能,逐列生成的深度图数据经过这三个模块处理后最终会逐行输出,下面分别介绍各个关键模块。
1、参数设置模块
参数设置模块完成对整个实时高清深度估计系统参数的设置,主要包括图像的分辨率Wi(宽度),Hi(高度)。需要注意的是,在通常情况下,参数的更新不需要关闭深度估计系统,而是由通用异步接收/发送装置(Universal Asynchronous Receiver/Transmitter,UART)把参数传给参数设置模块中的寄存器。
2、边缘检测模块
边缘检测模块位于实时高清深度估计系统的前端,它接收系统外部输入的 彩色图像数据Col。首先将彩色图像数据即彩色值转换为灰度值。其次采用sobel算子计算每个灰度值对应的边缘值,并输出给后续模块。由于sobel算子每次处理时需要用到三行灰度值,因而在边缘检测模块内部采用块RAM即Block RAM对灰度值进行缓存,然后每一个时钟输出三个灰度值进行sobel算子处理。这三个灰度值分别属于灰度图的三行。此外,为硬件实现方便,这里不对图像的边界行(即第一行和最后一行,第一列和最后一列)进行处理。采用sobel算子计算边缘值属于现有技术,在此不再赘述
3、边缘图/深度图数据缓存模块
边缘图数据缓存模块是完成边缘图行列转换功能的第一个模块。它采用16片块RAM对逐行输入的边缘图数据进行缓存,每片块RAM缓存一行数据。缓存完16行后,同步读取16片块RAM中的数据,并对同地址的数据组合后输出给多口内存控制模块,如图3所示。之所以采用16片块RAM,是因为边缘值Edge采用的数据位宽为8bit,而DDR2的写入位宽为128bit,因而需要16片块RAM进行缓存,块RAM的深度和数据位宽分别为1280和8bit。
深度图数据缓存模块是完成深度图列行转换功能的第一个模块,其硬件架构同边缘图数据缓存模块相似。它采用16片块RAM对逐列输入的深度图数据进行缓存,每片Block RAM缓存一列数据。缓存完16列数据后,同步读取16片块RAM,并对同地址的数据组合后输出给多口内存控制模块。不同的是,此时块RAM的深度为720,数据位宽为8bit。
4、多口内存管理模块
多口内存管理模块通过调用Xilinx公司的MIG IP核,来控制DDR2存储器数据的读写。它接收边缘图数据缓存模块输出的组合边缘图数据和深度图数据缓存模块输出的组合深度图数据,将其存储到DDR2存储器中,同时根据时序要求将其读出,输出给后续模块。为满足实时处理的要求,在DDR2存储器内部开辟4段地址E1、E2、D1、D2,每段地址间隔最小为Wi×Hi×8/64=Wi×Hi/8(因为边缘图或深度图采用的数据位宽为8bit,每帧包含的比特数为Wi×Hi×8,而DDR2内部每64bit占用一个地址,因而每帧占用的地址数为Wi×Hi×8/64=Wi×Hi/8),其中Wi,Hi为图像的宽度和高度。边缘图和深度图各占用两段地址,用于进行流水存储,如图4所示,其数据调度如图5所示,其中LE1、 LE2、…代表第一帧组合边缘图数据、第二帧组合边缘图数据、…,LD1、LD2、…代表第一帧组合深度图数据、第二帧组合深度图数据、…。
从图5可以看出,边缘图和深度图在DDR2存储器中的读写既相互独立,又存在一定的内在联系。下面分别对其读写顺序展开描述。
边缘图:
T1时刻:开始往地址段E1中写第一帧组合边缘图数据LE1;
T2时刻:开始往地址段E2中写第二帧组合边缘图数据LE2。同时,读取地址段E1中第一帧组合边缘图数据给边缘图数据拆分模块,然后用于深度估计;
T3时刻:开始往地址段E1中写第三帧组合边缘图数据LE3。同时,读取地址段E2中第二帧组合边缘图数据LE2;
T4时刻:开始往第二帧组合边缘图数据LE2中写第三帧组合边缘图数据LE4。同时,读取地址段E1中第三帧组合边缘图数据LE3,以此循环进行流水存储。
深度图:
T1时刻:由于深度图还没有生成,故不进行操作;
T2时刻:开始往地址段D1中写第一帧组合深度图数据LD1;
T3时刻:开始往地址段D2中写第二帧组合深度图数据LD2。同时,读取地址段D1中第一帧组合深度图数据LD1用于后续处理;
T4时刻:开始往地址段D1中写第三帧组合深度图数据LD3。同时,读取地址段D2中第二帧组合深度图数据LD2;
T5时刻:开始往地址段D2中写第四帧组合深度图数据LD4。同时,读取地址段D1中第三帧组合深度图数据LD3,以此循环进行流水存储。
5、边缘图/深度图数据拆分模块
边缘图数据拆分模块是完成边缘图行列转换功能的最后一个模块。该模块接收多口内存管理模块输出的数据,将不同列的组合边缘图数据进行拆分,然后分别缓存到不同的块RAM中,再在不同时刻将数据读出,从而完成数据的拆分,如图6所示。经过该模块处理后,逐行传输的边缘图数据最终会逐列输出。
深度图数据拆分模块是完成深度图列行转换功能的最后一个模块,其结构和功能与边缘图数据拆分模块基本相似,这里不再重复阐述。不同的是,深度 图数据拆分模块中块RAM的深度和数据位宽分别为1280和8bit。
6、深度图估计模块
深度图估计模块接收边缘图数据拆分模块输出的边缘值,根据边缘值求得每列线轨迹点的坐标,进而根据线轨迹点坐标进行赋值,求得每列对应的深度值。
6.1、线轨迹追踪
线轨迹追踪将对边缘图中的明显边缘从左到右进行追踪,得到水平不交叉的线轨迹图。具体包含2步:1、相关参数的确定;2、每条线的线轨迹追踪器从左到右进行追踪;
6.1.1、相关参数的确定
线轨迹图的线轨迹数n:为保证深度估计的效果,线轨迹数n一般大于10;同时考虑计算量的大小,线轨迹数n一般不大于80;在本实施例中,对于720P的视频,n设定为45,如图7所示;
线轨迹的间距dline:初始线轨迹图中相邻线轨迹的间距均相等,为int(Hi/n),Hi表示图像的高度。对于720P的视频,dline=16;
初始线轨迹的横坐标:由于初始线轨迹图中线轨迹间距都相等,因而第i条线轨迹的横坐标为(Hi–1)–i×dline(0-based),其中i为从底到高逐次标号。注意,这里坐标系为图像像素坐标系;
相邻线轨迹之间的深度值间隔:深度值是按照从下到上深度递减的规律等间隔进行赋值的。相邻线轨迹之间深度值间隔ddepth=int(255/n),如图所示。对于第i条和第i+1条线轨迹构成的区间,需赋值255–i×ddepth。需要注意的是,两条线轨迹形成的区间是开区间,即第i+1条线轨迹需赋值255–(i+1)×ddepth
在线轨迹追踪时,每一个初始坐标点都根据边缘值和相应的约束条件计算其在下一列上的对应匹配点坐标。45个坐标点的求取操作是并行进行的。
6.1.2、每条线的线轨迹追踪器从左到右进行追踪
每条线的线轨迹追踪器从第一列初始线轨迹点开始,根据明显边缘及约束条件从左到右进行追踪,逐列求取初始线轨迹点在下一列上的对应匹配点。为便于硬件实现,本文对原算法中约束条件做如下修改:
原算法第一个约束条件的计算公式为:
E1(x,y)=exp(-edge(x,y)/a), (2)
其中,E1(x,y)表示计算结果,edge(x,y)表示坐标(x,y)处的边缘值,a表示整帧图像的平均边缘值。由上述公式可以看出,当edge(x,y)值为0时,E1(x,y)取得最大值1,其余时刻,E1(x,y)均小于1,取值范围为(0,1]。由于硬件设计时边缘值采用8bit的数据,因而,我们可以用如下公式来近似代替。
E1(x,y)=(256-edge(x,y))/256, (3)
公式(3)的取值范围和变化规律和公式(2)相近,但在硬件上比公式(2)更容易实现。
原算法第二、三个约束条件的公式和约束总公式分别为:
E2(x,y)=ds(x,y)/b (4)
E3(x,y)=de(x,y)/c (5)
T=argmin{αE1(x,y)+βE2(x,y)+γE3(x,y)} (6)
其中,ds(x,y)为当前列线轨迹上的像素点与候选像素点的垂直距离,de(x,y)为第一列起始点坐标与候选像素点坐标的垂直距离。根据参考文献可得,α,β,γ取值分别为4,3,3,b=c=Hi/4,其中Hi为图像的高度。对720p而言,Hi=720,则b=c=180。则公式(6)可演变为
T=argmin{4×(256–edge(x,y))/256 (7)
+3×ds(x,y)/180+3×de(x,y)/180}
公式(7)中三个约束条件的分母很相近,因而去除分母可得到近似的公式为:
T=argmin{(256–edge(x,y))+ds(x,y)+de(x,y)} (8)
舍弃第二个约束条件ds(x,y),将第三个约束条件的权重增大一倍,即可得公式
T=argmin{(256–edge(x,y))+2×de(x,y)} (9)
同时设定阈值区间,对结果进行阈值判定。如果结果在阈值区间内,则将具有最小T值的像素点坐标,否则,将初始像素点的坐标赋给输出。公式(9)即为在实际工程中针对720p视频所采用的公式。
图8简要描述了线轨迹追踪的工作流程,其中黑色点为同一线轨迹上的坐标点,黑色五角星表示当前坐标点。第一列中黑点表示该线轨迹的初始坐标点,黑色五角星为该点在第二列上的匹配点。线轨迹追踪的原理可描述为,以第二列黑色五角星为当前坐标点,与第三列所有像素点进行约束条件的计算,找出约束值y最小的像素点,即为黑色五角星在第三列上的匹配点,如第三列黑色圆点所示。进而以该点为当前坐标点,在第四列上寻求匹配点,以此类推,直到遍历完毕。
线轨迹追踪属于现有技术,本发明对约束公式进行了改进,将需要大量指数运算和除法运算的约束计算公式简化为只包含加法、减法和比较运算的计算形式,有效降低了计算复杂度。
6.2、深度赋值
深度赋值需满足如下准则:
深度赋值必须严格遵守从下到上深度值等间隔递减的规律。图9描述了三条相邻的线轨迹,其标号分别为i,i+1,i+2。则对第i条线轨迹与第i+1线轨迹之间的区域,赋值为255–i×ddepth。第i+1条线轨迹与第i+2线轨迹之间的区域赋值为255–(i+1)×ddepth。其中,ddepth为相邻线轨迹之间深度值间隔,其值为int(255/n)。需要注意的是,在这种赋值方式下,最上面的那条线轨迹对应的深度值总是大于0。
求得坐标点后,需要根据坐标点进行深度赋值。深度赋值是通过控制BlockRAM的写操作来完成的。通过判断Block RAM的写地址属于哪个坐标区间而对Block RAM写入该区间对应的深度值。赋值完成后读取该Block RAM,即可逐列生成深度图数据。
7、分级流水线
为提高系统的时钟频率,满足实时处理的要求,在整个深度估计系统中充分采用了流水线(pipelining)技术,包括帧级流水线(frame-level pipelining),行级流水线(row-level pipelining)和列级流水线(coloum-level pipelining),如图10所示。下面详细介绍各级流水线的调度(schedule)。
7.1、帧级流水线
帧级流水线包含三级(stage),其中第一级包括边缘检测和边缘图数据缓存模 块,第二级包括边缘图数据拆分模块、深度图估计模块和深度图数据缓存模块,第三级包括深度图数据拆分模块。帧级流水线的调度如图11所示,当第一级处理第i帧(Frame)图像时,第二级处理第i-1帧,而第三级处理第i–2帧,从而构成了三级流水线。在这三级中产生的边缘图和深度图均通过MPMC模块存储到外部存储器DDR2中,而不是存储在内部存储器中,从而减少了内存的消耗。
7.2、行级流水线/列级流水线
在帧级流水线第一级中,每个模块都是以行为单位进行处理的,因而可以采用行级流水线技术来提高系统的时钟频率。行级流水线的调度如图12所示。可以看出,该行级流水线可分为两部分。第一部分为边缘检测模块,用于求取当前帧的边缘值,包含2级。当第一级处理第i+1行时,第二级在处理第i行。第二部分为边缘图数据缓存模块,用于对边缘值进行缓存和重组,包含16级。这是因为边缘图数据缓存模块采用16片Block RAM对数据进行存储,等存储完16行后再同步读出。如图12所示,在WRITE级时,边缘图数据缓存模块一直在对逐行输入的数据进行存储,等存满16行后在READ时再同步输出,因而包含16级。这里,每片块RAM的大小均被设置为1280×8-bit。
帧级流水线第二级主要包含深度图估计模块和深度图数据缓存模块。由于这两个模块都是逐列进行操作的,因而可以采用列级流水线技术。列级流水线技术和上述行级流水线技术在结构和功能上基本相同。该列级流水线也可分别两部分。首先,在第一部分通过深度图估计模块估计出深度图;其次,逐列生成的深度图数据在Write时被缓存到16片Block RAM中,在READ级时将数据同时读出并重组。这里,Block RAM的深度和数据位宽分别为720和8bit。
8、行列转换/列行转换
8.1、行列转换
行列转换主要完成边缘图的行列转置功能。之所以要进行行列转换,是因为经过边缘检测后,边缘图是逐行得到的。而后续深度图估计子模块是逐列对边缘图进行处理的。如果按普通存储方式将边缘图数据逐行缓存到DDR2后,再按列将其读出,则会存在以下问题:
对于720p视频,每行边缘图数据占据的地址数为1280/16×2=160(每16个边缘值数据构成128bit写给DDR2,每个128bit占用2个地址)。则从DDR2逐列读 取数据时,每读取一个数据,DDR2读地址需增加160。当地址累加超过DDR2行地址上限1024时,DDR2会执行“关闭当前行”操作,消耗9个时钟周期,然后才会开始下一行数据的读取。因而,完整读出一列数据需要720/(1024/160)×9=1012个时钟周期。时钟消耗比较多且地址控制非常复杂;
由于DDR2读取数据时是按burst进行读取,则逐列读取边缘图数据时,每读取一个数据,DDR2会将包含该数据的一个burst读出,即4个128bit数据,64个数据。数据的利用率很低。
基于上述问题,本系统提出了一种对边缘图进行行列转换的方法,包括边缘图数据缓存模块,MPMC和边缘图数据拆分模块。边缘图数据缓存模块和数据拆分模块在第3、5节中已详细阐述,本节主要对边缘图在DDR2中的写入和读出进行论述。
8.1.1、数据写入
如图2所示,边缘图数据经过边缘图数据缓存模块处理后会按列将数据组合成128bit输给多口内存管理模块。我们希望不同列的数据能存储到不同的地址区间内,这样DDR2存储器读取数据时就可以逐地址进行读取,而非大的跳跃。然而,组合边缘图数据/组合深度图数据并不是逐个写到DDR2存储器的,而是逐个burst写入的。每个burst包含4个128bit数据,写完一个burst后才会更换新的写入地址。因此,其写入方式如图13所示,采用4列捆绑存储的方式,每从块RAM中读取4列对应的数据组合成burst写入DDR2存储器后,将写入地址更新,存储下4列对应的数据。
基于上述存储机制,边缘图在DDR2中的存储方式可如图14所示,其中A0,A1等表示每段地址的基地址,0,1等仍表示数据所在的列数。其写入方式可描述为:
1)、接收第一个burst数据,将其存储在以A0为起始地址的地址区间内,1个burst占用8个地址。存储完后,将起始地址更新至A1。由于每段地址区间内存储4列数据,因此每段地址区间占用的地址数为720×4/16×2=360。故A1=A0+360;
2)、接收下一个burst数据,将其存储在以A1为起始地址的地址区间内,也占用8个地址。同时,将起始地址更新为A2;
3)、依次类推,每存储完一个burst,将起始地址加360进行更新,直到BlockRAM中所有数据存储完毕。这样,每个burst会被存到不同的地址区间内,共包含320个地址区间(1280/4=320);
4)、将起始地址A0更新为A0+8。等下一个burst到来,重复步骤0~0,直到一帧图像存储完毕,将起始地址重新复位为A0。
8.1.2、数据读出
由图14可以看出,对于720p视频,边缘图在DDR2内部存储在320个地址区间中(A0~A319),每个地址区间包含4列数据。这样,在边缘图数据拆分模块/深度图数据拆分模块中,所述的拆分还包括将4个128bit数据拆分为4列/行的组合边缘图数据/深度图数据。
因而,在读出时,一次读一段地址区间,即一次将4列数据全部读出。这样比起普通按行存储按列读出的好处在于DDR2的读地址是逐列累加的,而不是产生大的跳跃,因而DDR2就不会频繁的产生“关闭当前行”命令。这里需要注意的是,由于一次读出四列数据,后续深度图估计模块进行处理时需要消耗比较长的时间,因而在两次读操作之间要间隔比较长的时间,否则深度图估计模块还没处理完上4列数据,新的数据又传输进来,造成数据丢失。
8.2、列行转换
列行转换主要完成深度图的列行转置功能。之所以要进行列行转换,是因为深度图是逐列生成的,而后续上屏显示或进行其它应用时却是逐行处理的的,因而需要进行列行转换。列行转换的基本原理和行列转换相同,这里只阐述与行列转换不同的地方。
深度图在DDR2中的存储方式可如图15所示,其中B0,B1等表示每段地址的基地址,0、1、2等表示当前数据所在的行数。与行列转换不同的是,由于每段地址区间内包含4行数据,其占用的地址数为1280/16×4×2=640,因此B1=B0+640。在读出时,将四行数据一次读出。经深度图数据拆分模块处理后,逐列生成的深度图就可以逐行输出给后续模块。
9、实验结果
9.1资源消耗
本系统以720p视频为例,采用Verilog HDL语言在Xilinx xc5vlx330t开发板上 进行了电路的设计与实现。之所以选择该开发板,是由于本系统在进行行列转换和列行转换时需消耗比较多的存储资源,而该开发板在嵌有DDR2颗粒的同时,内部Block RAM存储资源也非常丰富,共有11Mbit,满足系统需求。各模块的Block RAM的消耗如表1所示。此外,该开发板还带有HDMI输入输出接口,适合高清乃至全高清视频的处理。
表1
本系统通过DVD将720p高清视频源输入,经过FPGA开发板处理后在显示屏上实时显示深度图像。实验结果表明,在200MHz时钟频率下,该系统支持720P视频的实时处理,深度图可实时显示在显示屏上,且系统内部存储资源消耗为44.8Kbytes。系统其它资源消耗参见表2。此外,本系统的FPGA开发全部采用硬件描述语言Verilog HDL来描述整个深度估计系统,这样不仅增加了硬件设计的灵活性和可移植性,也便于将来做成ASIC进入产业化应用,具有广阔的应用前景。
表2
9.2、系统仿真
本系统采用Modelsim SE6.5进行测试。测试序列和结果如图16所示。其中(a)输入彩色图;(b)软件估计的深度图;(c)本系统估计的深度图
从图16可以看出,本系统生成的深度图和采用原算法进行C语言仿真生成的深度图相差不大,因而本系统是完全可行的。对室外场景的视频序列,完全可以采用本系统进行深度图估计。而对于其它场景序列,该系统处理的效果还有待改善。
10、总结
深度估计技术能根据单目或多目彩色图估计出深度图像,有效解决了直接拍摄深度图引起的价格昂贵、设备复杂、制作周期长等问题。正因如此,深度估计技术得到广泛研究与发展。本文首先研究了基于相对高度的深度估计算法,并对其改进,将需要大量幂运算和除法运算的约束条件改为只包含加法、减法和比较运算的形式,有效降低了计算复杂度。基于改进后的深度估计算法,本文提出了一种适用于720P视频的深度估计硬件系统架构。在该架构中,充分采用了流水线技术和外部存储器DDR2来提高系统的工作频率和降低内存消耗。同时,考虑到该深度估计算法逐列进行操作,本架构设计了行列转换和列行转换结构,有效的解决了该冲突。实验结果表明,该系统在200MHz工作频率下,能实时生成720p视频对应的深度图,且内部资源消耗为44.8kBytes。同时,本系统均采用硬件描述语言Verilog HDL来描述整个系统,这样不仅增加了硬件设计的灵活性和可移植性,也便于将来做成ASIC进入产业化应用,具有广阔的应用前景。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
Claims (1)
1.一种实时高清深度估计系统,其特征在于,包括:
一边缘检测模块,用于接收输入的分辨率为1280×720p彩色图像数据,然后将彩色图像数据即彩色值转换为灰度值;内部的块RAM对转换得到连续三行灰度值进行缓存,每一个时钟输出三个灰度值进行sobel算子处理,计算每个灰度值对应的边缘值即边缘图数据并按行输出给边缘图数据缓存模块,其中边缘图数据的位宽为8bit;
一边缘图数据缓存模块,采用16片块RAM对逐行输入的边缘图数据进行缓存,每片块RAM缓存一行数据;缓存完16行边缘图数据后,同步读取16片块RAM中的数据,并对同地址的数据组合为128bit的边缘图数据后输出给多口内存控制模块;组合输出完毕后,对下16行逐行输入的边缘图数据进行缓存、同步读取以及组合输出;
一DDR2存储器,内部开辟4段地址E1、E2、D1、D2;其中地址段E1、E2用于交替存储和读取一帧边缘图数据即向地址段E1存储边缘图数据时,从地址段E2读取边缘图数据,一帧边缘图像数据存储和读取完毕后,交换地址段E2用于存储,地址段E1用于读取,地址段D1、D2用于交替存储和读取一帧深度图数据即向地址段D1存储深度图数据时,从地址段D2读取深度图数据,一帧深度图像数据存储和读取完毕后,交换地址段D2用于存储,地址段D1用于读取;
一多口内存控制模块,将来自边缘图数据缓存模块的128bit的组合边缘图数据存储到DDR2存储器中,写入起始地址采用基地址加偏移量的方式进行计算,基地址初始值为地址段E1的起始地址,偏移量从0开始,每存储一次128bit的组合边缘图数据,则偏移量增加:45×address_num,address_num为存储一次128bit的组合边缘图数据所占地址单元的个数;
完成16行8bit的边缘图数据即1行128bit的组合边缘图数据的存储后,基地址增加address_num,进行下1行128bit的组合边缘图数据的存储,这样不断重复,直到一帧边缘图像数据存储完毕,交换基地址为地址段E2的起始地址开始一帧下边缘图像数据存储,存储完后,再交换基地址为地址段E1的起始地址,这样不断交替;
在一帧边缘图像数据存储完毕后,多口内存控制模块读取DDR2存储器存储的128bit的组合边缘图数据给边缘图数据拆分模块,读起始地址采用基地址加偏移量的方式进行计算,基地址为地址段E1的起始地址,偏移量从0开始,每读取一次128bit的组合边缘图数据,则偏移量增加address_num;当一帧边缘图像数据读取完毕后,将基地址交换为地址段E2的起始地址,这样不断交替;
一边缘图数据拆分模块,将45次读取的128bit的组合边缘图数据都进行拆分,然后依次输出,得到按列输出的8bit的边缘图数据,其中拆分是将128bit的组合边缘图数据拆分为16个8bit的边缘图数据,然后输出给深度图估计模块;
一深度图估计模块,将接收边缘图数据拆分模块按列输出的边缘图数据,根据边缘值即边缘图像数据和约束公式,求得每列线轨迹点的坐标,进而根据线轨迹点坐标进行赋值,求得每列对应的深度值即深度图数据,并逐列输出给深度图数据缓存模块;
其中,约束公式为:
T=argmin{(256–edge(x,y))+2×de(x,y)} (1)
公式(1)中,edge(x,y)表示坐标(x,y)处的边缘值,de(x,y)为第一列起始点坐标与候选像素点坐标的垂直距离,argmin表示求取最小值操作,T表示求得的最小的约束值;
一深度图数据缓存模块,采用16片块RAM对逐列输入的深度图数据进行缓存,每片块RAM缓存一列数据;缓存完16列深度图数据后,同步读取16片块RAM中的数据,并对同地址的数据组合为128bit的边缘图数据后输出给多口内存控制模块;组合输出完毕后,对下16列逐列输入的边缘图数据进行缓存、同步读取以及组合输出;
多口内存控制模块将来自深度图数据缓存模块的128bit的组合深度图数据存储到DDR2存储器中,写入起始地址采用基地址加偏移量的方式进行计算,基地址初始值为地址段D1的起始地址,偏移量从0开始,每存储一次128bit的组合深度图数据,则偏移量增加:80×address_num,address_num为存储一次128bit的组合深度图数据所占地址单元的个数;
完成16行8bit的深度图数据即1行128bit的组合深度图数据的存储后,基地址增加address_num,进行下1行128bit的组合深度图数据的存储,这样不断重复,直到一帧深度图像数据存储完毕,交换基地址为地址段D2的起始地址开始一帧下深度图像数据存储,存储完后,再交换基地址为地址段D1的起始地址,这样不断交替;
在一帧深度图像数据存储完毕后,多口内存控制模块读取DDR2存储器存储的128bit的组合深度图数据给深度图数据拆分模块,读起始地址采用基地址加偏移量的方式进行计算,基地址为地址段D1的起始地址,偏移量从0开始,每读取一次128bit的组合边缘图数据,则偏移量增加address_num;当一帧深度图像数据读取完毕后,将基地址交换为地址段D2的起始地址,这样不断交替;
一深度图数据拆分模块,将Wi/16次读取的128bit的组合深度图数据都进行拆分,其中Wi表示图像的宽度,然后依次输出,得到按行输出的8bit的深度图数据,其中拆分是将128bit的组合深度图数据拆分为16个8bit的深度图数据,深度图数据拆分模块将每80次读取的128bit的组合深度图数据进行拆分和输出,直到一帧深度图像数据拆分输出完毕,得到一帧深度图,然后进行下一帧组合深度图数据拆分输出,这样不断重复;
所述组合边缘图数据/组合深度图数据并不是逐个写到DDR2存储器的,而是逐个burst写入的,每个burst包含4个128bit数据,写完一个burst后才会更换新的写入地址;
所述的拆分还包括将4个128bit数据拆分为4列/行的组合边缘图数据/深度图数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310173915.8A CN103281548B (zh) | 2013-05-13 | 2013-05-13 | 一种实时高清深度估计系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310173915.8A CN103281548B (zh) | 2013-05-13 | 2013-05-13 | 一种实时高清深度估计系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103281548A CN103281548A (zh) | 2013-09-04 |
CN103281548B true CN103281548B (zh) | 2015-04-08 |
Family
ID=49063974
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310173915.8A Expired - Fee Related CN103281548B (zh) | 2013-05-13 | 2013-05-13 | 一种实时高清深度估计系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103281548B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103903256B (zh) * | 2013-09-22 | 2017-01-25 | 四川虹微技术有限公司 | 一种基于相对高度深度线索的深度估计方法 |
CN103957402B (zh) * | 2014-05-07 | 2015-10-21 | 四川虹微技术有限公司 | 一种实时全高清2d转3d系统行读写时序设计方法 |
CN109977740B (zh) * | 2017-12-28 | 2023-02-03 | 沈阳新松机器人自动化股份有限公司 | 一种基于深度图的手部跟踪方法 |
CN108765482B (zh) * | 2018-05-31 | 2021-07-13 | 长春博立电子科技有限公司 | 一种基于硬件加速的低功耗实时双目摄像头及使用方法 |
CN111161122B (zh) * | 2018-11-08 | 2023-12-01 | 北京伟景智能科技有限公司 | 一种旋转90度成像的双目立体视觉成像方法及系统 |
CN109845282B (zh) * | 2019-01-04 | 2022-02-11 | 京东方科技集团股份有限公司 | 图像数据处理方法及传输装置、图像显示方法及存储介质 |
CN112446946A (zh) * | 2019-08-28 | 2021-03-05 | 深圳市光鉴科技有限公司 | 基于稀疏深度与边界的深度重建方法、系统、设备及介质 |
TWI765446B (zh) * | 2020-12-03 | 2022-05-21 | 新加坡商瑞昱新加坡有限公司 | 管線式資料傳輸方法及資料管線裝置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102903098A (zh) * | 2012-08-28 | 2013-01-30 | 四川虹微技术有限公司 | 一种基于图像清晰度差异的深度估计方法 |
CN102970548A (zh) * | 2012-11-27 | 2013-03-13 | 西安交通大学 | 一种图像深度感知装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2422739B (en) * | 2005-01-31 | 2010-07-14 | Hewlett Packard Development Co | Image processing method and apparatus |
EP1917642A2 (en) * | 2005-08-17 | 2008-05-07 | Nxp B.V. | Video processing method and device for depth extraction |
-
2013
- 2013-05-13 CN CN201310173915.8A patent/CN103281548B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102903098A (zh) * | 2012-08-28 | 2013-01-30 | 四川虹微技术有限公司 | 一种基于图像清晰度差异的深度估计方法 |
CN102970548A (zh) * | 2012-11-27 | 2013-03-13 | 西安交通大学 | 一种图像深度感知装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103281548A (zh) | 2013-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103281548B (zh) | 一种实时高清深度估计系统 | |
CN105872432B (zh) | 快速自适应帧率变换的装置与方法 | |
CN102741879B (zh) | 由单眼图像产生深度图的方法及其系统 | |
CN106934758B (zh) | 一种基于fpga的立体图像视频实时融合方法及系统 | |
CN102088589B (zh) | 基于双向的局部和全局运动估计的帧率转换 | |
CN105144234A (zh) | 使用与示例相似图像相关联的示例近似深度映射图对输入图像生成深度映射图 | |
CN102376293A (zh) | 一种基于fpga的图像拼接处理器及图像拼接方法 | |
CN101616249B (zh) | 基于双三次插值的视频缩放装置 | |
KR20150009128A (ko) | 영상 처리 장치, 영상 처리 시스템 및 영상 처리 방법 | |
CN108446089B (zh) | 数据的显示方法、装置及显示器 | |
CN103237157B (zh) | 一种实时高清视频图像转置器 | |
CN103440664A (zh) | 一种生成高分辨率深度图的方法、系统及计算设备 | |
CN104717485A (zh) | 一种基于fpga的vga接口裸眼3d显示系统 | |
Kowalczyk et al. | Real-time implementation of contextual image processing operations for 4K video stream in Zynq ultrascale+ MPSoC | |
CN101729919A (zh) | 基于fpga的全自动平面视频转立体视频系统 | |
CN106293578A (zh) | 显卡、图像显示装置、图像显示方法和系统 | |
CN100541538C (zh) | 一种显示动画效果的方法 | |
CN104159098B (zh) | 一种视频的时域一致性半透明边缘提取方法 | |
Min et al. | Dadu-eye: A 5.3 TOPS/W, 30 fps/1080p high accuracy stereo vision accelerator | |
Akin et al. | Dynamically adaptive real-time disparity estimation hardware using iterative refinement | |
CN105160622B (zh) | 基于fpga的图像超分辨率的实现方法 | |
Dai et al. | Unsupervised learning of depth estimation based on attention model and global pose optimization | |
CN103957402B (zh) | 一种实时全高清2d转3d系统行读写时序设计方法 | |
US11830114B2 (en) | Reconfigurable hardware acceleration method and system for gaussian pyramid construction | |
CN102833541B (zh) | 用于mpeg-2视频解码的sdram控制系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150408 |