CN110191330A - 基于双目视觉绿色作物视频流的深度图fpga实现方法与系统 - Google Patents
基于双目视觉绿色作物视频流的深度图fpga实现方法与系统 Download PDFInfo
- Publication number
- CN110191330A CN110191330A CN201910511012.3A CN201910511012A CN110191330A CN 110191330 A CN110191330 A CN 110191330A CN 201910511012 A CN201910511012 A CN 201910511012A CN 110191330 A CN110191330 A CN 110191330A
- Authority
- CN
- China
- Prior art keywords
- green
- image
- value
- fpga
- green crop
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/50—Depth or shape recovery
- G06T7/55—Depth or shape recovery from multiple images
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N13/00—Stereoscopic video systems; Multi-view video systems; Details thereof
- H04N13/10—Processing, recording or transmission of stereoscopic or multi-view image signals
- H04N13/106—Processing image signals
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N13/00—Stereoscopic video systems; Multi-view video systems; Details thereof
- H04N13/20—Image signal generators
- H04N13/204—Image signal generators using stereoscopic image cameras
- H04N13/239—Image signal generators using stereoscopic image cameras using two 2D image sensors having a relative position equal to or related to the interocular distance
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N13/00—Stereoscopic video systems; Multi-view video systems; Details thereof
- H04N13/20—Image signal generators
- H04N13/271—Image signal generators wherein the generated image signals comprise depth maps or disparity maps
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10016—Video; Image sequence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10024—Color image
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20228—Disparity calculation for image-based rendering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N13/00—Stereoscopic video systems; Multi-view video systems; Details thereof
- H04N2013/0074—Stereoscopic image analysis
- H04N2013/0081—Depth or disparity estimation from stereoscopic image signals
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Processing (AREA)
Abstract
本发明属于视觉技术在绿色作物区上应用技术领域,公开了一种基于双目视觉绿色作物视频流的深度图FPGA实现方法与系统,在FPGA端利用超绿特征提取方法对绿色作物区域的图像进行提取;对校正后的绿色作物区域图像进行截断值的Sobel变换、基于SAD的立体匹配,获取绿色作物区域图像视差图;绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图。本发明针对田间实际应用中的实时性和准确性需求,利用FPGA技术作为计算平台,综合考虑软件算法和硬件结构,在FPGA中实现了BM的立体匹配算法和绿色作物区域提取算法。满足了田间环境对实时性的需求。
Description
技术领域
本发明属于视觉技术在绿色作物区上应用技术领域,尤其涉及一种基于双目视觉绿色作物视频流的深度图FPGA实现方法与系统。
背景技术
目前,最接近的现有技术:
人类认识世界的主要信息来源就是视觉,有数据表明,人类通过视觉获得的信息总量占人类获取信息总量的80%。试想,人们在观察周围环境时,可以观察到物体颜色、大小和三维信息,甚至可能通过表情猜出其感情状态,这些信息对人们的行为起着指导性作用。为了让机器也可以像人类一样拥有视觉能力,从而应用到各种各样的实际应用之中,计算机视觉技术应运而生。
在计算机视觉领域,采集图像的主要工具是摄像头。通过摄像头可以捕捉物体反射、散射和折射的光线,并将其转换为图像。但困难在于从采集到的一幅或多幅图像中得到所反映的世界,例如距离、色彩分布和形状等信息。
计算机视觉的一个重要研究领域是立体视觉。人眼在看物体时会有远近的概念,这是由于人类的两个眼睛在观察同一物体时,该物体在两眼的成像位置不同,经过大脑处理后,便可以感知到物体的三维信息。根据这个原理,在立体视觉中使用两个或多个摄像头对同一物体拍照,通过处理便可得到物体距摄像头的横向距离,该距离被称为深度,对应的图像被称为深度图。
在立体匹配中大多使用双目摄像头,即两个有固定间距的摄像头,本发明的设计也基于双目摄像头。计算深度图时可以等价为计算视差,视差即现实世界中的一点在两幅图像中投影位置的差距。在计算视差的过程中最重要的一步是立体匹配,立体匹配不仅要求准确度高,还对速度有着严格的要求。但现有的匹配算法大多运算较慢,无法达到实时处理。为了改善该问题,使用GPU或FPGA对立体匹配算法进行加速是一个热门的研究方向。
FPGA(Field Programmable Gate Array)技术即现场可编程门阵列技术,它是在PAL、GAL、CPLD 等可编程器件的基础上发展出的一种技术。FPGA一般来说比专用集成电路(Application Specific Integrated Circuit,ASIC)的速度要慢,并且消耗较多的电能,但FPGA造价较低且更为灵活,ASIC一旦设计定型将无法更改,FPGA可以根据需求的改进而不断更新。FPGA相比GPU来说,前者更能发挥并行计算的优势,并且GPU也无法像FPGA一样可以灵活的配置硬件结构,另外,FPGA在运行相同的算法会有更低的功耗。
1963年Roberts开创立体视觉以来,立体视觉技术日益强大。1976年,Marr等人开始通过图像之间的信息关联提取深度信息,提出完整的计算机视觉理论,随后越来越多的人开始着手研究立体视觉。1982 年,Barnard与Fischler指出立体视觉中的核心部分为立体匹配,并总结了一些以前的立体匹配算法。立体匹配不仅受到外界中光照变化和噪声干扰等因素的影响,而且还由于不同视角的图像中存在被遮挡的区域导致误匹配的产生。2002年,Scharstein与Szeliski将立体匹配算法分为局部匹配算法与全局匹配算法,并建立了Middlebury立体匹配算法性能评估的平台,该平台中的数据集被大量研究所使用,大量优秀算法都可以在该平台中被看到。
局部匹配算法是按照某种规则确定图像中所有的局部区域,并使每个局部区域保持最优匹配。现有技术在FPGA中实现了Census立体匹配算法,在Middlebury平台中平均误匹配率为13.6,速度达到了640×360 30FPS。现有技术采用AD-Census方法与基于十字支持臂的可变支持域结构,在640×480的分辨率下最快达到40.6FPS的速度。现有技术针对自适应权重算法的不足进行了改进,引入基于引导滤波的权重计算方法,通过积分图像方法有效降低了计算复杂度。现有技术在FPGA中提到的基于十字交叉臂的代价聚合方法,并在视差图中沿不同方向的平滑度分别进行半全局优化,在640×480的分辨率下最快达到244.1FPS 的速度,在1024×768分辨率下最快达到了63.58FPS的速度。文献[13]通过改进Census算法来减少噪声对匹配结果的影响,同时还使用了自适应窗口大小的方法来提高匹配精度,在FPGA中达到1920×1080 60FPS 的速度。
现有技术提出一种基于改进初始代价和多维权重的树结构匹配算法,在Middlebury平台中平均达到了4.92的误匹配率,在主频为3.4GHz的CPU中达到1.468秒的速度,不能达到实时性的要求。
现有技术通过结合多个匹配代价提出了一种立体匹配方法,该方法通过在代价聚合步骤中确认可信代价值来估计最优视差,在Middlebury平台中的Tsukuba图集达到了2.2的误匹配率。文献[18]在FPGA中实现了ACT(Adaptive Census Transform)算法,并实现了两种设计架构,分别达到了640×480 81FPS与640×480 101FPS的速度。使用FPGA实现了SGM(SEMI-Global Matching)算法,在分辨率为1024×768 时达到了127FPS的速度。
全局匹配算法是通过建立某种能量函数使全图的匹配代价最低,此时的视差图为最优视差图。现有技术提出了一种基于点对点的动态规划算法,有效改善了条纹现象,但极线间的连续性仍然不佳。由于全局匹配算法运算量太大,所以在各个平台中研究全局匹配算法加速的学者并不多。
国内外学者对立体匹配算法的研究大多都集中在局部匹配算法,着重于提高匹配的精度和运算速度上。但较少有人基于高分辨率视频流进行处理,并且针对田间自动化作业中视频流图像处理的相关研究也较少。
立体视觉是计算机视觉领域的重要研究课题之一。立体视觉的理论基础是对人眼的一个仿生,通过将两台完全相同的摄像头固定在一起,并让它们之间保持一定距离,然后,对同一场景进行拍摄,最后,利用双目立体匹配算法计算出图像的视差值,并结合两个摄像头标定所获得的内外参数和摄像头间的距离,即可提取实际场景的三维信息与真实形状。
相比于其他的三维信息获取方法,立体视觉具有设备简单、功耗较低与无损测量的优点,因而在机器人自主导航、医学、虚拟现实与场景重建等领域都有重要的应用价值。然而,目前立体视觉技术在实际系统中应用较少,原因是存在实时性和准确性难以同时满足的问题,而通用的处理器面对该问题就会显得相当乏力,并且鲜有基于视频流加速的实现,在立体视觉领域中,立体匹配是最重要的研究内容,但由于其计算量大,普通PC在实际应用中无法达到实际需求。而利用基于FPGA技术的视频流加速的实现更少。
综上所述,现有技术存在的问题是:
(1)现有技术中,针对田间实际应用中的实时性和准确性没有利用FPGA技术作为计算平台,没有综合考虑软件算法和硬件结构,实现绿色作物区域提取高纹理图像,使田间环境实时性监测效果差。
(2)目前工业领域,也有一些采用FPGA实现视频流加速的文献,但都不是针对农业领域图像视频处理的。难度在于对算法进行分步分解和优化,以及对数据传输、存储进行合理设计,以在FPGA上实现流水线和并行处理
解决上述技术问题的难度:
现有技术对基于FPGA的并行和流水线处理中如何进行合理分解、结构化及优化很难解决。
在FPGA的体系结构上,要合理设计数据传输、存储、转发及计算单元,以节约资源,提高数据处理的效率很难达到。
解决上述技术问题的意义:
可提高系统算法的实时性,能实现复杂算法,进一步提高系统算法的准确性、适用性及鲁棒性。
发明内容
针对现有技术存在的问题,本发明提供了一种基于双目视觉绿色作物视频流的深度图FPGA实现方法与系统。本发明通过处理视频流来对绿色作物进行立体匹配。将绿色作物的深度信息提取出来。通过基于FPGA架构可以实时处理1920×1080 30FPS的视频流数据以满足连续的田间作业。
现有技术中,单个通用处理器不能做并行处理,而本发明FPGA可做并行处理,且通过硬件实现算法,故实时性可极大地被提高。
本发明是这样实现的,一种基于双目视觉绿色作物视频流的深度图FPGA实现方法,所述基于双目视觉绿色作物视频流的深度图FPGA实现方法包括:
在FPGA端利用超绿特征提取方法对绿色作物区域的图像进行提取。
对校正后的绿色作物区域图像进行截断值的Sobel变换、基于SAD的立体匹配,获取绿色作物区域图像视差图。
绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图。
进一步,在FPGA端利用超绿特征提取方法对绿色作物区域的图像进行提取前,需进行立体匹配图像预处理,具体包括:
第一步,采集双目摄像头拍摄的图像。
第二步,将原图进行矫正与校正。
第三步,将第二步的彩色图片转换为灰度图。
进一步,在FPGA端利用超绿特征提取方法对绿色作物区域的图像进行提取的方法包括:
用2倍的绿色灰度值减去红色灰度值再减去蓝色灰度值,计算如式(2-1)所示。超绿特征提取完毕后,下一步进行的是阈值分割,阈值的计算过程如式(2-2)所示。其中,Th为阈值,Gav与Gmax分别为超绿特征像素的平均值与最大值,f为权重因子。当f取值为-0.5-0.5时,一般可以得到较好的分割效果[28]。最后将阈值与超绿特征值进行比较,超绿特征大于等于阈值的是绿色区域,否则为非绿色区域。
进一步,对校正后的绿色作物区域图像进行截断值的Sobel变换包括:
带截断值的Sobel变换:Sobel算子,又名索伯算子,是图像处理中重要的算子之一,在计算机视觉领域中常被用来做边缘检测。Sobel算子是在Prewitt算子的基础上发展而来的,它们都是利用一阶导数进行边缘的提取,可以较好的减少噪声的影响。与Prewitt算子不同,Sobel算子求的是亮度函数的近似梯度值,同时在不同的位置采用的权重不同,因此Sobel算子的边缘检测效果更好。
本发明中使用的是3阶的Sobel算子,该算子如下所示:
带截断值的Sobel变换第一步计算时与正常的Sobel计算方式相同,都是与原图像进行卷积操作,即在原图像中从左到右,从上到下依次移动卷积核(即前述的Sobel算子),并与原图像对应位置相乘,然后将九个位置的结果相加作为该点的像素值。经过上述计算后像素值可能小于0或大于255,所以会在原Sobel 变换的基础上进行截断处理。首先设定一个阈值(记为T),当变换后的值小于-T时记该值为-T,当变换后的值大于T时,记该值为T,当处于[-T,T]之间时,保留原来的值,这样得到的所有值都将变为区间[-T,T] 内的值。最后将[-T,T]区间的值,映射到[0,2T]内,这样原来变换后的值将都在[0,2T]内。
进一步,基于SAD的立体匹配,获取绿色作物区域图像视差图,包括:
在对应的窗口内的每一个位置分别求差,并取绝对值,然后将每个位置的对应计算结果相加作为整个窗口的匹配代价。
获取绿色作物区域图像视差图中,B为误匹配率,N为像素总数,dC为待测试视差图像的像素值,dT为真实的视差图像素值,δd为误差阈值
进一步,绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图,包括:
xl与xr分别是P点在左右成像平面图像的位置,视差定义为d=xl-xr。利用相似三角形的原理,推导出Z 值。
当两个摄像头的主点位置不同时,Z值公式变为下式。与分别为左右摄像头主点位置的横坐标
进一步,绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图,进一步包括:
将绿色作物区域图像中白色区域在绿色作物的深度图中用绿色通道表示深度信息,黑色的区域在绿色作物的深度图中用蓝色表示深度信息,深度的取值为深度图中的取值。将深度大于255的部分在图像中以像素值0显示。像素取值越大,绿色或蓝色的程度越大,在图像中越亮,深度越深。
本发明的另一目的在于提供一种实施基于双目视觉绿色作物视频流的深度图FPGA实现系统将左、右图像输入到FPGA芯片的ARM端,在ARM端对输入的左右图像进行图像矫正与立体校正;然后,将两幅图像输入到FPGA端,在FPGA端中图像数据并行执行:使用超绿特征提取算法提取左图像中的超绿特征,再经过绿色作物区域提取过程,输出绿色作物区域图像;将左图与右图分别进行带截断值的Sobel变换与基于SAD的立体匹配,输出视差图;最后,在ARM端将视差图转换为深度图,并将绿色作物区域图像与深度图合并得到绿色作物的深度图;包括:
FPGA端,用于利用超绿特征提取方法对绿色作物区域的图像进行提取。对校正后的绿色作物区域图像进行截断值的Sobel变换、基于SAD的立体匹配,获取绿色作物区域图像视差图。
ARM端,与FPGA端连接,用于对立体匹配图像预处理,采集双目摄像头拍摄的图像。将原图进行矫正与校正。将第二步的彩色图片转换为灰度图。
进一步,ARM端,还用于对绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图。
本发明的另一目的在于提供一种实施所述的基于双目视觉绿色作物视频流的深度图FPGA实现方法的田间作物机器人。
综上所述,本发明的优点及积极效果为:
本发明针对田间实际应用中的实时性和准确性需求,利用FPGA技术作为计算平台,综合考虑软件算法和硬件结构,在FPGA中实现了BM的立体匹配算法和绿色作物区域提取算法。经Middlebury平台实验发现BM立体匹配算法在高纹理图像中有较高的优势。同时,根据算法的特点,在FPGA中设计可使 BM算法与绿色作物区域提取算法并行执行的结构,且BM算法的两个步骤与绿色作物区域提取算法的两个步骤均采用流水线结构设计。对于分辨率为1920×1080的图像,算法整体的运行速度达到49.75FPS,其中BM算法的运行速度达到了51.59FPS,满足田间环境对实时性的需求。
本发明的FPGA架构在田间机器人作业、医疗、汽车安全与监视等实时性需求很高的领域中具有广泛和重要的实际意义。
本发明深入分析立体视觉原理与立体匹配算法,实现从双目摄像头拍摄照片到深度图获取的全部算法。通过实验确定适合在田间复杂环境中的立体匹配算法,并且该算法还必须适合在FPGA下加速。
通过分析上一步确认的立体匹配算法,深入解析其数据缓冲结构与计算结构,将其转换为并行结构与流水线结构以在FPGA中实现,并达到可以实时处理1920×1080 30FPS的视频流文件。
本发明分析绿色作物区域提取算法的缓冲与计算结构,在FPGA中实现绿色作物区域提取算法,同样使其达到实时处理1920×1080 30FPS的视频流文件。
将处理绿色作物区域提取后的图像与立体匹配后的图像相结合,最终得到绿色作物的深度图。
本发明两个算法在FPGA下的运算时间,对于分辨率为1920×1080的图像,算法整体的速度达到 49.75FPS。其中,BM立体匹配最大可达到51.59FPS,在CPU以单线程运行时,速度约为Intel Core i3-2130 处理器的616倍,Inter Core i5-3470处理器的474倍,Intel Core i7-8500H处理器的723倍。在Intel Core i7-8500H中以多线程运行时,本发明中FPGA速度约是在CPU中双线程的369倍,4线程的192倍,8线程的138倍,OpenCV相似效果算法的38倍。带截断值Sobel变换与绿色作物区域提取算法与SAD的立体匹配速度相近,同时这两个算法与PC处理速度亦相近,但本发明设计中这两个算法可与SAD立体匹配算法配合使用,简化算法运行方式,提高整体的运行效率,减少PC负担,造价也会比PC机较低。本发明通过Middlebury平台证明了BM算法在高纹理环境下匹配的优势,且纹理越高,其误匹配率就越低。因此,BM算法较适合在田间环境下绿色作物的立体匹配。
附图说明
图1是本发明实施例提供的绿色作物区域的提取阈值计算过程图。
图2是本发明实施例提供的绿色作物区域的绿色区域确定过程图。
图3是本发明实施例提供的摄像头模型下的四大坐标系图。
图4是本发明实施例提供的成像平面坐标系与摄像头坐标系关系图。
图5是本发明实施例提供的成像平面坐标系与图像坐标系关系图。
图6是本发明实施例提供的理想双目模型图。
图7是本发明实施例提供的视差与深度关系示意图。
图8是本发明实施例提供的对极几何原理图。
图9是本发明实施例提供的径向畸变示意图。
图10是本发明实施例提供的枕形(左)和桶形(右)畸变图。
图11是本发明实施例提供的切向畸变示意图。
图12是本发明实施例提供的OpenCV中的棋盘图像图。
图13是本发明实施例提供的左摄像头棋盘拍摄效果图。
图14是本发明实施例提供的右摄像头棋盘拍摄效果图。
图15是本发明实施例提供的二维线性插值示意图。
图16是本发明实施例提供的矫正前图。
图17是本发明实施例提供的矫正后图。
图18是本发明实施例提供的立体校正效果图。图中:a)校正前左图;b)校正前右图;c)校正后左图;d) 校正后右图。
图19是本发明实施例提供的立体匹配过程示意图。
图20是本发明实施例提供的带截断值的Sobel变换过程示意图。
图21是本发明实施例提供的SAD过程示意图。
图22是本发明实施例提供的系统总体架构图。
图23是本发明实施例提供的绿色作物区域提取的阈值计算模块图。
图24是本发明实施例提供的绿色作物区域提取的绿色区域确定模块图。
图25是本发明实施例提供的带截断值Sobel变换的FPGA过程图。
图26本发明实施例提供的行缓冲区结构图。
图27是本发明实施例提供的窗口缓冲区示意图。
图28是本发明实施例提供的行缓冲区缓冲过程示意图(1)。
图29是本发明实施例提供的行缓冲区缓冲过程示意图(2)。
图30是本发明实施例提供的行缓冲区缓冲过程示意图(3)。
图31是本发明实施例提供的行缓冲区缓冲过程示意图(4)。
图32是本发明实施例提供的行缓冲区与窗口缓冲区缓冲过程示意图(1)。
图33是本发明实施例提供的行缓冲区与窗口缓冲区缓冲过程示意图(2)。
图34是本发明实施例提供的行缓冲区与窗口缓冲区缓冲过程示意图(3)。
图35是本发明实施例提供的行缓冲区与窗口缓冲区缓冲示意图(4)。
图36是本发明实施例提供的带截断值Sobel计算结构图。
图37是本发明实施例提供的左图三行数据图。
图38是本发明实施例提供的右图三行数据图。
图39是本发明实施例提供的左图SAD匹配过程(1)。
图40是本发明实施例提供的右图SAD匹配过程(1)。
图41是本发明实施例提供的左图SAD匹配过程(2)。
图42是本发明实施例提供的左图SAD匹配过程(3)。
图43是本发明实施例提供的右图SAD匹配过程(3)。
图44是本发明实施例提供的SAD匹配重复计算区域图。
图45是本发明实施例提供的当前行第一列匹配代价图。
图46是本发明实施例提供的下一行第一列匹配代价图。
图47是本发明实施例提供的同一列匹配代价重复计算区域图。
图48是本发明实施例提供的列匹配代价缓冲区结构图。
图49是本发明实施例提供的列匹配代价计算结构图。
图50是本发明实施例提供的窗口匹配代价计算结构图。
图51是本发明实施例提供的视差计算结构图。
图52是本发明实施例提供的各匹配算法视差图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
现有技术中,针对田间实际应用中的实时性和准确性没有利用FPGA技术作为计算平台,没有综合考虑软件算法和硬件结构,实现绿色作物区域提取高纹理图像,使田间环境实时性监测效果差。
针对现有技术存在的问题,本发明提供了一种基于双目视觉绿色作物视频流的深度图FPGA实现方法,下面结合附图对本发明作详细的描述。
(一)本发明实施例提供的基于双目视觉绿色作物视频流的深度图FPGA实现方法,包括:
首先,进行立体匹配图像预处理:采集双目摄像头拍摄的图像;将原图进行矫正与校正;将第二步的彩色图片转换为灰度图。
接着,在FPGA端利用超绿特征提取方法对绿色作物区域的图像进行提取。对校正后的绿色作物区域图像进行截断值的Sobel变换、基于SAD的立体匹配,获取绿色作物区域图像视差图。
最后,绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图。
(二)下面结合具体分析对本发明的技术方案作进一步描述。
1、绿色作物区域提取算法:
由于本发明中双目视觉技术在田间使用,并且以绿色作物为中心,因此有必要识别出绿色作物的区域。本发明采用的绿色作物区域提取算法为基于超绿特征的提取算法,在超绿特征提取后增加了自动阈值分割。
超绿特征根据图像中绿色像素处的绿色通道灰度值明显大于其他通道的灰度值的原理对处于RGB空间的图像进行绿色特征提取,主要的运算过程为2G-R-B,即用2倍的绿色灰度值减去红色灰度值再减去蓝色灰度值,计算如式(2-1)所示。超绿特征提取完毕后,下一步进行的是阈值分割,阈值的计算过程如式(2-2) 所示。其中,Th为阈值,Gav与Gmax分别为超绿特征像素的平均值与最大值,f为权重因子。当f取值为-0.5-0.5 时,一般可以得到较好的分割效果[28]。最后将阈值与超绿特征值进行比较,超绿特征大于等于阈值的是绿色区域,否则为非绿色区域。因此,绿色作物区域提取算法的运算过程分为两个部分,第一部分是阈值计算部分,其过程如图1所示。第二部分是绿色区域确定部分,其过程如图2所示。
Th=Gav+f×(Gmax-Gav) (2-2)。
2、单目摄像头成像原理:
在摄像头坐标系统中有四大坐标系,分别为:世界坐标系,摄像头坐标系,成像平面坐标系以及图像坐标系。世界坐标系是在现实三维空间中定义的任意参考坐标系。摄像头坐标系是以摄像头角度观察物体的参考坐标系。成像平面坐标系是摄像头内部成像平面的参考坐标系。由于摄像头成像平面的坐标无限,但传感器的数量有限,因此通常是取成像平面中一块区域的色彩平均值作为图像在某一点的像素值,描述像素位置的参考坐标系称为图像坐标系]。摄像头模型内的四大坐标系及其相对位置如图所示。
1)世界坐标系与摄像头坐标系
世界坐标系与摄像头坐标系之间转换可以直接通过旋转和平移得到。即式(2-3)所示。
R为从世界坐标系到摄像头坐标系的旋转矩阵,T为从世界坐标系到摄像头坐标系的平移矩阵,Xc,Yc, Zc分别为摄像头坐标系的坐标,Xw,Yw,Zw分别为世界坐标系中的坐标。
2)摄像头坐标系与成像平面坐标系。如图4所示根据三角形的相似定理可以得到式(2-4)
f为摄像头的焦距即摄像头坐标原点到成像平面坐标系原点的距离。Xc,Yc,Zc为摄像头坐标系的坐标, x,y为成像平面坐标系对应的坐标。
3)成像平面坐标系与图像坐标系。根据图5所示的成像平面坐标系与图像坐标系的关系可以得到式(2-5)。 dx为每个像素在成像平面中所占的宽度,dy是每个像素在成像平面中所占的高度,由于成像平面坐标系与图像坐标系的原点不同所以会有u0与v0两个位移。
根据上面的三个转换关系可推导出世界坐标系与图像坐标系之间的关系如式(2-6)所示,在该式中等式右边的第一个矩阵内所有参数都根据摄像头自身的内部信息决定,所以该矩阵称为内参矩阵。在等式右边的第二个矩阵由摄像头外部参数决定,所以该矩阵被称为外参矩阵。
3、双目摄像头测距几何原理:
假设摄像头是无畸变、两个摄像头内部参数完全相同、两个摄像头的成像平面严格位于同一平面上、光轴严格平行的、摄像头之间的距离已知(该距离称为基距),那么这两幅图像就是行对准的。即可以画出如图6所示的理想模型:
在这个模型中,xl与xr分别是P点在左右成像平面图6像的位置,视差定义为d=xl-xr。利用相似三角形的原理,就可以很容易的推导出Z值,如式(2-7)所示。
根据式(2-7)可以看出深度是与视差成反比的,当视差接近0时,微小的视差变化会导致深度发生很大的变化。视差较大时,视差的微小变化几乎不会引起深度的变化。所以,立体视觉在物体与摄像头较近时有很高的精确度。如图7所示。
然而,当两个摄像头的主点位置不同时,计算的公式就变为式(2-8)。与分别为左右摄像头主点位置的横坐标。
4、对极几何:
立体成像的基本几何学就是对极几何,根据对极几何的原理,可以减少视差计算时的计算量,所以在本节将介绍对极几何的基本原理。如图8所示,O1与O2分别为两个摄像头的光心,点P在左图像的投影点为P1,在右图中的投影点为P2,两个光心的连线与两个成像平面的交点称为极点,分别为e1与e2,在两个图像中极点与投影点的连线l1,l2称为极线,面PO1O2称为极面。
根据上面的介绍可得到如下理论:
1)在摄像机的视野范围内,每一个三维点都有对应的极面。
2)一副图中的点在另一幅图像的对应点一定在对应的极线上,这被称之为“对极约束”。
3)对极约意味着给定其中一副图像上的一点,在另一副图寻找匹配点时,该点必然在另一副图对应的极线上。该性质不仅节省了大量的计算,还可以排除许多虚假匹配的点。
4)如果点A与点B在一副图中按顺序水平出现,那么,在另一幅图中亦是按顺序水平出现。矫正与校正相关理论。
现实中的摄像头由于制作工艺等问题,无法直接得到图6中的理想模型,但是可以通过数学方法近似得到该模型。为了得到该模型需要对原始图形进行畸变消除和摄像头立体校正两个过程。
6、畸变:
理论上可以定义一种没有任何畸变的透镜,但制造一个“球形”的透镜比制作一个数学上理想的透镜更加容易,而且很难把透镜和成像仪平行。这就会导致拍摄的图像产生两种畸变——径向畸变和切向畸变。
在“球形”透镜下的物体成像时,从透镜中心向透镜外侧成像会变得越来越弯曲,因而径向畸变是沿着透镜半径方向分布的畸变,这种畸变在普通廉价的镜头中表现更加明显。径向畸变如图9所示,可以明显的看到原来右侧的正方形边界被映射为图中左侧或右侧中的曲线。根据径向畸变的畸变特征将其分为枕形和桶形畸变[29],其模型如图10所示。
对于径向畸变成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越来越严重。实际情况中,这种畸变比较小,可以用r=0位置(r为成像位置距离光心的距离)周围的泰勒级数前几项来定量描述。对于精度要求低的摄像头,通常仅使用前两项,即第一项为k1,第二项为k2。对于畸变较大的摄像头,如鱼眼透镜,可以使用第三项径向畸变k3。具体公式如式(2-9)。在式中x,y为畸变点在成像仪上的原始位置,x′,y′为矫正后的新位置。
切向畸变是由于透镜本身与摄像头传感器平面(成像平面)或图像平面不平行而产生的,这种情况多是由于透镜被粘贴到镜头模组上的安装偏差导致[29],如图11所示。切向畸变可以用两个额外的参数p1和 p2来描述,如式(2-10)所示[29],式中x,y,x′,y′与式(2-9)意义相同。
7、摄像头标定:
在矫正的第一步需要对两个摄像头分别进行标定,标定的过程就是求出摄像头的内参矩阵和畸变矩阵。由于标定在整个过程中仅需要计算一次,所以没有必要在FPGA中实现。
通常在标定过程需要一张纸质棋盘,该棋盘的电子文件可在OpenCV库的目录中找到,如图12。找到该文件后将该图打印出来(该棋盘纸为标定板),然后使用双目摄像头拍摄打印出的标定板,为了得到高质量的结果,至少需要拍摄10幅图像。在本发明中拍摄的图像如图13与图14所示。在拍摄完成后只需要将图像与棋盘内点即黑色方块之间相交的点(在本发明中内点有9×6个)输入编译好的程序中即可标定出内参矩阵与畸变参数。
表1内参与畸变参数表
参数 | f<sub>x</sub> | f<sub>y</sub> | u<sub>0</sub> | v<sub>0</sub> | k<sub>1</sub> | k<sub>2</sub> | k<sub>3</sub> | p<sub>1</sub> | p<sub>2</sub> |
左 | 1210.59 | 1205.60 | 1022.26 | 498.39 | -0.128 | -0.024 | 0.025 | 0.004 | 0.005 |
右 | 1214.12 | 1207.88 | 963.25 | 534.93 | -0.139 | 0.001 | 0.015 | 0.004 | 0.002 |
8、图像矫正
在图像矫正时,本发明使用逆向推导的方式,假设需要获得真实图像中坐标(u,v)处的像素值,通过摄像头内参与畸变参数对坐标(u,v)进行推导,得到在畸变图像中对应的坐标(u′,v′),在畸变图像中读取该坐标的像素值就求得所需结果,这种方式就无需求解函数的逆函数,给计算带来了方便。但是通过上述方式求出的坐标位置并非一定为整数,例如求出的坐标(u′,v′)为(1.2,1.8),此时需要通过插值处理方法得到对应坐标的像素值。
一维的线性插值比较简单,比如已知坐标x0与x1处的值,需要求解[x0,x1]区间内某一位置的值。假设求解处的坐标为x,对应的值为y,计算过程如式(2-11)所示:
由上述公式可以看到一维的线性插值就是建立两点的直线方程,然后通过该方程求解对应的坐标值。
二维的线性插值核心思想为分别在两个方向进行线性插值,如图15所示,黑色点处的坐标对应的像素值已知,需要得到斜线圆点处对应的像素值。根据一维的线性插值法首先求出白色圆点处坐标对应的像素值,最后,根据白色圆点对应的像素值求出斜线圆点处对应的像素值。以上过程的推导如式(2-12)所示。
Figure 2.15 Two-dimensional linear interpolation diagram
根据以上理论矫正后的图像效果如图16与图17所示。从图16可以看到直线区域有明显的弯曲。从图17可以看到原来弯曲的直线变直了。图像矫正的过程在FPGA中实现是没有实际意义的。首先由于PC 可以实时进行图像矫正处理,其次在图像矫正的过程中大量的使用到了除法以及浮点数等复杂的操作,这在FPGA中实现不仅非常占用资源,而且运行时间反而比PC更长。因此,该过程如果使用FPGA加速得不偿失,实际上该部分可以在FPGA芯片的ARM端完成。
9、立体标定:
立体标定是求出双目摄像头中两个摄像头坐标系间的旋转矩阵与平移矩阵,即式(2-13),在式中Pl与 Pr分别为同一位置在两个摄像头中投影位置在摄像头坐标系中的坐标点,R与T分别为这两个坐标系的旋转矩阵与平移矩阵。
Pl=RPr+T (2-13)。
根据前面叙述的每个摄像头的摄像头坐标系相对于世界坐标系的转换关系如式(2-14)所示[29]。
根据以上式(2-14)可以推导出R与T分别如式(2-15)所示[29]。
10、立体校正
在双目摄像头中行对准是指两个成像平面中对应的极线共线,当双目摄像头中两个像平面共面且完全行对准时,计算立体视差最简单。但是由于制作工艺的问题,要达到这样的效果比较困难,只能将原来不共面且行不对准的两幅图像转换为在数学上共面且行对准的两幅图像,这就是立体校正。由于在OpenCV 中,立体校正结果令人满意,所以使用了OpenCV中已实现的算法。
通过该算法校正效果如图18所示。在该图的上面两幅分别为未校正过的左图和右图,下面两幅为校正过的左图和右图。可以看到在校正后对应的点在同一条直线上。
11、立体匹配原理:
立体匹配是立体视觉研究中的关键部分,其目标是在两个或多个图像中匹配对应的像素点并通过建立一个能量代价函数,并使全图能量最小化来估计像素点的视差,进而通过上述理论通过视差求出深度。立体匹配算法主要分为局部立体匹配算法与全局立体匹配算法。基于局部的匹配算法中最常用的是基于区域的立体匹配算法,基于区域的立体匹配算法原理是给定一副图像中的一点,取该点领域内的一个窗口,在另一副图像中的视差范围内根据某种相似性判断原则寻找与原窗口最相似的窗口,该窗口对应的像素点为原像素点的最佳匹配点,对应的视差为最佳视差。全局匹配首先构建全局能量函数,然后对整个图像进行遍历并使全局能量最小,得到的图像就为最优视差图。但由于全局匹配计算量巨大,在现实中极少使用,并且由于其在FPGA加速实现也比较困难,故本发明没有使用全局匹配。
11.1、基于区域的立体匹配算法:
基于区域的立体匹配通常是在一个设定好的窗口上来完成的,即以窗口中提取的信息为基础进行匹配。这种匹配可以是逐像素的匹配,也可以是成块的匹配。甚至有根据图像自适应调节窗口大小的区域匹配算法。对于窗口来说,窗口越大信息量越多,匹配精度越高,但会带来大量的复杂计算,影响整体算法的运行速度,并会导致图像过于平滑。窗口越小信息量越少,计算量越小,运行速度越可以接近实时,但匹配精度就会降低,所以,在固定的场景下选择合适的窗口大小就会显得格外重要。
基于区域的匹配算法过程中通常主要经历匹配代价计算,代价聚合,视差计算这几个过程,该过程如图19所示。
匹配代价的计算一般是通过左、右两图对应像素的三个通道的灰度值差异来决定,或者直接使用灰度图的对应像素值差异来决定。常用的有AD(Absolute Differences),SD(Squared Differences)等方法。 AD是通过将对应像素值做差并取绝对值作为对应像素对应视差的代价值。SD是通过对应值做差然后平方得到对应像素对应视差的代价值。在该过程中每一个视差值都会得到一副图。例如:如果视差范围为0~61,就会得到62幅图,不同像素的同一视差的代价值在同一幅图像上。上述通过图19中匹配代价计算步骤所示。
代价聚合其实就是一个滤波过程,匹配代价的计算仅得到了图像上所有孤立像素的视差值,受噪声影响很大,比如原来在一个区域内相同的代价值,受噪声影响后它们的值就会变得不同。为了尽可能的去掉这些噪声引入了窗口,将原来仅计算每个像素值的匹配代价变成了计算在该像素值邻域范围内的窗口来代替原来的匹配代价。绝对差值和SAD(Sum of Absolute Differences)、零均值绝对差值和ZSSD(Sum of Zero mean AbsoluteDifferences)、差值平方和SSD(Sum of Squared Differences)、零均值平方差求和ZSSD(Sum of Zero mean Squared Differences)、归一化相关系数NCC(Normalized CrossCorrelation)等匹配函数,见式(2-16)。
上述函数中:I1,I2为左右图像对。u,v为像素的坐标点。n,m为窗口的长和宽;为窗口中像素亮度的平均值,d为当前视差值。这些匹配函数可以对窗口中的亮度等特征进行匹配。上述过程如图19中代价聚合步骤所示。
视差计算通常采用赢者通吃WTA(Winner Takes All)的方法。对于每个像素,其视差选取所有视差的匹配代价最小的视差值,该视差值即选取为最终的最优匹配的视差值。上述过程如图19中视差计算步骤所示。
11.2适合田间植物的立体匹配算法包括基于区域的立体匹配算法。
在基于区域的匹配算法中直接使用图像中的数据或图像像素之间的关系,如Census算法。Census是基于区域的匹配方法,非参数化的区域匹配能够更好地描述图像的局部特征。Census匹配的主要的过程是 Census变换和代价聚合。
Census变换的主要思想是:首先构建一个匹配窗口,其窗口大小可以为3×3,5×5或7×7等。然后,在匹配窗口中选一点作为中心点,一般把窗口的中心点作为计算中心点。接着,将窗口内其他点的像素值与其中心点的像素值进行比较,如果像素值大于中间点的像素值则用1替换原来的像素值,否则用0替换原来的像素值。最后,将除中心点外的0与1按从上到下,从左到右的顺序编码,得到的比特串称为Census 变换码。
通过对整幅图像进行Census变换后,每个像素点都将变成对应的Census变换码,然后通过计算在3×3, 5×5或其他大小的窗口内Census变换码的汉明距离得到该窗口的匹配代价。汉明距离是计算对应Census 变化码中不同比特位的个数。不相同的个数越多则说明匹配的可能性越低。最后,进行代价聚合,选取在固定视差范围汉明距离的最小值作为最后的匹配点。
以上方法虽然在一定的程度上增加了光照的鲁棒性,但在田间这种复杂的环境中由于纹理变化非常大,单靠像素的大小关系匹配时,在视差范围内的许多位置都可能得到相同的Census变换码,最终导致极大的误匹配率。所以,当田间作物匹配时,使用这种匹配方式实现时会有较高的误匹配率。
11.3BM稠密立体匹配算法:经过实验发现在OpenCV中实现的BM稠密匹配算法在田间的匹配效果非常不错。而且由于该算法用到的带截断值的Sobel变换与基于SAD的匹配算法在硬件中较容易实现,所以最终选用了该算法。
在该算法中首先通过带有截断值的x方向的Sobel变换对原图像的纹理信息进行提取,并且由于田间环境中的复杂场景,提取出的纹理较多。紧接着使用SAD方法对经过以上变换的纹理图像进行匹配,最终得到视差图。
11.4带截断值的Sobel变换:Sobel算子,又名索伯算子,是图像处理中重要的算子之一,在计算机视觉领域中常被用来做边缘检测。Sobel算子是在Prewitt算子的基础上发展而来的,它们都是利用一阶导数进行边缘的提取,可以较好的减少噪声的影响。与Prewitt算子不同,Sobel算子求的是亮度函数的近似梯度值,同时在不同的位置采用的权重不同,因此Sobel算子的边缘检测效果更好。
本发明中使用的是3阶的Sobel算子,该算子如下所示:
带截断值的Sobel变换第一步计算时与正常的Sobel计算方式相同,都是与原图像进行卷积操作,即在原图像中从左到右,从上到下依次移动卷积核(即前述的Sobel算子),并与原图像对应位置相乘,然后将九个位置的结果相加作为该点的像素值。经过上述计算后像素值可能小于0或大于255,所以会在原Sobel 变换的基础上进行截断处理。首先设定一个阈值(记为T),当变换后的值小于-T时记该值为-T,当变换后的值大于T时,记该值为T,当处于[-T,T]之间时,保留原来的值,这样得到的所有值都将变为区间[-T,T] 内的值。最后将[-T,T]区间的值,映射到[0,2T]内,这样原来变换后的值将都在[0,2T]内。
上述过程如图20所示,其中符号表示卷积。图中最左边的位置为原图像数据,在与Sobel算子卷积计算后得到数值298,紧接着进行截断值为T的截断运算,假设截断值T为31,则截断后的值为31,最后经过映射运算得到最终数值62。
11.5基于SAD的立体匹配:经过上述的带截断值的Sobel变换后,对上面的结果进行基于SAD的立体匹配。
绝对误差和算法(Sum of Absolute Differences,简称SAD算法)是立体匹配中经常使用的算法,并且由于其计算简单,所以在FPGA实现非常容易。SAD算法为基于区域的匹配算法,在待匹配的两幅图像的固定窗口内进行计算。其窗口的大小有3×3,5×5,7×7等,运算过程为在对应的窗口内的每一个位置分别求差,并取绝对值,然后将每个位置的对应计算结果相加作为整个窗口的匹配代价。该计算过程如图 21所示。如图21所示,以3×3的窗口为例,首先将前两个窗口内对应的值相减,得到第三个窗口内的值,可以看到得到的值有正有负。然后,取这些数值的绝对值,得到的结果如第四个窗口所示。最后将窗口内所有的数值相加得到837。
本发明中采用绿色作物区域提取算法的基本原理。针对双目视觉的相关理论,从单目摄像头的成像原理中,摄像头四大坐标系之间的转换,接着,分析双目摄像头测距的数学原理,以及如何将实际中摄像头拍摄的畸变图像转换为数学上无畸变且完全行对准的两幅图像。最后,分析立体匹配的几种算法,以及适合在田间作物场景下使用的立体匹配算法。
(三)、下面结合平台与架构对本发明的技术方案作进一步描述。
1、实现平台与架构:
本发明使用的摄像头为Stereolabs公司的ZED摄像头。该摄像头使用USB 3.0的接口,支持使用USB 供电,当分辨率为1920×1080时最大支持30FPS,基距为120mm。且同时支持Microsoft Windows和Linux 的操作系统。
在FPGA的设计中,最主要的过程是设计具有某个功能的IP核(IntellectualProperty,知识产权核), IP核主要分为软核、硬核与固核。在完成IP核的设计后便可以在FPGA中运行或调试。但传统的FPGA 不能独自发挥作用,需要使用其他芯片作为主控芯片来调用FPGA。随着Altera和Xilinx公司推出Nios 和Microblaze软核,这种情况得以改善。但由于软核需要在FPGA中运行,占用了FPGA的资源,而且速度较真实的主控芯片慢。XilinxZYNQ系列的FPGA芯片是将FPGA芯片与ARM芯片集成在同一芯片的方案,使FPGA的设计变得简单,且使用范围更加广泛。该系列的芯片既可运行FPGA的逻辑资源文件,也可以运行基于ARM的可执行文件,甚至在ARM中还可运行Linux系统,提高了芯片的可用性和适用性。ARM端与FPGA交互采用基于ARM AMBA3.0协议的AXI总线,其具有高性能、高带宽、低延时的特点。
本发明使用的是Xilinx公司的ZCU102开发板。该开发板采用了UltraScale+TMMPSoC系列的 XCZU9EG-2FFCB1156E芯片,该芯片ARM端由双核的ARM-A53应用处理单元APU(Application Processing Unit),四核ARM Cortex-R5实时处理单元(Real-timeProcessing Unit,RPU),ARM Mali-400GPU (Graphics Processing Unit)组成。FPGA端具有548160个FF(Flip Flop,触发器),23315个LUT(Look Up Table,查找表),2520个DSP48E以及1824个BRAM_18K(Block RAM 18K)。
该芯片支持Xilinx公司推出的高层次综合(High-Level Synthesis,HLS)技术,该技术可以直接使用 C,C++以及System C语言规范对FPGA进行编程,无需手动创建RTL电路,从而极大的加速了IP核的设计与开发。但HLS技术并不是万能的,只有符合HLS标准与硬件电路需求的C语言文件才能成功转换为 RTL电路,进而对运算进行加速。
本发明的总体架构如图22所示,左、右图像输入到FPGA芯片的ARM端,在ARM端对输入的左右图像进行图像矫正与立体校正。然后,将两幅图像输入到FPGA端,在FPGA端中图像数据将分两步并行执行:第一步使用超绿特征提取算法提取左图像中的超绿特征,再经过绿色作物区域提取过程,输出绿色作物区域图像。第二步将左图与右图分别进行带截断值的Sobel变换与基于SAD的立体匹配,输出视差图。最后,在ARM端将视差图转换为深度图,并将绿色作物区域图像与深度图合并得到绿色作物的深度图。
下面将描述本发明所设计的绿色作物区域算法、带截断值的Sobel变换以及基于SAD的立体匹配的缓冲与计算结构。
2、绿色作物区域提取算法的FPGA实现:
由于绿色作物区域算法提取仅涉及到当前像素红、绿、蓝三个通道的灰度值计算,因此,设计中无需设计缓冲区,计算结构也较为简单。根据其计算流程将其分为了两个模块,第一个模块是阈值计算模块,第二个模块是绿色区域确定模块。之所以在FPGA中实现使也分为两个模块,是因为在HLS技术中图像只能从上到下,从左到右依次读取,为了节省缓冲空间,采取了这种方式
1)阈值计算模块。该模块如23所示,首先将像素分为三个不同通道的灰度值,然后将绿色灰度值连接到一个加法器上计算绿色灰度值的二倍,加法器的输出与红色灰度值连接到减法器的输入上做差,减法器的输出与蓝色灰度值连接到另一个减法器上做差,将其结果输出到两个比较器中。图中左边的比较器是与0值比较,然后连接到两个数据选择器中,分别在大于0时计算超绿特征的和与数目,第二个比较器用来计算最大的超绿特征值,最后通过除法器,乘法器等计算出阈值T。
2)绿色区域确定模块。该模块的结构如图24所示,左半部分与阈值提取模块完全相同。与阈值提取模块不同的是最后的减法器直接输出到比较器上,与阈值提取模块的阈值T进行比较,最后通过数据选择器得到最后的结果0或255。
3、BM立体匹配算法的FPGA实现。
3.1带截断值Sobel变换的FPGA实现.
由于在FPGA中的资源较少,不可能将1920×1080分辨率的图像全部储存在FPGA中,因此,需要采用缓冲的方式开发IP核。并且由于在HLS技术中采用AXI-Stream访问图像数据,读取图像数据时必须按照从左到右,从上到下的顺序读取,无法随机读取,也无法逆向读取。考虑到FPFA中的缓冲区可以随机读取,因此,带截断值的Sobel变换模块将分为数据缓冲部分与计算部分。其过程如图25所示。
3.2带截断值Sobel变换缓冲部分实现.
本发明采用3×3的Sobel窗口,为了达到并行计算,在缓冲图像数据后每次计算都需要同时读取9 个点,但FPGA中,每个BRAM缓冲区最多提供两个访问的端口,也就是说仅能同时读取两个点,这导致计算无法被有效加速。为了实现9个点的并行读取,设计了如下的缓冲区:
1)行缓冲区设计。由于本发明使用的Sobel算子窗口大小为3×3,每次计算需要三行数据,因此,首先需要设计一个3×1920的缓冲区,为了增加端口数量,将这个缓冲区划分为3个1×1920的缓冲区,称该缓冲区为行缓冲区,其结构如图26所示。另外在HLS技术中可以将C语言中的数组转换为缓冲区,且可以设置该数组为HLS_ARRAY_PARTITION,该指令自动将3×1920的数组转换为3个1×1920的数组,但操作数组的方式上与操作3×1920的数组完全相同。
由于3×3的Sobel算子中间的一列全为0,因此,每次计算仅需同时读取6个数据。根据图26可知该缓冲区共有6个端口,可同时读取6个数据。这样的设计符合需求,但忽略了在缓冲时每行仍需要提供一个端口来写入数据,端口数目便由原来的6个端口减少为3个,不能满足设计所需求端口的数目。
2)窗口缓冲区设计。由于CPU与内存速度不匹配,从而考虑在CPU与内存之间添加缓冲,在本发明中增加了窗口缓冲区。该窗口缓冲区与Sobel窗口的大小相同,都为3×3的大小,但结构上为9个独立的缓冲区,其结构图27所示。在HLS中通过在3×3数组的一维与二维方向分别设置 HLS_ARRAY_PARTITION指令可以将该缓冲区分割为9个独立的缓冲区,即每个像素一个缓冲区。
图27中,9个独立的像素缓冲区在具体实现中就从RAM的形式转换为寄存器(REG)的形式。REG 与RAM不同,由于REG仅缓冲一个数据,无需生成地址,所以每个REG可以同时输出到多个位置,且没有端口数目的限制。虽然该窗口缓冲区满足本发明的需求,但却需要与行缓冲区进行数据交互,交互方式的设计是本发明的重点之一。
首先行缓冲区怎样进行数据的缓冲,如图28所示在缓冲之前该缓冲区内没有数据,白色箭头所指的位置为接下来要缓冲数据的位置,在该位置缓冲数据后,该指针会向右移动,紧接着指针继续向右移动,直到最后一行全部缓冲完毕,缓冲结果如29所示。
在该行缓冲完毕后,依然将该指针指向图28的位置,但此时该位置有缓冲过的数据,在本例中该数据为58。在下一次缓冲数据的同时第二行第一列会复制第三行第一列的数据,就相当于该位置数据的上移。该位置缓冲数据后行缓冲区数据情况如图图30所示。
在第三行第一列缓冲数据后,白色箭头仍然会向右移动直到第三行的最后一列,此时第二行数据也同时缓冲完毕。同样第一行数据的缓冲方式是复制第二行的数据,三行数据全部缓冲完毕后的行缓冲区数据如31所示。这样循环往复,行缓冲区中总能保留三行的数据缓冲,并逐渐将图像缓冲完毕。其实,在刚开始缓冲数据时,上一行便会开始复制下一行的数据,此时复制的是空数据,对本发明并没有影响,但设计程序时会方便的多。
接下来介绍窗口缓冲区怎样缓冲数据,以及它与行缓冲区之间的交互。为了叙述方便,假设在行缓冲区中已经缓冲了数据,如他32所示,白色箭头处为接下来缓冲数据的位置。
在图33中,如上所述,在白色箭头所在的位置缓冲数据时,在行缓冲区中上一行会复制下一行的数据。
如图34中黑色箭头所示,在图33行缓冲区数据缓冲完毕后会将数据复制到窗口缓冲区,具体的操作是窗口缓冲区内第一列复制第二列的数据,第二列复制第三列的数据,最后一列复制行缓冲区中与白色箭头同列的数据。
图35中白色箭头处为下一次缓冲的位置,并且在该图中数据已缓冲完毕,黑色箭头为窗口缓冲区数据的流向。如此反复在窗口缓冲区中将一直保持9个数据,后续将使用其中的6个数据进行计算。同时,这样的设计保证了Sobel算子在原图像中移动的顺序为从上到下,从左到右。
3.3带截断值Sobel计算部分实现.
图36展示了带截断值Sobel计算部分的结构。在该图的左上角阴影部分区域为上面所描述的窗口缓冲区,由于3×3的Sobel算子中间的一列全部都是0,所以,中间一列缓冲区的数据没有连线。在Sobel 算子中第一行与最后一行的有效数字都是-1和1,所以,实际上这两行的计算结果等价于两个数字相减(在图36中它们被连接到一个减法器上)。在Sobel算子中第二行有效的两个数字分别为-2和2,所以,需要将对应位置上的数据先与自身相加,然后,将相加的结果做差。将对应位置的数据读取两次连接到加法器上,然后,再将结果连接到减法器上。由于整个Sobel算子的运算结果是将三列的计算结果相加,所以在图中将三个减法器的结果输入到了加法器中。
上一步的计算实现了普通Sobel变化,根据本发明的需求继续对该结果进行截断处理。在本步中将上一步的结果与截断阈值T与截断阈值-T进行比较,在图36中可以看到加法器的输出分别与T、-T输入到两个比较器中,将比较的结果输入到数据选择器中将原来的值转换到区间[-T,T]内。经过数据选择器后再经过一个加法器将[-T,T]映射到[0,2T]中,最后加法器输出的值就是本发明中带截断值Sobel变换的最终结果。
4、基于SAD立体匹配的FPGA实现。
基于SAD立体匹配的实现过程依然分为缓冲部分与计算部分,但与前面的带截断值Sobel变换并不相同。由于该部分实现较为复杂,并且缓冲部分与计算部分交织在一起,所以,采取交叉讲解的方式。
由于SAD的立体匹配同时需要两幅图像的数据,所以需要两个缓冲区,每个缓冲区的结构与缓冲方式与行缓冲区与窗口缓冲区完全相同。以下内容依然使用3×3的SAD窗口为例。图37与图图38分别为双目摄像头拍摄的左图与右图中所缓冲的三行数据。
以图39为待匹配图为例,在SAD立体匹配计算中,首先,在图39中取出3×3的窗口数据,在图 40中取出对应视差为0的3×3窗口数据(图图41中虚线框内的部分),然后,计算这两个窗口的SAD 匹配代价。
下一步计算视差为1时的SAD匹配代价,所需的数据区域如图42与图43中虚线框内的部分。重复以上步骤直到计算的视差达到设定的阈值。
接着,左图窗口向右移动一个像素,重复以上步骤。在计算视差值为0的窗口匹配代价时,所需的数据区域如图44与图45中虚线框所示。
SAD匹配代价计算过程可以发现它们的计算具有重复的区域。该重复部分如图46阴影部分所示,同样在其他视差的计算中也有重复的区域。因此,如果已知计算每一列(3×1的大小)的SAD匹配代价,通过少量的计算便可从某一像素不同视差的SAD匹配代价得到其右邻像素不同视差的SAD匹配代价。
在计算某一行的SAD匹配代价后,需要将窗口在图像中下移一行,计算下一行的匹配代价,根据前述分析同样需要计算每列的匹配代价。经过仔细观察发现,当前行中的某一列与下一行的对应列同样有重复计算的区域。如图47与图48中方框区域分别为当前行第一列的SAD匹配代价与下一行第一列的SAD 匹配代价,图49中阴影部分为它们计算中重复区域,因此通过很少的计算量便可从当前行每列的匹配代价计算出下一行每列的匹配代价,如果窗口较大计算量便会急剧下降。
通过上述分析,发现可以通过缓冲当前行每列的匹配代价来优化运算速度。即计算下一行每列的匹配代价时可通过缓冲区中的数据计算得到。缓冲区的设计结构中,该缓冲区的宽为图像的宽度减去最大视差设定的阈值(MAX_D)(之所以要减去MAX_D的原因是位于图像的开始部分(最后的MAX_D列)无法计算在MAX_D范围内所有视差值所对应的匹配代价)。由于每列中每个视差值都有一个匹配代价,所以该缓冲区的长为MAX_D。在HLS技术中对该缓冲区设置了HLS_ARRAY_RESHAPE指令,可以改变原数组每个单元的大小。针对本缓冲区,由原来每次输入一个数据改为每次输入MAX_D个数据,以便后续计算可以并行处理。
为了进一步提高运算速度,从当前行所有视差值对应的匹配代价到下一行所有视差值对应的匹配代价采用并行计算结构,且每次输出MAX_D个数据。每个位置的计算结构完全相同,以缓冲区的第一个位置为例,从当前行当前列当前视差匹配代价得到下一行当前列当前视差匹配代价的步骤为:将缓冲区内的数值加上新进入该列像素的匹配代价,减去离开该列的像素的匹配代价。因此,该计算结构为从缓冲区出发经过加法器再经过减法器,最后再回到缓冲区。可以观察到每个缓冲区的位置上都有这样的加法器与减法器,所以每个视差的匹配代价为并行计算。新添匹配代价与去除匹配代价均采用直接计算方式,显然去除匹配代价是可以被缓冲无需再次计算。但采用这样的结构会浪费大量的FPGA资源,同时,由于计算该匹配代价时仅用到一步相减的操作,再次计算的结构和缓冲结构需要的计算时间是相同的,因此,可以使用再次计算的方式代替缓冲结构。
在得到每列的所有视差的匹配代价后需要将其合成整个窗口的匹配代价,针对每个固定的窗口,不同的视差值对应的匹配代价只有一个,因此该缓冲区是一个宽为1,长为MAX_D的缓冲区,同样为了并行处理该缓冲区也被设置了HLS_ARRAY_RESHAPE指令。
经过窗口匹配代价的分析,相邻两个像素的窗口匹配代价仅有一列不同,类似列匹配代价的计算过程,该过程为加上新进入该窗口的一列匹配代价,减去离开窗口的一列匹配代价。但由于列匹配代价缓冲区的端口瓶颈问题导致不能同时读取这么多列的匹配代价,该瓶颈的解决办法与行缓冲区瓶颈问题的解决办法相同(即创建一个小的窗口列缓冲区来解决这个问题)。该缓冲区结构的该缓冲区的宽与窗口的宽相同。该窗口列缓冲区与列缓冲区之间的交互方式与行缓冲区与窗口缓冲区之间的交互方式相同。该缓冲区同样被设置了HLS_ARRAY_RESHAPE指令。
窗口匹配代价的计算结构如50所示,斜线阴影区的部分为窗口列缓冲区,方格状阴影区的部分为窗口匹配代价缓冲区。与窗口缓冲区相同,在窗口列缓冲区中有三个操作:缓冲区内数据流动、数据流入缓冲区和数据流出缓冲区。如前所述,假设已经知道当前窗口的匹配代价,则与之右邻窗口的匹配代价为当前窗口的匹配代价加上移入窗口列缓冲区的列匹配代价减去移出窗口列缓冲区的列匹配代价。窗口匹配代价缓冲区中的数据与流出窗口列缓冲区的数据经过减法器,其结果与流入窗口匹配代价缓冲区的数据经过加法器,最后回到窗口匹配代价缓冲区内。在图50中,每个视差值均有这样一个加法器与减法器,所以它们可并行执行。
在计算所有视差的匹配代价的下一步是视差计算。该步采用赢者通吃的方式在不同视差对应的匹配代价中选择最小值。本来应采用逐个比较匹配代价,设置一个寄存器记录当前比较中匹配代价的最小值,但下一次比较会依赖于该寄存器的值,导致无法同时计算不同视差值对应的匹配代价。为了解决该问题,本发明设计了流水线处理比较最小匹配代价的方法。
首先需要设置两个缓冲区,第一个缓冲区记录当前所有比较中匹配代价的最小值,第二个缓冲区记录当前所有比较中最小匹配代价对应的视差值。这两个缓冲区结构完全相同,但没有设置任何HLS指令,所以,该缓冲区为RAM的结构,且每次仅能读取缓冲区内的一个元素。
图51为视差计算的结构图,三个不同的缓冲区在图中已经标注。最小视差缓冲区的第一个位置被初始化为0,最小匹配代价缓冲区的第一个位置被初始化为窗口匹配代价缓冲区的第一个数据。最小匹配代价缓冲区的位置与窗口匹配代价缓冲区的第二个位置被连接到一个比较器中,该比较器比较第一个与第二个匹配代价的大小,后续的比较器比较当前最小匹配代价与下一匹配代价。流出比较器后的数据经过两个数据选择器,分别选择当前最小匹配代价与当前最小匹配代价的视差值并将其写入到最小匹配代价缓冲区与最小视差缓冲区内。该方法每次比较使用的缓冲区位置并不相同,没有数据依赖本章小结
本章介绍了本发明使用的双目摄像头与FPGA的开发板以及本发明使用到的HLS技术。同时,通过分析带截断值Sobel变换的计算结构,设计了可以使该算法在FPGA中并行且流水线的缓冲与计算结构。分析SAD立体匹配的计算结构,设计了该算法的FPGA缓冲与计算结构,该结构可以同时计算视差范围内所有视差的匹配代价。因此,不论视差范围设置为多大,在FPGA运行的时间是相同的,但是随着视差范围的增大,占用FPGA中的资源也会变多。由于绿色作物区域提取算法计算结构较为简单,不需要使用缓冲区,因此,本发明直接设计了其在FPGA中的计算结构。
(四)下面结合实验对本发明对本发明作进一步描述。
1、立体匹配图像预处理。
在本发明设计的整个流程中,首先,需要对原图像进行预处理,后续的其他步骤将直接对预处理后的结果进行操作。预处理的过程,第一步是采集双目摄像头拍摄的图像,第二步将原图进行矫正与校正。第三步将上一步的彩色图片转换为灰度图。
2、绿色作物区域提取算法。
绿色作物区域提取算法在FPGA上实现时,绿色作物区域提取的阈值计算模块的时间耗费与资源占用统计分别如表2与表3所示(这两个表中的数据来源于Xilinx VivadoHLS 2017.4软件,本发明表中的数据来源相同),作物区域提取的绿色区域确定模块的时间耗费与资源占用统计分别如表4与表5所示。以绿色作物区域提取的阈值计算模块为例,在表2中可见该运算在运行一次需要2079003个时钟周期,但由于本发明处理的对象为视频流,采用了流水线技术来处理,因此每帧需要耗费2079004个时钟。同时,表2 中估计值为8.42,即表示每个周期最少耗费8.42ns,但在不同芯片中实际运行时,每个周期的时间可能偏高或偏低,偏高或偏低的范围为1.25ns(图中的不确定值),所以本发明使用估计值与不确定值相加来计算每个周期耗费的时间。经过计算,可以知道绿色作物区域提取的阈值计算模块每帧需要耗费的时间约为20.10ms,绿色作物区域提取的绿色区域确定模块每帧需要耗费的时间约为16.34ms。这两个模块在执行时采用并行流水线结构,绿色作物区域提取在FPGA中的计算时间是两个时间中的最大值,即20.10ms。
表2绿色作物区域提取算法的阈值计算时间耗费
表3绿色作物区域提取算法的阈值计算资源占用
表4绿色作物区域提取算法的绿色区域确定时间耗费
表5绿色作物区域提取算法的绿色区域确定资源占用
在HLS的平台中只能逐个读取图像中的像素,读取1920×1080的图像需要2073600个时钟周期。由于使用了并行与流水线的技术,使得读取图像与处理图像之间可以并行,并且图像处理中不同的步骤也可以并行,每个模块所需的时钟周期与单独加载图像需要的时钟周期接近。
以绿色作物区域提取的阈值计算模块为例,表3显示了该模块所使用的FPGA芯片的资源数目,由于该模块设计并不复杂,同时XCZU9EG-2FFCB1156E芯片内部的硬件资源数目较多,可见硬件资源占用率近似为0(表3最后一行0前的‘~’表示约等于)。
表6为该变换在本发明中使用的FPGA平台与PC平台的运算时间对比表。其中,PC平台中采用了三个不同型号的CPU,并在单线程下运行。可见,虽然在FPGA中该变换速度在四者中最快,但由于FPGA 的运行频率与PC的外频速度相比较低,导致运算速度提升不大。另一方面由于该变换较为简单,在PC 中运算时算法的计算量较小。该模块可以与后续模块共同实现在FPGA中,简化算法运行方式,提高整体的运行效率,减少PC的负担。
表6部分平台绿色作物区域提取算法运算时间比对表
本发明将绿色作物区域提取的f值设置为0.14,并结合立体匹配信息为田间机器人提供导航信息。
3、BM立体匹配算法。带截断值的Sobel。
本发明设计采用的截断值为31,表7中显示了带截断值的Sobel变换经过FPGA加速所需要的时间,可见,处理每帧的时间耗费大约为15.36ms。表8显示了该变换在FPGA中的资源占用情况。
表7带截断值Sobel变换运算时间耗费
表8带截断值Sobel变换资源占用
表9为该变换在本发明中使用的FPGA平台与PC平台的运算时间对比表。其中,PC平台中采用了三个不同型号的CPU,并在单线程下运行。与绿色作物区域提取相同,由于其计算量不大,在FPGA中实现并没有绝对优势。但绿色作物区域提取、截断值的Sobel变换和基于SAD的立体匹配三个模块可以在 FPGA中同时实现,且它们之间可以配合使用,简化算法运行方式,提高整体的运行效率,将PC从该任务中解放出来。另外,FPGA的造价会比PC机低很多。如果将带截断值的Sobel变换与绿色作物区域提取算法在PC中实现,仍然不及FPGA中SAD匹配过程的运算速度,对整体的运算并没有实质上的提升。
表9带截断值Sobel变换运算时间对比表
由于田间环境较为复杂,所提取出的纹理信息较多,因此,BM匹配算法匹配效果将会更好,这是本发明设计选择该算法的主要原因,且后续将使用Middlebury平台进一步进行验证。
4、基于SAD的立体匹配。
本发明采用的SAD窗口大小为15×15,最大视差阈值为256,在FPGA平台上运行的时间如表10 所示,对于1920×1080图像处理每帧图像大约需要19.38ms。表11为SAD匹配占用FPGA的资源数目,由于本发明中使用的缓冲区较多,BRAM_18K使用了316个,该资源每个大小为18K。为了达到并行处理,设计中使用了大量的加法器,减法器等模块,所以,算法耗费了大量的FF与LUT。
表10 SAD匹配运算时间
表11 SAD匹配资源占用
同样,BM立体匹配算法在FPGA中的运行时间是取带截断值Sobel变换与SAD立体匹配算法运行时间的最大值,为19.38ms。且由于BM立体匹配算法与绿色作物区域提取算法采用的是并行执行的方式,因此两个算法整体的运行速度同样是取运行时间的最大值,为20.10ms。
表12为BM立体匹配在本发明中使用的FPGA平台与PC平台的运算时间对比结果,其中,PC平台中采用了三个不同型号的CPU,并在单线程下运行。本发明中BM立体匹配的帧率可达到51.59FPS,完全满足农业机器人等实时处理。且本发明设计的FPGA速度大约为IntelCore i3-2130处理器的616倍,Inter Core i5-3470处理器的474倍,Intel Core i7-8500H处理器的723倍。
在PC中对于这种运算量大的操作,一般会使用多线程技术,表13展示了在IntelCore i7-8500H(2.2GHz) 下,FPGA与PC在多线程下的运行时间对比结果,同时还与OpenCV中实现算法的速度比较,OpenCV 中针对1920×1080分辨率采用6线程,且使用了Inter公司CPU的SSE2指令集加速。从表13中可见,在本发明设计中,FPGA速度约是在Intel Core i7-8500H CPU中双线程的369倍,4线程的192倍,8线程的138倍,OpenCV的38倍(但OpenCV的加速仍然无法达到实时处理)。
表12单线程下SAD匹配运算时间对比表
表4.12多线程下SAD匹配运算时间对比表
Table 4.12 Chart of SAD matching operation time comparison tableunder multi-thread
图52为不同算法立体匹配的视差图,所有的算法视差搜索范围均为256,匹配窗口的大小均为15,可见,本发明设计实现的BM算法中草莓区域匹配效果最好,图像的左边由于两个摄像头之间存在视野盲区,这是立体匹配技术无法匹配到的地方,因此左边部分效果并不好。与SAD的匹配结果对比,BM算法加入了带截断值的Sobel变换,其边界等细节明显比SAD算法好。NCC、SSD、ZSSD算法在草莓的边界处匹配效果较差,Census算法明显效果最差。综上所述,由于田间中土地与作物环境复杂,加入的带截断值Sobel变化会显著提高匹配效果,接下来详细介绍BM算法在复杂环境下的优势。
本发明使用3.0版本的Middlebury平台对BM算法进行测试,并挑选其中的Motorcycle、Adirondack、 Jadeplant三个图集对结果其进行描述。式(4-1)为Middlebury计算匹配误差方法,B为误匹配率,N为像素总数,dC为待测试视差图像的像素值,dT为真实的视差图像素值,δd为误差阈值[6]。
表14为不同的立体匹配算法在这三个图集上的误匹配率以及平均误差。其中,误匹配的阈值设置为 2.0。仅看BM算法,随着三个图集纹理信息的减弱,其误匹配率在逐渐升高,由于Jadeplant图集的背景绝大部分均为黑色,几乎没有纹理信息,BM的误匹配率高达43.32%。对于Adirondack图集,由于该图集纹理信息较强,在所有的算法中,BM的误匹配率最低,而Census算法的误匹配率则最高。在Jadeplant 图集中,BM算法的误匹配率最高。因此,BM算法适合在纹理信息较多的情形下使用,适合田间环境中绿色作物的立体匹配。
表14 Middlebury平台下各算法误匹配率
4、绿色作物深度图。在绿色作物区域提取与BM立体匹配后,为了方便后续的处理,将绿色作物区域提取后的图像与BM立体匹配后的图像合成绿色作物的深度图是必要的。由于在立体匹配中我们直接得到的是视差图,需要将其转化为深度图,具体的转换方式如式(2-7)或式(2-8)所示。式中的参数可以通过相机标定的结果或摄像头参数中得到。在得到深度图后,结合绿色作物区域提取后的图像得到绿色作物的深度图,具体过程是将绿色作物区域图像中白色区域(即绿色作物区域)在绿色作物的深度图中用绿色通道表示其深度信息,黑色的区域(即背景区域)在绿色作物的深度图中用蓝色表示其深度信息,深度的取值为深度图中的取值。绿色作物深度图的结果中由于图像中最大的像素值为255,但深度确实无限的,为了将其显示出来,该结果图经过处理后的效果图。具体的处理过程是将深度大于255的部分在图像中以像素值 0显示。像素取值越大,即绿色或蓝色的程度越大,在图像中越亮,表明深度越深。田间作物机器人可根据绿色作物的深度图,判断其距绿色作物或背景的距离,为机器人提供导航信息。
(五)下面结合效果对本发明作进一步描述。
本发明分析BM立体匹配算法中的两个步骤和绿色作物区域提取的计算过程与结构,根据FPGA芯片在图像处理中可以并行与流水线处理的特性,使用Xilinx HLS技术在FPGA中分别设计了带截断值的Sobel 变换和基于SAD立体匹配算法的缓冲与计算结构,并设计了和绿色作物区域提取算法的计算结构。
本发明在FPGA中分别实现了带截断值的Sobel变换、基于SAD的立体匹配和绿色作物区域提取算法。
通过Middlebury平台实验验证了本发明设计所实现的BM的立体匹配算法在田间的高纹理环境下比其他算法效果均好,但随着纹理信息的减少,BM算法的匹配效果在逐渐下降。
本发明生成了绿色作物区域结果图和BM匹配算法的视差图,并通过其生成了绿色作物的深度图。
其中,带截断值的Sobel变换与绿色作物区域提取算法由于其计算结构并不复杂,计算量也比较小,在PC中的运行速度与FPGA中相似。但本发明设计中这两个算法可与SAD立体匹配算法配合使用,简化算法运行方式,提高整体的运行效率,减少PC负担,造价也会比PC机较低。对分辨率为1920×1080的图像,算法的整体速度达到49.75FPS。其中,BM立体匹配在FPGA中的速度可达51.59FPS,在CPU以单线程运行时,速度约为Intel Core i3-2130处理器的616倍,Inter Core i5-3470处理器的474倍,Intel Core i7-8500H处理器的723倍。在Intel Core i7-8500H中以多线程运行时,本发明设计中FPGA速度约是在CPU 中双线程的369倍,4线程的192倍,8线程的138倍,OpenCV相似效果算法的38倍。综上所述,本发明满足1920×1080 30FPS的设计需求,实时性较高,可应用于田间机器人作业等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于双目视觉绿色作物视频流的深度图FPGA实现方法,其特征在于,所述基于双目视觉绿色作物视频流的深度图FPGA实现方法包括:
在FPGA端利用超绿特征提取方法对绿色作物区域的图像进行提取;
对校正后的绿色作物区域图像进行截断值的Sobel变换、基于SAD的立体匹配,获取绿色作物区域图像视差图;
绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图。
2.如权利要求1所述的基于双目视觉绿色作物视频流的深度图FPGA实现方法,其特征在于,在FPGA端利用超绿特征提取方法对绿色作物区域的图像进行提取前,需进行立体匹配图像预处理,具体包括:
第一步,采集双目摄像头拍摄的图像;
第二步,将原图进行矫正与校正;
第三步,将第二步的彩色图片转换为灰度图。
3.如权利要求1所述的基于双目视觉绿色作物视频流的深度图FPGA实现方法,其特征在于,在FPGA端利用超绿特征提取方法对绿色作物区域的图像进行提取的方法包括:用2倍的绿色灰度值减去红色灰度值再减去蓝色灰度值,计算如下:
超绿特征提取完毕后,进行阈值分割,阈值的计算式为:Th=Gav+f×(Gmax-Gav);其中,Th为阈值,Gav与Gmax分别为超绿特征像素的平均值与最大值,f为权重因子;当f取值为-0.5-0.5时,得到较好的分割效果;
最后将阈值与超绿特征值进行比较,超绿特征大于等于阈值的是绿色区域,否则为非绿色区域。
4.如权利要求1所述的基于双目视觉绿色作物视频流的深度图FPGA实现方法,其特征在于,对校正后的绿色作物区域图像进行截断值的Sobel变换包括:使用3阶的Sobel算子,该算子式为:
带截断值的Sobel变换计算时与原图像进行卷积操作,在原图像中从左到右,从上到下依次移动卷积核,并与原图像对应位置相乘,然后将九个位置的结果相加作为该点的像素值;
经上述计算后对于像素值小于0或大于255的图像,在原Sobel变换的基础上进行截断处理;设定一个阈值,记为T,当变换后的值小于-T时记该值为-T,当变换后的值大于T时,记该值为T,当处于[-T,T]之间时,保留原来的值,得到的所有值都将变为区间[-T,T]内的值;
将[-T,T]区间的值,映射到[0,2T]内,原来变换后的值将都在[0,2T]内。
5.如权利要求1所述的基于双目视觉绿色作物视频流的深度图FPGA实现方法,其特征在于,基于SAD的立体匹配的方法包括:在对应的窗口内的每一个位置分别求差,并取绝对值,然后将每个位置的对应计算结果相加作为整个窗口的匹配代价;
获取绿色作物区域图像视差图中,B为误匹配率,N为像素总数,dC为待测试视差图像的像素值,dT为真实的视差图像素值,δd为误差阈值;
6.如权利要求1所述的基于双目视觉绿色作物视频流的深度图FPGA实现方法,其特征在于,绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图,包括:
xl与xr分别是P点在左右成像平面图像的位置,视差定义为d=xl-xr;利用相似三角形的原理,推导出Z值;
当两个摄像头的主点位置不同时,Z值公式变为下式;与分别为左右摄像头主点位置的横坐标
7.如权利要求1所述的基于双目视觉绿色作物视频流的深度图FPGA实现方法,其特征在于,绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图,进一步包括:
将绿色作物区域图像中白色区域在绿色作物的深度图中用绿色通道表示深度信息,黑色的区域在绿色作物的深度图中用蓝色表示深度信息,深度的取值为深度图中的取值;将深度大于255的部分在图像中以像素值0显示;像素取值越大,绿色或蓝色的程度越大,在图像中越亮,深度越深。
8.一种实施权利要求1所述的基于双目视觉绿色作物视频流的深度图FPGA实现方法的,其特征在于,基于双目视觉绿色作物视频流的深度图FPGA实现系统,其特征在于,所述基于双目视觉绿色作物视频流的深度图FPGA实现系统包括:
FPGA端,用于利用超绿特征提取方法对绿色作物区域的图像进行提取;对校正后的绿色作物区域图像进行截断值的Sobel变换、基于SAD的立体匹配,获取绿色作物区域图像视差图;
ARM端,与FPGA端连接,用于对立体匹配图像预处理,采集双目摄像头拍摄的图像;将原图进行矫正与校正;将彩色图片转换为灰度图。
9.如权利要求1所述的基于双目视觉绿色作物视频流的深度图FPGA实现系统,其特征在于,ARM端,还用于对绿色作物区域的图像提取后,与获取绿色作物区域图像视差图合成绿色作物的绿色深度图。
10.一种实施权利要求1所述的基于双目视觉绿色作物视频流的深度图FPGA实现方法的田间作物机器人。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910511012.3A CN110191330A (zh) | 2019-06-13 | 2019-06-13 | 基于双目视觉绿色作物视频流的深度图fpga实现方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910511012.3A CN110191330A (zh) | 2019-06-13 | 2019-06-13 | 基于双目视觉绿色作物视频流的深度图fpga实现方法与系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110191330A true CN110191330A (zh) | 2019-08-30 |
Family
ID=67721672
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910511012.3A Pending CN110191330A (zh) | 2019-06-13 | 2019-06-13 | 基于双目视觉绿色作物视频流的深度图fpga实现方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110191330A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111814675A (zh) * | 2020-07-08 | 2020-10-23 | 上海雪湖科技有限公司 | 基于fpga支持动态分辨率的卷积神经网络特征图组装系统 |
CN112965509A (zh) * | 2021-02-09 | 2021-06-15 | 内蒙古大学 | 一种两轮自平衡机器人的控制方法及系统 |
CN113329219A (zh) * | 2021-05-07 | 2021-08-31 | 华南理工大学 | 多输出参数可动态配置深度相机 |
CN113989383A (zh) * | 2021-10-23 | 2022-01-28 | 深圳慧源创新科技有限公司 | 一种提高双目测距准确度和范围的方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102339062A (zh) * | 2011-07-11 | 2012-02-01 | 西北农林科技大学 | 基于dsp和双目视觉的微型农业机械导航与远程监控系统 |
CN102800083A (zh) * | 2012-06-19 | 2012-11-28 | 中国农业大学 | 基于双目视觉网格划分匹配算法的农作物喷雾定位方法 |
CN103778632A (zh) * | 2014-01-18 | 2014-05-07 | 南京理工大学 | 一种基于fpga的立体匹配方法 |
CN106338989A (zh) * | 2016-08-01 | 2017-01-18 | 内蒙古大学 | 一种田间机器人双目视觉导航方法及系统 |
CN106525004A (zh) * | 2016-11-09 | 2017-03-22 | 人加智能机器人技术(北京)有限公司 | 双目立体视觉系统及深度测量方法 |
CN106952304A (zh) * | 2017-03-22 | 2017-07-14 | 南京大学 | 一种利用视频序列帧间相关性的深度图像计算方法 |
CN108010033A (zh) * | 2016-11-02 | 2018-05-08 | 哈尔滨派腾农业科技有限公司 | 一种农田场景图像采集和处理方法 |
-
2019
- 2019-06-13 CN CN201910511012.3A patent/CN110191330A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102339062A (zh) * | 2011-07-11 | 2012-02-01 | 西北农林科技大学 | 基于dsp和双目视觉的微型农业机械导航与远程监控系统 |
CN102800083A (zh) * | 2012-06-19 | 2012-11-28 | 中国农业大学 | 基于双目视觉网格划分匹配算法的农作物喷雾定位方法 |
CN103778632A (zh) * | 2014-01-18 | 2014-05-07 | 南京理工大学 | 一种基于fpga的立体匹配方法 |
CN106338989A (zh) * | 2016-08-01 | 2017-01-18 | 内蒙古大学 | 一种田间机器人双目视觉导航方法及系统 |
CN108010033A (zh) * | 2016-11-02 | 2018-05-08 | 哈尔滨派腾农业科技有限公司 | 一种农田场景图像采集和处理方法 |
CN106525004A (zh) * | 2016-11-09 | 2017-03-22 | 人加智能机器人技术(北京)有限公司 | 双目立体视觉系统及深度测量方法 |
CN106952304A (zh) * | 2017-03-22 | 2017-07-14 | 南京大学 | 一种利用视频序列帧间相关性的深度图像计算方法 |
Non-Patent Citations (6)
Title |
---|
NAKEUN CHOI,ET AL: "Robust Stereo Matching Based on Cost Volume Fusion for Optimal Disparity Estimation", 《 2019 IEEE INTERNATIONAL CONFERENCE ON CONSUMER ELECTRONICS (ICCE)》 * |
STEFANIA PERRI,ET AL: "Design of Real-Time FPGA-based Embedded System for Stereo Vision", 《2018 IEEE INTERNATIONAL SYMPOSIUM ON CIRCUITS AND SYSTEMS (ISCAS)》 * |
WENQIANG WANG,ET AL: "Real-Time High-Quality Stereo Vision System in FPGA", 《IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY》 * |
岳陈平: "基于SAD算法的立体匹配硬件实现的研究", 《万方数据》 * |
张志斌,等: "基于颜色特征的绿色作物图像分割算法", 《农业工程学报》 * |
高浩然: "基于视觉显著性的立体匹配算法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111814675A (zh) * | 2020-07-08 | 2020-10-23 | 上海雪湖科技有限公司 | 基于fpga支持动态分辨率的卷积神经网络特征图组装系统 |
CN111814675B (zh) * | 2020-07-08 | 2023-09-29 | 上海雪湖科技有限公司 | 基于fpga支持动态分辨率的卷积神经网络特征图组装系统 |
CN112965509A (zh) * | 2021-02-09 | 2021-06-15 | 内蒙古大学 | 一种两轮自平衡机器人的控制方法及系统 |
CN113329219A (zh) * | 2021-05-07 | 2021-08-31 | 华南理工大学 | 多输出参数可动态配置深度相机 |
CN113989383A (zh) * | 2021-10-23 | 2022-01-28 | 深圳慧源创新科技有限公司 | 一种提高双目测距准确度和范围的方法 |
CN113989383B (zh) * | 2021-10-23 | 2024-06-04 | 深圳慧源创新科技有限公司 | 一种提高双目测距准确度和范围的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110191330A (zh) | 基于双目视觉绿色作物视频流的深度图fpga实现方法与系统 | |
Yang | Dealing with textureless regions and specular highlights-a progressive space carving scheme using a novel photo-consistency measure | |
CN108470370B (zh) | 三维激光扫描仪外置相机联合获取三维彩色点云的方法 | |
Zhang et al. | Light-field depth estimation via epipolar plane image analysis and locally linear embedding | |
Gruber et al. | Real-time photometric registration from arbitrary geometry | |
CN106525004A (zh) | 双目立体视觉系统及深度测量方法 | |
GB2465791A (en) | Rendering shadows in augmented reality scenes | |
WO2008109567A4 (en) | System and method for tracking three dimensional objects | |
Hernández et al. | Overcoming shadows in 3-source photometric stereo | |
Maier et al. | Super-resolution keyframe fusion for 3D modeling with high-quality textures | |
Gruber et al. | Image-space illumination for augmented reality in dynamic environments | |
CN109769109A (zh) | 基于虚拟视点合成绘制三维物体的方法和系统 | |
US12062145B2 (en) | System and method for three-dimensional scene reconstruction and understanding in extended reality (XR) applications | |
JP6285686B2 (ja) | 視差画像生成装置 | |
WO2022217470A1 (en) | Hair rendering system based on deep neural network | |
CN103310482B (zh) | 一种三维重建方法及系统 | |
CN116681839B (zh) | 一种基于改进NeRF的实景三维目标重建与单体化方法 | |
US10504235B2 (en) | Method for generating three dimensional images | |
Zhang et al. | Dense scene flow based on depth and multi-channel bilateral filter | |
CN110430416B (zh) | 自由视点图像生成方法和装置 | |
CN116309755A (zh) | 图像配准方法和表面法向量重建方法、系统及电子设备 | |
US11410378B1 (en) | Image processing for generating three-dimensional shape and spatially-varying reflectance of the object using a deep neural network | |
Khadka et al. | Object 3D reconstruction based on photometric stereo and inverted rendering | |
Guggeri et al. | Shape reconstruction from raw point clouds using depth carving | |
Palma et al. | Improving 2D-3D Registration by Mutual Information using Gradient Maps. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190830 |