APP下载

基于ZYNQ 平台的图像拼接实验案例设计与实现

2020-12-16李欣泽侯长波

实验技术与管理 2020年10期
关键词:开发板桌面案例

于 蕾,李欣泽,侯长波

(1. 哈尔滨工程大学 信息与通信工程学院 电工电子国家级实验示范中心,黑龙江 哈尔滨 150000;2. 哈尔滨工程大学 信息与通信工程学院,黑龙江 哈尔滨 150000)

传统的 “电子系统设计实验” 课程中所采用的FPGA 芯片功能较单一,需要使用专用的硬件描述语言(Verilog HDL 或者VHDL),擅长C 语言或者嵌入式系统编程的工程师往往需要重新入门学习,不利于扩展后续功能[1]。在市场需求的推动下,为了满足下一代应用处理的需求,Xilinx推出了ZYNQ系列产品[2],ARM+FPGA 体系结构能够在芯片上提供软、硬件和I/O 可编程功能[3]。因此,对电子系统设计实验课程进行内容更新就成为必然要求。课程组对 “电子系统设计实验”课程体系进行了改革,引入了ZYNQ 平台[4]。

本实验案例基于ZYNQ 平台设计了一个图像拼接系统,为“电子系统设计实验”提供了实验教学素材[5]。要求学生通过学习实验案例,重点掌握如何基于ZYNQ 平台实现图像拼接算法。其中,算法功能是依托ZYNQ 的ARM 部分通过C++语言以及OpenCV 实现的[6],而图像拼接结果的显示是通过搭建Debian 桌面系统、对FPGA 部分的HDMI 接口进行配置和驱动来实现的。

在实验先导课中,学生能够学习使用ZYNQ 进行开发设计的全过程和基本概念,了解ZYNQ 学习的常用方法。在搭建硬件实现平台和算法移植的过程中,能够培养学生解决在ZYNQ 设计、调试过程中出现的问题的能力,为学生今后学习使用ZYNQ 进行软硬件协同设计和开发方面的工作打下良好基础。

1 图像拼接实验案例知识储备

为了避免学生局限于相关图像处理理论知识而无法完成电子系统设计实验内容的情况,本实验采用了Image Stitching 算法[7]。Image Stitching 算法是一种为了解决相机镜头广角有限问题而设计的开源图像拼接算法。

1.1 图像拼接基本原理

如图1 所示,使用Stitching_ detail 进行多幅图像拼接的大致流程如下。

(1)对待拼接图像进行尺寸缩放等预处理。

(2)使用ORB 算法对待拼接图像进行特征点检测并进行特征点描述[8]。

(3)对待拼接图像的特征点进行匹配。本实验中主要使用最近邻和次近邻法进行匹配。

(4)在特征点匹配后对待匹配图像进行筛选,保留置信度较高的待拼接图像用于接下来的操作。检查经筛选后的图片数量是否依旧满足要求(即大于等于2 张图片)。

(5)对所有待拼接图像进行相机参数校正。本实验中使用光束平差法进行相机参数校正,通过对求出的焦距取中值及所有图片的焦距来构建相机参数。

(6)由于光束平差法会引起波形效应,因此需要对图像进行波形矫正。

(7)为了避免图像重叠部分出现明显的边缘,需要对待拼接图像进行曝光补偿。

(8)对所有待拼接图像进行弯曲图像和融合掩码。

(9)为了防止图像融合时出现裂缝或是重影,需要使用图割法寻找重叠部分最相似的像素的连线(也称接缝线)。

(10)完成上述操作后,释放未使用的内存进行图像融合。本实验使用多频段融合。

图1 多幅图像拼接流程

1.2 图像拼接算法的移植

对图像拼接算法的移植,主要包括用于数据传输的NFS 文件系统以及用于显示的Debian 桌面系统。

本案例将PC 机上运行的虚拟机作为服务器,将开发板上的系统作为客户端。当使用远端文件时,只要使用mount 命令就可把远端虚拟机上的文件系统挂载在本地文件系统之下,并在开发板的系统中对虚拟机文件系统中的文件进行任意的读写操作。

本案例中使用Petalinux 来完成Debian 桌面系统的配置。Petalinux 是一套开发环境配置工具,能够降低uboot、内核、根文件系统的配置工作量,也可以利用Vivado 的导出硬件信息自动完成相关软件的配置。

