【FPGA/图像处理】绪论-背景知识

少女dtysky

世界Skill

时刻2015.05.09

图像处理系列文章基本都是我本科毕设论文同步发布,这个项目以LGPL许可被发布在F-I-L。图像处理技术服务于人类的视觉系统,而视觉是人类感知外界最为重要的知觉之一,所以图像处理对于我们的意义是重大的,历史上的图像处理有多个阶段,到了我们这个时代,则是以数字图像处理为主,其中的算法又可以分为软件和硬件两种实现,硬件实现在速度等方面比起软件实现有许多优势,但其复杂程度和局限性也是比较显然的,所以我们应当做的合理分配和利用二者,做到效率的最大化。


1. 绪论

1.1 引言

图像处理(Image Processing)服务于人类的视觉系统,而视觉作为人类最重要的感觉器官,对我们的意义是十分重大的,所以,视觉数据的记录和处理十分重要,经过漫长的发展,人类对视觉信号的处理方式由原始的间接记录演化成了由电子器件主导的直接记录,通过感光器件,我们可以得到记录光强的若干信息,对这些信息进行处理,也就是对视觉信息进行分析和再构,其重要性不言而喻。
我们知道,本质上人类所有活动的都依赖于信息的操作,正如当巴贝奇在发散地研究各个领域、想要制作计算机器来尝试一些东西的时候,他真正的研究主题实际上信息,是信息的通信、编码、处理等[1]。这一点在现代社会显得尤为清晰。而图像处理就是对图像信息的操作,它一般处于图像信息输入和输出之间,本质上是对输入信息进行各种各样的滤波,来转换其信息所处的空间,从而达到强调、提取信息等等目的。
传统的图像处理方法是模拟和光学的,在精确的现代记录方式出现之前,人们用自己的双手和画笔进行着图像处理,那个时代,任何图像信息再被输入之前就已经经过一次处理了,不过那个时候我们往往把这些处理称为“艺术加工”,当然,一幅图像是否具备着相对于自然完全的“真实性”并不重要,因为“真实”本就是一个玄学的概念,最重要的是我们想要获得什么,正如贡布里希在《艺术与错觉》一书中所言,“艺术家同样无法转录他所见到的东西,他所能做的只是把他所见翻译成他的绘画手段的表现形式罢了。”[2]。事实上,图像处理就是有着这样的一个目的——去得到相对于原始图像的、我们想要的东西。
然而对于这些历史上的处理方式有一个比较重要的问题,就是绝大多数人基本不可能对同一个原图像进行机械而重复的操作,这是绘画这种处理方式本身的门槛所决定的,所以图像处理技术一直没有从艺术领域踏入工业领域,因为实际上它并不具备一般意义上广泛的生产力,但随着技术的飞快进步,尤其是CCD和CMOS这种感光元件以及存储器的出现,让我们获得了记录和复制同一副图像的能力,一旦一件事物被加上了可以复制的属性,它的成本的降低几乎是必然的,所以我们拥有了更多的自由去做一些实验,加上电子技术的进一步发展,数字图像处理技术诞生了,比起传统的处理方式,它大大提高了研发和生产的效率,可以完成的操作是传统方式望尘莫及的。

1.2 数字图像处理

数字图像处理,即为使用计算机对量化和数字化后的图像数据进行处理,数字图像的定义是:“一个存储着数值的二维数组”,这意味着图像被映射到了一个二维空间内,由若干坐标和坐标信息来表示图像本身的信息,每一个这样的坐标点就被称为“点”,“点”一般作为图像的基本操作单元。 有了被存储在数据单元内的图像数据,便可以对图像进行各种操作,操作的基础是各种数学运算,比如加减乘除卷积等等,利用这些操作可以实现[3]

  1. 图像增强:改善图像的主观质量,比如降噪、对比度调整、色彩校正等等。
  2. 图象复原:对已经发生退化的图像进行修正,分析退化的原因进行逆运算,从而将图像恢复到应有的状态。
  3. 图象重建:将图像数据重组,比如缩放、旋转、色彩空间转换等。
  4. 图像分析:使得计算机可以从图像中获取知识,经常表现为某种形式的测量。
  5. 模式识别:基于测量的模式进行物体识别,比如人脸识别等等。

计算机视觉便是建立在以上基础操作的一种学科,研究出一系列模型来处理图像,最终给出人们需求的结果。
传统的机器视觉是基于软件的,理论上任何一种图像处理算法都可以在一个单独的处理器上实现,区别是越复杂的算法,需要消耗的时间越多,这对于追求效率的人类显然是不可接受的,所以越来越多的并行架构出现,比如空间并行和逻辑并行,对于这样的系统,软件的方案就不再是完美的了,软件适合高层的图像处理操作,比如与某些智能操作,而操作级的处理则需要另辟蹊径,FPGA的出现则提供了这样的一种途径。

1.3 图像处理的FPGA实现

