机器视觉大作业
基于 PYNQ-Z2 的红色标志物
双目测距系统设计
学 院(系):
专
业:
学 生 姓 名:
学
号:
完 成 日 期:
题目
摘
要
基于立体视觉的测距技术在交通、军事、航天等领域应用广泛。相比传统测距方式具有非
接触、高效率、抗干扰等优势。双目视觉是立体视觉技术的重要分支,与单目视觉相比,信息
量更大,能够实现三维重建。早期的双目视觉研究多数基于 PC 平台,不适用于恶劣、危险的应
用环境,也不满足灵活、便携等要求。针对上述情况,基于嵌入式平台的双目测距技术受到重
视并迅速发展。相比于单一的 ARM、DSP 等平台,PYNQ-Z2 平台单芯片集成 FPGA+ARM 架构,
具有可扩展性好、性能高、功耗低、成本低的优势。并且可以方便使用 python 语言进行编程,
本次大作业研究并设计一种基于 PYNQ-Z2 的双目视觉测距系统。
PYNQ-Z2 平台 2018 年被 Xilinx 正式发布,功能强悍,并且笔者可以在接触到,因此本次
大作业选择它进行设计。本文第二章介绍硬件方案,第三章以及第四章介绍软件方案,不过都
只停留在一个大概理论方向上,没有进行细致地、实践地运行,因此一定有不周到不全面之处。
而笔者在设计过程中对于视觉处理很有兴趣,希望在之后的毕业设计中能够进行进一步的作品
完善。
关键词:FPGA;PYNQ-Z2;测距;双目
- I -
题目
目
录
要.....................................................................................................................................I
摘
1 设计目标及灵感来源..........................................................................................................1
2 硬件方案..............................................................................................................................2
2.1 PYNQ-Z2 平台简介.................................................................................................... 2
2.2 摄像头..........................................................................................................................3
2.3 显示屏.........................................................................................................................4
3 图像预处理与硬件加速......................................................................................................4
3.1 硬件加速原理.........................................................................................................4
3.2 图像预处理.............................................................................................................5
3.2.1 高斯滤波..........................................................................................................5
3.2.2 颜色空间转换..................................................................................................6
3.2.3 颜色阈值分割..................................................................................................6
4 测距算法............................................................................................................................7
4.1 测距算法概述...........................................................................................................7
4.2 标志物中心提取.......................................................................................................8
4.3 三维坐标恢复...........................................................................................................9
5 总结与体会..........................................................................................................................10
参考文献..................................................................................................................................10
- II -
机器视觉大作业
1 设计目标及灵感来源
在 2018 年第二届全国大学生 FPGA 邀请赛上,由于 FPGA 在处理图像方面卓越的
性能,大部分作品都与视觉及图像处理有关系,其中一个取得一等奖的队伍在作品完善
度以及性能上都做得很好,作品功能便是利用 FPGA 实现双目测距,受其启发,本文打
算设计类似的项目,本文查找了相关资料并确定如下两个硕士研究生毕业作品为最终设
计目标:
图 1 硕士论文中参考作品
分析作品,可以看出来实现该目标的硬件并不复杂,就是一个 FPGA 平台外加两个
摄像头,这些硕士毕业论文的不同之处也仅是摄像头型号以及 FPGA 平台种类不同,在
算法上可能也因平台特点而有所不同。此外,这两份毕业论文的发表时间一个在 2016
年 6 月[1],另一个在 2016 年 1 月[2]。可见基于 FPGA 的视觉研究还是有一定意义的。
FPGA 具有大量的逻辑资源,使得电路设计更加灵活,本文根据上面对于相关资料
的调研,设计了基于 PYNQ-Z2 的双目视觉测距方法,该 FPGA 平台具有较快的图像预
处理速度和较高的测量精度。本文实现流程主要包括图像采集和显示、图像预处理、三
维坐标恢复。图 2 为笔者利用 processon 设计的双目测距系统结构框图:
图 2 基于 PYNQ-Z2 平台的双目测距系统结构
–1–
机器视觉大作业
PC 机通过网口和串口与控制平台进行通信。嵌入式控制平台选用 PYNQ-Z2 平
台,通过 PYNQ-Z2 平台控制相机 A 与相机 B 进行图像采集,相机图像采集对象为
红色标志物,获取其在左、右摄像机的成像,计算中心点的视差即可恢复标志物中心的
三维信息。
2 硬件方案
双目视觉测距技术的基础是从不同视角进行图像采集产生的视差。在恢复三维信息
过程中需要的摄像机参数等模型信息可以通过摄像机标定和立体标定获得。对于两个摄
像机位置和畸变产生的误差可以在立体校正过程实现修正,但是由于时间以及能力问
题,没有亲自实践,因此本文没有介绍系统中的摄像机标定结果和图像标志物中心点校
正的实现方法。下面对本文设计的完整测距系统进行简要介绍。参考了文献[3]。
2.1 PYNQ-Z2 平台简介
PYNQ-Z2 开发板是 Xilinx 公司大学计划支持 PYNQ 开源框架的第二代最新开发
平台,根据第一代的反馈做功能升级。在 2018 年正式发布。PYNQ 开源框架可以使嵌
入式编程用户在无需设计可编程逻辑电路的情况下充分发挥 Xilinx PYNQ-Z2 SoC 的功
能。
PYNQ-Z2 除支持传统 FPGA 开发方式外(笔者认为该方式即通过 verliog 语言进
行编程),还可支持 Python 进行 SoC 编程,并且代码可直接在 PYNQ-Z2 上进行开发和
调试。可编程逻辑电路以硬件库的形式导入并且可以通过 API 编程,这种方式基本上与
软件库的导入和编程方式相同。
图 3 PYNQ-Z2 接口
–2–
机器视觉大作业
上图 3 为 PYNQ-Z2 开发板,可以看到它的接口是比较丰富的,配备有以太网,HDMI
输入/输出,MIC 输入,音频输出,Arduino 接口,树莓派接口,2 个 Pmod,用户 LED,
按钮和开关。 兼容树莓派连接器、Arduino 屏蔽连接器以及 Pmod 连接器可以支持多种
配件拓展,同时这些接口也可以用作 GPIO。
图 4 PYNQ-Z2 及其底板
上图为笔者在所学习过的一块开发板,它由主控板和底板组成,其中底板是为进行
FPGA 培训而制作的。由图 3 可知,FPGA 具有常见单片机所拥有的基本引脚功能,可
控制一些常见外设。不过,它的优势还是在于进行高速的图像处理。本文所设计的系统
中,拟使用它的两个 pmod 接口来与摄像头通信。
图 5 Jupyter Notebook 在线编辑工具
PYNQ-Z2 最重要的特点是可以使用 Python 进行编程,并且提供了基于 Web 访问的
Jupyter Notebook 在线编辑工具。Jupyter Notebook(此前被称为 IPython notebook)是一
个交互式笔记本,支持运行 40 多种编程语言。它的本质是一个 Web 应用程序,便于创
建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。用途包括:
数据清理和转换,数值模拟,统计建模,机器学习等等。在本文中它的作用是能够令开
发者使用 python 语言对 PYNQ-Z2 编程,这样就不用学习繁杂的 verilog 语言。
2.2 摄像头
摄像头的选择是系统中很重要的一个部分,一个性能不好的摄像头,即使是使用了
再好的算法,系统功能也会很差,比如说笔者曾经用过一个 Open MV 摄像头,作为一
个开源摄像头项目,它可以很方便的使用 python 编程,但是本身参数受限。另外,选择
摄像头时不能想当然地选择像素大的摄像头,有许多因素需要考虑。本系统有如下选择:
–3–
机器视觉大作业
方案一:使用工业摄像头,工业摄像头性能强悍,拿迈德威视来说,它有一款摄像
头,型号为 MV-UBD32C/M,50 万像素,滚动快门方式,捕捉高速运动物体的能力非
常强大,有彩色和黑白可选。但是价格昂贵,仅摄像头就需要 1000 元起步,并且需要
额外选择镜头,使用专门的驱动库进行驱动,比较复杂。而本文所用摄像头拍摄静止物
体,因此不采用该方案。
方案二:采用感光芯片为 ov5640 的摄像头。它的感光芯片为 CMOS,CMOS 传感
器由于其便宜、省电、开发简便的优势得到了广泛应用。本文使用的图像传感器为 OV
公司的 OV5640。OV5640 传感器输出最高可达 500 万像素。
它具有低电压、高性能的特点,并且用户可利用其内部 ISP 处理器对每一帧图片的
属性进行精确调整,包括曝光、Gamma 校正、白平衡、色彩饱和度、色调、坏点检测
并去除、噪声减弱等。而它的价格仅为 100 元,因此,本文拟采用方案二。
2.3 显示屏
本文使用的 PYNQ-Z2 开发板上带有 HDMI 接口,板载芯片为 ADIADV7511 。
ADV7511 是一款高速高清晰度多媒体接口发送器。能够处理的数据速率高达 165MHz
(1080p@60H,UXGA@60Hz),输出数据速率高达 225MHz。将显示屏与 PYNQ-Z2
平台连接后可以在显示屏上显示图像,方便在后续开发系统过程中对系统进行调试。
3 图像预处理与硬件加速
3.1 硬件加速原理
自从 1985 年,Xilinx 公司制造处理世界上首款 FPGA 以来,FPGA 已经取得了长足
发展。最早的 FPGA 定位于门阵列和 ASIC 的替代品。随着工艺水平与设计方法的日新
月异,FPGA 的应用领域也从早期的逻辑胶合发展为集算法逻辑、数字信号处理 DSP、
高速串行收发以及软核/硬核处理器为一体的片上系统。ARM、DSP 等处理器中集成了
运算单元、存储单元及大量的总线接口,而 FPGA 具有大量的逻辑资源,内部仅有部分
专用模块如 PLL、DSP 单元等,其他的总线接口和功能模块需要自行设计。在工程开发
中,为了尽快完成功能的验证,经常需要调用多个库函数,代码优化较少,导致程序运
行和存储占用的空间较大。这就是一种以空间换时间的思路。FPGA 的流水线技术就是
将一条指令分解为多个指令后,并且使它们一个周期同时执行。这种技术大大减小了原
始指令的完成时间,通过增加硬件消耗提高代码执行效率。
–4–
机器视觉大作业
使用 FPGA 进行设计,可有效利用 FPGA 的逻辑资源。针对同一种操作,通过增加
相同的逻辑资源实行并行处理,将会成倍减少整体的处理速度,提高代码性能。这就是
以空间换时间思路实现硬件加速的具体实现[4]。
下面通过简单的 for 循环实现加法运算为例:“for(j=0;j<10j++){cj]=a[j]-b[il;}”。
这段代码如果用普通的 CPU 执行,需要多次使用 CPU 中的加法运算单元。对其他 CPU
来说,每当执行完一次加法运算后,需要重新执行再下一次,则整段代码需要 10 个硬
件周期完成。但是 FPGA 利用硬件并行实现方式,通过消耗逻辑资源再实现 9 个同样的
加法功能模块。此时,一个周期内将有 10 个加法功能模块同时运行。则同种假设下,
仅需要 1 个时钟周期就可以完成 10 次加法运算。所以硬件加速本质就是在 FPGA 内消
耗 10 倍的硬件资源达到将计算时间缩短至原来的 1/10 的目的。
3.2 图像预处理
图 6 图像预处理流程图
本文中系统的拟工作流程是对实测场景进行图像采集后,提取出标志物的中心坐
标,使用左、右摄像头获得的视差进行计算,从而恢复出三维坐标。为了提取标志物中
心,将对图像进行相应的图像预处理,预处理操作流程为上图 6。
3.2.1 高斯滤波
在图像的采集过程中,噪声的出现不可避免。由于噪声的存在,可能会导致图像模
糊或者重要特征丢失。并且后续在图像传输、处理过程中,由于噪声引起的误差可能会
产生累加,造成严重影响。所以对图像进行噪声抑制非常必要,本文系统选用高斯滤波
来进行噪声抑制。
高斯滤波器对于抑制正态分布的噪声非常有效,能够很好地起到平滑作用。高斯一
维滤波器的可用下式 3.1 表示:
g( )
x
exp
x
2
2
2
(3. 1)
这里ϭ是分布参数,调节它的大小可以改变滤波器的宽度,调整图像的平滑程度。
将一维滤波器延伸到二维,如下式 3.2 表示,在图像处理中经常用于将图像进行平滑处
理。
g( ,
x y
)
exp
x
2
y
2
2
2
(3. 2)
–5–