1.3 实验硬件结构

本实验实现图像拼接算法的硬件平台结构图如图2所示。两片DDR3 DRAM 为图像拼接算法的实现提供了足够的内存空间。SD 卡用于ZYNQ 芯片BOOT 程序、Linux 操作系统内核、文件系统、图像拼接算法程序以及待处理的图片文件存储。PC 主机可使用USB转串口对开发板的系统进行调试。通过路由器连接主机和开发板,使主机和开发板位于同一网段,使用NFS服务挂载图像拼接所需要的相关库。开发板的 PS(processing system)部分通过读取并运行SD 卡中的程序,实现图像拼接。由于在PS 部分搭建了可视化的Debian 桌面系统,因此可以通过键盘和鼠标访问拼接完成的图像文件,通过PL(programmable logic)端的HDMI 接口输出至HDMI 显示器进行显示。通过以上步骤可在硬件平台上实现图像拼接算法。

图2 图像拼接硬件实现结构图

2 实验流程和结果

图像拼接实验旨在使学生学习如何在ZYNQ 平台下实现算法,侧重于在ZYNQ 开发板上调用OpenCV库以实现和运行算法[9]。

实验开始前,教师对本次实验涉及的算法原理及在C++环境中的实现方法进行讲解,介绍所使用到的平台和工具,包括网络文件系统和Debian 桌面系统。为了使学生掌握在ZYNQ 平台中实现图像拼接的算法,教师应在实验中指导学生进行平台搭建和参数设置。本次实验共6 学时,前4 学时主要进行图像拼接程序的编写,后2 学时主要进行硬件实现。

2.1 图像拼接程序编写和仿真

学生首先应在Visual Studio 环境中编写图像拼接程序,对图像拼接流程逐一进行实现。其中包括特征点检测、特征点匹配、计算图像变换矩阵、图像模型变化以及图像融合等。图像拼接程序运行情况和结果如图3、图4 所示。

图3 待拼接图像

图4 VS2017 拼接后的图像

2.2 图像拼接算法的移植和配置

在算法移植过程中,首先需要在Linux 环境下实现图像拼接算法[10],以便将其移植到ZYNQ 平台的PS 部分[11]。如图5 所示,在Linux 环境下实现图像拼接算法主要有三个步骤。首先需要搭建Linux 编译环境[12];其次,需要配置Linux 版本的OpenCV 库;最后在Linux 版的QT 中实现Image Stitching 图像拼接算法。

图5 Linux 下的图像拼接算法实现流程

在Linux 版的QT 中实现Image Stitching 图像拼接算法后,需要将算法程序移植到硬件平台中[13],移植过程主要包括搭建硬件平台和在硬件平台对硬件算法进行调试两个步骤,如图6 所示,硬件实现流程主要包括搭建Debian 桌面系统、使用Petalinux 配置HDMI 显示及配置NFS 服务。

将进行图像拼接后的图片文件保存在文件系统中,待拼接图像及拼接结果如图7、图8 所示,拼接结果为1920×1080。

图6 硬件平台实现流程图

图7 待拼接图像

图8 8 图拼接结果

3 结语

本文介绍了基于ZYNQ 平台的图像拼接实验案例。该实验综合锻炼了学生的软件编程能力及硬件设计和调试能力[14-15],较以往实验课程的综合性和难度均有所提高。学习本实验课的学生需要具备一定的理论基础,如需具有一定的图像处理知识,能够用C、C++语言、硬件描述语言进行编程[16],且对计算机操作系统有一定了解。该实验案例还具有很强的拓展性[17],学生在熟悉相关实验流程后,可以自行探索优化手段。通过该实验,有利于培养学生的自主学习能力和创新能力,达到了良好的教学效果。

猜你喜欢

开发板桌面案例
案例4 奔跑吧,少年!
基于STM32H7的FDCAN通信系统设计与实现∗
基于APP在线控制双挤出头FDM桌面3D打印机的研制
桌面云技术在铁路行业中的应用
随机变量分布及统计案例拔高卷
桌面装忙
发生在你我身边的那些治超案例
浅析单片机开发板的设计与制作
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
一个模拟案例引发的多重思考