FPGA(Field Programmable Gate Array ,现场可编程逻辑阵列)属于VLSI(Very Large Scale Integration, 超大规模集成电路)的一种[4],在和其他专用定制的ASIC不同,FPGA属于在设计成本和最终性能之间的一个平衡产物,它是一种包含可反复使用字段的小规模逻辑模块和元件的可编程器件。由于不需要考虑一次性工程成本,所以它的设计成本和上市成本要比传统ASIC低得多,但由于缺少了一些额外的IC后端流程,所以它的性能和功耗一般无法与专用ASIC相提并论,但即便是如此,对于以软件处理为主导的领域,它的性能仍然是一个巨大的优势,图像处理就是这样的一个领域。
FPGA本质上是一个通用电路,它利用厂商预设的逻辑单元、存储资源和布线资源构成的数字电路来实现一些算法操作,由于开发FPGA本质上是搭建数字电路,FPGA实际上拥有着先天的并行性,这对于图像处理是非常契合的,因为对于大多图像处理操作,每一个像素点,乃至每一个结构元素都是互相独立的,使用FPGA可以对任意处理模块进行复制,从而达到一个周期处理一张图像的理论效果。
不仅如此,FPGA还十分是和流水化操作,保证每个周期都有一个输出,并且这种输出是连续而不间断的,同时,即便不是流水化操作,FPGA也可以通过自己设计的协议完成请求响应的等工作模式。总而言之,FPGA是十分灵活的。
许多算法已经被证实过可以使用FPGA进行实现,比如一些点操作、形态学操作等等,同时得到了良好的效果。

1.4 SoC平台-ZYNQ

SoC(System on Chip,片上系统)是指一个将计算机或者其他电子系统集成到单一芯片中的集成电路,也就是说,在单一芯片中放置一个CPU,随后提供它的BSP(Board Support Package,板级支持包),让这个芯片支持软件开发,这种设计常常被用在嵌入式软件领域,众多的微控制器就是其中的一种典型实现。
这里要探讨的是SoC和FPGA的结合,Xilinx很早就做出过PowerPC硬核和FPGA结合的架构(Virtex-4, 5系列),但最后由于需求等问题无疾而终,之后又出现了Altera的Nios和Xilinx的Microblaze软核系统,它们利用一部分的逻辑资源构建一个CPU,并提供基本的BSP进行开发,虽然支持面广,但资源和性能仍然不如硬核架构。
ZYNQ架构是Xilinx最新推出的一种SoC+FPGA的架构,采用7系列的FPGA和ARM硬核的结构,将系统部分称为“PS”端,逻辑部分称为“PL”端,两端通过AXI总线进行交互,并提供了对开发者友好的全套、一体化设计环境,很大程度上解决了性能和资源问题。
利用ZYNQ平台,我们可以很方便地使用PS部分对PL部分进行配置和数据交互,这为软件算法的硬件加速提供了GPU外的另一种便利的可能,比如可以将两个矩阵送给PL端计算,返回给PS端,由于Xilinx提供了完善的AXI总线模块模板,让这个开发过程变得非常简单。

1.5 本文研究目的和实现内容

基于以上原因,我选择实现一个FPGA的图像处理库,这个库将会包含许多基础的图像处理操作,每一个操作都分为流水线和请求响应两个模式,并拥有各自的软件仿真、HDL功能仿真和板上测试,并计算PSNR进行可信度分析。
每一个操作都会被封装成Xilinx的Vivado设计套件中的IP核,并利用图形化设计界面进行板上测试工程的搭建。
对于语言的选择,由于VerilogHDL比起VHDL更适合算法描述,而图像处理比起系统架构更多的是算法问题,所以选择使用VerilogHDL进行模块的设计。
测试平台利用业界普遍用于测试的SystemVerilogHDL进行搭建,功能仿真使用Modelsim软件进行。
软件仿真则选择简单强大的Python和PIL库实现。
除此之外,还会简单地展示如何在ZYNQ平台上实现PS和PL端的交互,实现SoC系统和FPGA的高效协作。
FPGA-Imaging-Library(FPGA的图像处理库)属于自由软件,以LGPL(GNU Lesser General Public License)[5]许可发布。


参考文献

[1] 詹姆斯.格雷克.信息简史[M].高博译.北京:人民邮电出版社,2013:12.
[2] E.H.贡布里希.艺术与错觉[M]杨成凯,李本正,范景中译.南宁:广西美术出版社,2012:3.
[3] Donald G.Bailey.基于FPGA的嵌入式图像处理系统设计[M].原魁,何文浩,肖晗译.北京:电子工业出版社,2013.
[4] U.Meyer-Basese.数字信号处理的FPGA实现(第3版)[M].刘凌译.北京:清华大学出版社,2011:3.
[5] Free Software Foundation, Inc. GNU LESSER GENERAL PUBLIC LICENSE Version 2.1[EB/OL]. February 1999.

如果不是自己的创作,少女是会标识出来的,所以要告诉别人是少女写的哦。