基于FPGA的数字图像处理原理及应用【PDF+源码】+基于FPGA的嵌入式图像处理系统设计【PDF】
链接: https://pan.baidu.com/s/1jZh6TkjlFilxdsGF3MsxTA
提取码: i6mc
*基于FPGA的数字图像处理原理及应用
本书首先介绍FPGA程序设计和图像与视频处理的关键基础理论,然后通过实例代码详细讲解了如何利用FPGA实现直方图操作中的直方图统计/均衡化/线性拉伸/规定化、线性滤波器操作中的均值滤波器、Sobel算子(滤波、求模、求角度)、非线性滤波器操作中的排序类算法/形态学滤波、图像分割算法中的局部自适应分割/Canny算子等。本书在仿真测试部分设计了一种完善的通用测试系统,并利用此测试系统在每一章的仿真测试环节对所设计算法进行严格的测试和验证。本书在最后一章介绍了在视频处理领域常见的输入/输出接口。本书偏向于工程应用,在书中有大量关于如何利用FPGA实现图像处理算法的实例及代码,并对这些算法的原理及其实现过程、算法测试等做了详细的介绍,全部的算法都进行了仿真测试验证。本书提供实例的全部源代码,可登录以下网址免费获取:http://www.hxedu.com.cn(华信资源教育网)。本书适用于需要利用FPGA进行图像处理和视频分析的学者和工程开发人员。读者需要具备一定的嵌入式设计及FPGA设计的基础知识,特别是Verilog语言的语法基础。
目 录
第1章 图像处理基础 1
1.1 数字图像处理简介 1
1.1.1 图像采样 1
1.1.2 图像量化 2
1.1.3 数字图像处理 3
1.2 数字图像处理系统 4
1.2.1 图像处理系统构成 4
1.2.2 原始图像获取 6
1.2.3 图像传感器接口 16
1.2.4 图像处理流水线 17
1.2.5 图像与视频压缩 19
1.2.6 视频显示处理 26
第2章 FPGA与图像处理 32
2.1 使用FPGA的原因 32
2.2 FPGA技术优势 33
2.3 FPGA的发展历程 34
2.4 FPGA生产厂家及其产品 35
2.4.1 Altera 35
2.4.2 Xilinx 37
2.4.3 Lattice 37
2.4.4 Atmel 38
2.4.5 Actel 38
2.5 FPGA开发流程 38
2.5.1 FPGA设计方法 38
2.5.2 典型的FPGA开发流程 39
2.6 FPGA常用开发工具 44
2.6.1 代码输入工具 45
2.6.2 综合工具 46
2.6.3 仿真工具 47
2.6.4 实现与优化工具 47
2.6.5 EDA工具 48
2.7 FPGA图像处理的开发流程 49
2.7.1 需求分析及问题描述 49
2.7.2 软件算法设计及验证 50
2.7.3 硬件平台设计 51
2.7.4 FPGA映射 52
2.7.5 仿真及验证 54
第3章 FPGA编程语言 55
3.1 HDL语言简介 55
3.2 模块化设计 56
3.3 可移植性 57
3.4 不可移植性 61
3.5 测试逻辑 62
3.6 冗余逻辑 63
3.7 常用语法 63
3.7.1 参数化 63
3.7.2 条件编译 68
3.7.3 位宽匹配 69
3.7.4 二维数组 69
3.8 应用实例 70
3.8.1 信号边沿检测 70
3.8.2 多拍处理 72
3.8.3 图像行列计数 73
第4章 映射技术 77
4.1 系统结构 77
4.1.1 流水线设计 77
4.1.2 并行阵列 81
4.2 计算技术 82
4.2.1 算法转换 82
4.2.2 近似计算 83
4.2.3 增量更新 85
4.2.4 查找表 85
4.2.5 浮点计算 89
4.2.6 Cordic技术 96
4.3 存储器映射 103
4.3.1 帧缓存 104
4.3.2 行缓存 105
4.3.3 异步缓存 113
4.3.4 增加存储器带宽 114
4.3.5 存储器建模与仿真 115
4.4 其他设计技巧 116
4.4.1 合理处理参数 116
4.4.2 资源及模块复用 117
4.4.3 防止亚稳态 118
第5章 系统仿真 121
5.1 Modelsim使用基础 121
5.1.1 Modelsim简介 121
5.1.2 Modelsim图形界面及
仿真示例 122
5.1.3 使用脚本命令来加速
仿真 133
5.1.4 其他加速仿真的方法 136
5.2 视频图像处理仿真测试系统 136
5.2.1 仿真测试系统框架 136
5.2.2 视频时序模拟 137
5.2.3 视频捕获模拟 145
5.2.4 MFC程序设计 157
5.2.5 通用testbench 161
第6章 直方图操作 167
6.1 灰度直方图 167
6.2 直方图均衡化 169
6.3 直方图规定化 172
6.4 直方图拉伸 175
6.5 基于FPGA的直方图操作 179
6.5.1 FPGA直方图统计 179
6.5.2 FPGA直方图均衡化 192
6.5.3 FPGA直方图线性拉伸 203
第7章 线性滤波器 214
7.1 线性滤波 214
7.1.1 均值滤波 214
7.1.2 高斯滤波 216
7.1.3 Sobel算子 219
7.1.4 离散傅里叶变换 222
7.2 基于FPGA的均值滤波 227
7.2.1 整体设计与模块划分 227
7.2.2 子模块设计 228
7.2.3 Verilog代码设计 232
7.2.4 仿真与调试结果 243
7.3 基于FPGA的Sobel算子 247
7.3.1 整体设计与模块划分 247
7.3.2 Sobel模板计算电路 249
7.3.3 基于Cordic的坐标系转换
电路 251
7.3.4 Verilog代码设计 257
7.3.5 仿真与调试结果 274
第8章 非线性滤波器 280
8.1 统计排序滤波 280
8.2 基于FPGA的统计排序滤波器 282
8.2.1 并行全比较排序法原理 282
8.2.2 整体设计与模块划分 285
8.2.3 子模块设计 286
8.2.4 Verilog代码设计 288
8.2.5 仿真与调试结果 298
第9章 形态学滤波 303
9.1 形态学滤波简介 303
9.2 形态学滤波的基本应用 304
9.3 基于FPGA的Tophat滤波设计 311
9.3.1 顶层框架设计 311
9.3.2 子模块设计 312
9.3.3 Verilog代码设计 317
9.3.4 仿真及调试结果 337
第10章 图像分割 341
10.1 图像分割简介 341
10.2 基于阈值的分割 341
10.2.1 全局阈值分割 341
10.2.2 局部自适应阈值分割 344
10.3 基于边缘的分割 347
10.3.1 Canny算子 347
10.3.2 Canny算子的计算步骤 347
10.4 基于FPGA的局部自适应分割 356
10.4.1 算法转换 357
10.4.2 FPGA结构设计 358
10.4.3 子模块设计 359
10.4.4 Verilog代码设计 363
10.4.5 仿真与调试 371
10.5 基于FPGA的Canny算子设计 378
10.5.1 非最大值抑制电路设计 378
10.5.2 滞后阈值分割电路设计 381
10.5.3 Verilog代码设计 382
10.5.4 仿真调试结果 390
第11章 视频接口 391
11.1 视频输入接口 391
11.1.1 模拟视频输入 391
11.1.2 CameraLink接口 394
11.1.3 USB接口 399
11.1.4 FireWire接口 401
11.1.5 GigE Vision?接口 407
11.1.6 直接接口 410
11.2 视频输出接口 411
11.2.1 CVT标准 411
11.2.2 VGA 416
11.2.3 PAL 425
11.2.4 DVI/HDMI 433
参考文献 441
最近几年图像处理与机器视觉的发展非常迅速,图像处理领域也被认为是未来几十年最有前途的领域之一。
随着现代图像及视频处理技术的不断发展,人们对图像处理提出了新的要求,图像处理系统的硬件体积越来越小,实时性也越来越好。特别是最近几年,图像的分辨率和扫描频率都有了较大范围的提升,1080P分辨率的视频已经非常流行,2K甚至4K分辨率的图像也在火热发展中。目前比较火热的VR技术更是需要双通道的高分辨率、高扫描频率的视频数据及处理能力。
这些新的要求给之前的图像处理平台带来了严重的挑战,传统的图像处理技术主要基于软件平台,一般运行在Windows平台的PC上。虽然现代PC的主频较高,但是用软件的串行化处理方法进行图像处理的效率还是非常低的。例如,用PC处理一个比较复杂的高分辨率图像处理算法花费半个小时或更多时间也是常见的事情。然而,对于实时图像处理,例如实时跟踪和视频显示,这个处理速度是远远不够的。
正是由于这个原因,嵌入式图像处理技术得到了广泛的应用,一些带有图像视频处理组件的嵌入式处理器开始在图像处理领域大显身手,例如,TI公司生产的达芬奇系列的DSP。这些组件实际上是图像处理硬核,但是大部分是标准化接口的硬核,针对数字视频、图像采样处理、视觉分析等应用进行了剪裁和优化。对于一个特定的图像处理任务,需要利用其内部的处理器来进行串行化软件处理。多核处理器的发展使得多个图像处理任务可以同时执行,也大大提高了图像处理的实时性。尽管这些嵌入式处理器的发展加快了图像处理和视频分析的实际应用,但其本质上仍为软件处理的串行方式,难以满足通用图像处理中大数据量计算的需求。
随着成像传感器技术和信号处理技术的迅猛发展,图像的分辨率、帧频和像元有效位数越来越高,图像处理算法越来越复杂,图像处理结果的实时性要求越来越高,基于PC和DSP软件平台的图像处理系统已难以满足要求。由于图像处理算法天然的并行性,FPGA的加入给图像处理带来了新的活力,特别是针对图像处理底层一些并行特性的图像处理算法。例如二维卷积,FPGA可以保证在极低主频下得到比DSP平台快得多的处理速度,利用其流水线技术可以在每个时钟输出一个处理后像素。然而,FPGA并不适合进行串行化处理算法和部分其他的上层算法。因此,目前DSP+FPGA平台是图像处理平台的主流。此外,FPGA在一些低成本的机器视觉领域也得到了广泛的应用。例如,著者所在实验室研究的利用线列CCD和激光实现高精度位移测量项目,该项目利用FPGA实现CCD时序驱动、A/D转换和测量算法实现,并实现高速接口与上位机。
在FPGA上实现一个图像处理算法包括确定具体算法和对其进行并行性改造、将算法中计算和存储需求与FPGA内部可用资源相映射、将算法映射到硬件结构上等步骤。然而,目前只有很少的公开资料可供初学者学习该领域的知识,可以让初学者深入了解设计思路、过程、代码的文献资料更难找到。
为改变这一现状,本书从FPGA图像处理理论和分析入手,重点讲解图像处理算法移植到FPGA中的基本思路和方法,突出工程应用。每一章均附有C/C++实现代码,同时用循序渐进、自顶向下的方式设计FPGA算法模块,针对每一个模块设计了详细的实现框图,确保读者能理解算法设计的原理。此外,每个算法都配有Verilog实现方法,并给出仿真结果。本书还提出了一个通用的利用Modelsim和VS实现图像处理的仿真测试平台。
本书内容概述如下:
(1)第1~5章是基础章节,重点介绍数字图像处理和FPGA程序设计的基础知识。
第1章简单介绍了图像处理的基础知识,包括图像处理的发展现状,还地介绍了图像从获取到显示存储的基本流程。
第2章首先介绍了FPGA的发展现状,生产厂家及其开发流程。接着介绍了基于FPGA的图像处理的基本开发流程。
第3章主要介绍了在FPGA中应用的编程语言。本章并没有详细介绍Verilog语法,而是从工程应用的角度介绍常用的设计方法和实例。
第4章主要介绍了把软件算法映射到FPGA常用的技巧。首先介绍了应用较广泛的流水线设计方法,接着介绍了FPGA硬件计算技术,包括一些常用的计算转换、查找表、浮点计算、Cordic计算等方法。最后介绍了在图像处理中用途非常多的存储器映射,并提出了一些其他设计技巧。
第5章首先简要介绍了仿真测试软件Modelsim的使用,接着重点介绍了一个通用的视频图像处理仿真测试系统。这个测试系统包括完整的视频模拟、视频捕获,以及testbench设计,并结合基于MFC的VC上位机来实现测试系统的搭建。
(2)第6~10章主要介绍算法实现。
第6章介绍直方图操作,主要介绍几种常用直方图操作的FPGA实现:直方图统计、直方图均衡、直方图规定及直方图线性拉伸。
第7章介绍基于图像处理的线性滤波。首先,介绍了均值滤波算法、高斯滤波算法、Sobel算子及FFT等常见的几种线性滤波原理。其次,介绍了均值滤波算法和Sobel算子的FPGA实现。
第8章主要介绍基于图像处理的非线性滤波算法,包括排序滤波的基本原理及其FPGA实现方法。
第9章主要介绍基于图像处理的形态学滤波算法,包括形态学滤波的基本概念,包括形态学膨胀、形态学腐蚀、开运算及闭运算等。重点介绍了基于FPGA的Tophat滤波的原理及实现方法。
第10章主要介绍基于图像处理的常见的分割算法,包括全局阈值分割、局部自适应阈值分割及Canny算子。重点介绍基于FPGA的局部自适应阈值分割和Canny算子的设计与实现。
第11章主要介绍与视频和图像处理相关的输入/输出接口,包括CameraLink、火线接口、USB接口、千兆以太网等视频输入接口和CVT标准,以及VGA,PAL,DVI,HDMI等视频输出接口。其中,给出了VGA和PAL接口的Verilog代码实现。
为了确保读者能够快速地掌握FPGA图像处理设计方法,本书提供了算法章节的全部源代码。
本书由武汉理工大学机电工程学院牟新刚、周晓和郑晓亮合著,全书由牟新刚统稿。
本书参考了相关著作及资料的部分内容和图表,部分技术资料取材于互联网,在此对这些文献的作者一并表示谢意。尽管我们为编写本书付出了心血和努力,但仍然存在一些疏漏及欠妥之处,敬请读者批评指正。
著者
2016.5
*基于FPGA的嵌入式图像处理系统设计
基于FPGA的嵌入式系统具有体积小、功耗低、速度快等许多优点,在图像处理以及许多需要高速计算的嵌入式系统(例如智能相机、智能手机等)中有着广阔的应用前景,也是高性能嵌入式系统未来的技术发展趋势。
目前国内外关于FPGA应用系统开发的图书很少,各种技术资料也比较分散。因此,虽然许多科研人员和工程技术人员已经充分认识到了基于FPGA的嵌入式系统的重要性,但却因为缺乏比较系统完整的学习资料等原因而难以深入了解和掌握相关技术,也难以研制开发出具有实用价值的FPGA应用系统。
本书对FPGA的发展历程以及如何利用FPGA技术设计开发嵌入式视觉系统进行了比较详尽的介绍,不但介绍了相关方法,而且给出了许多具体算法和应用实例。本书对FPGA技术的初学者以及已经具有比较丰富的设计经验的读者来说都有很好的参考价值,也将为从事基于FPGA的嵌入式系统开发和应用的软、硬件工程师和科研人员提供一本比较系统、全面的学习材料。
本书的专业性很强,对于普通读者来说,理解书中给出的所有知识点可能存在一定的困难。作者在本书的前言中已经相当详细地介绍了他本人写作本书的出发点,以及面向的主要读者群。建议读者先认真读一下作者所写的前言,然后再根据自己的需要开始本书的学习。
对FPGA技术应用感兴趣的初学者可以先读一下本书的前4章和第14章,对FPGA及其应用建立一些感性认识,了解一下FPGA的基本特点及其主要用途,然后根据自己的需要选择书中的相关章节进行学习;而对于已经具有一定的FPGA知识并希望进行FPGA系统开发的读者来说,则可以根据自己的需要,直接选择书中的相关章节进行学习,重点了解相关算法的具体实现,以及是否可以根据书中所提供的方法来解决自己所面对或可能面对的问题。
译者所在的课题组近10年来一直在从事基于FPGA的嵌入式视觉系统的研究,完成了多种基于FPGA的图像处理算法,研制开发出两种基于FPGA和DSP技术的高性能嵌入式图像处理系统并在多种机器人系统中进行了成功应用,可以说已经在一定程度上掌握了基于FPGA的嵌入式图像处理系统的相关知识。为了尽可能准确地表达作者的原意,此次译者所在课题组中从事相关研究工作的主要研究人员都参加了本书的翻译工作,并由主要翻译人员原魁、何文浩、肖晗、徐正东、宋海涛、王照、高舒对译稿进行了认真校对。但由于译者的水平有限,仍然难免出现一些错误,因此,译文中如有不当之处,还希望能够得到读者的原谅。
原魁
2012.9
本文分享自微信公众号 - OpenFPGA(OpenFPGA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4583591/blog/4636380