基于FPGA的数字图像处理原理及应用
作者: 牟新刚 等著
出版时间:2017年版
内容简介
本书首先介绍FPGA程序设计和图像与视频处理的关键基础理论,然后通过实例代码详细讲解了如何利用FPGA实现直方图操作中的直方图统计/均衡化/线性拉伸/规定化、线性滤波器操作中的均值滤波器、Sobel算子(滤波、求模、求角度)、非线性滤波器操作中的排序类算法/形态学滤波、图像分割算法中的局部自适应分割/Canny算子等。本书在仿真测试部分设计了一种完善的通用测试系统,并利用此测试系统在每一章的仿真测试环节对所设计算法进行严格的测试和验证。本书在最后一章介绍了在视频处理领域常见的输入/输出接口。本书偏向于工程应用,在书中有大量关于如何利用FPGA实现图像处理算法的实例及代码,并对这些算法的原理及其实现过程、算法测试等做了详细的介绍,全部的算法都进行了仿真测试验证。本书提供实例的全部源代码,可登录以下网址免费获取:http://www.hxedu.com.cn(华信资源教育网)。本书适用于需要利用FPGA进行图像处理和视频分析的学者和工程开发人员。读者需要具备一定的嵌入式设计及FPGA设计的基础知识,特别是Verilog语言的语法基础。
目录
目 录
第1章 图像处理基础\t1
1.1 数字图像处理简介\t1
1.1.1 图像采样\t1
1.1.2 图像量化\t2
1.1.3 数字图像处理\t3
1.2 数字图像处理系统\t4
1.2.1 图像处理系统构成\t4
1.2.2 原始图像获取\t6
1.2.3 图像传感器接口\t16
1.2.4 图像处理流水线\t17
1.2.5 图像与视频压缩\t19
1.2.6 视频显示处理\t26
第2章 FPGA与图像处理\t32
2.1 使用FPGA的原因\t32
2.2 FPGA技术优势\t33
2.3 FPGA的发展历程\t34
2.4 FPGA生产厂家及其产品\t35
2.4.1 Altera\t35
2.4.2 Xilinx\t37
2.4.3 Lattice\t37
2.4.4 Atmel\t38
2.4.5 Actel\t38
2.5 FPGA开发流程\t38
2.5.1 FPGA设计方法\t38
2.5.2 典型的FPGA开发流程\t39
2.6 FPGA常用开发工具\t44
2.6.1 代码输入工具\t45
2.6.2 综合工具\t46
2.6.3 仿真工具\t47
2.6.4 实现与优化工具\t47
2.6.5 EDA工具\t48
2.7 FPGA图像处理的开发流程\t49
2.7.1 需求分析及问题描述\t49
2.7.2 软件算法设计及验证\t50
2.7.3 硬件平台设计\t51
2.7.4 FPGA映射\t52
2.7.5 仿真及验证\t54
第3章 FPGA编程语言\t55
3.1 HDL语言简介\t55
3.2 模块化设计\t56
3.3 可移植性\t57
3.4 不可移植性\t61
3.5 测试逻辑\t62
3.6 冗余逻辑\t63
3.7 常用语法\t63
3.7.1 参数化\t63
3.7.2 条件编译\t68
3.7.3 位宽匹配\t69
3.7.4 二维数组\t69
3.8 应用实例\t70
3.8.1 信号边沿检测\t70
3.8.2 多拍处理\t72
3.8.3 图像行列计数\t73
第4章 映射技术\t77
4.1 系统结构\t77
4.1.1 流水线设计\t77
4.1.2 并行阵列\t81
4.2 计算技术\t82
4.2.1 算法转换\t82
4.2.2 近似计算\t83
4.2.3 增量更新\t85
4.2.4 查找表\t85
4.2.5 浮点计算\t89
4.2.6 Cordic技术\t96
4.3 存储器映射\t103
4.3.1 帧缓存\t104
4.3.2 行缓存\t105
4.3.3 异步缓存\t113
4.3.4 增加存储器带宽\t114
4.3.5 存储器建模与仿真\t115
4.4 其他设计技巧\t116
4.4.1 合理处理参数\t116
4.4.2 资源及模块复用\t117
4.4.3 防止亚稳态\t118
第5章 系统仿真\t121
5.1 Modelsim使用基础\t121
5.1.1 Modelsim简介\t121
5.1.2 Modelsim图形界面及
仿真示例\t122
5.1.3 使用脚本命令来加速
仿真\t133
5.1.4 其他加速仿真的方法\t136
5.2 视频图像处理仿真测试系统\t136
5.2.1 仿真测试系统框架\t136
5.2.2 视频时序模拟\t137
5.2.3 视频捕获模拟\t145
5.2.4 MFC程序设计\t157
5.2.5 通用testbench\t161
第6章 直方图操作\t167
6.1 灰度直方图\t167
6.2 直方图均衡化\t169
6.3 直方图规定化\t172
6.4 直方图拉伸\t175
6.5 基于FPGA的直方图操作\t179
6.5.1 FPGA直方图统计\t179
6.5.2 FPGA直方图均衡化\t192
6.5.3 FPGA直方图线性拉伸\t203
第7章 线性滤波器\t214
7.1 线性滤波\t214
7.1.1 均值滤波\t214
7.1.2 高斯滤波\t216
7.1.3 Sobel算子\t219
7.1.4 离散傅里叶变换\t222
7.2 基于FPGA的均值滤波\t227
7.2.1 整体设计与模块划分\t227
7.2.2 子模块设计\t228
7.2.3 Verilog代码设计\t232
7.2.4 仿真与调试结果\t243
7.3 基于FPGA的Sobel算子\t247
7.3.1 整体设计与模块划分\t247
7.3.2 Sobel模板计算电路\t249
7.3.3 基于Cordic的坐标系转换
电路\t251
7.3.4 Verilog代码设计\t257
7.3.5 仿真与调试结果\t274
第8章 非线性滤波器\t280
8.1 统计排序滤波\t280
8.2 基于FPGA的统计排序滤波器\t282
8.2.1 并行全比较排序法原理\t282
8.2.2 整体设计与模块划分\t285
8.2.3 子模块设计\t286
8.2.4 Verilog代码设计\t288
8.2.5 仿真与调试结果\t298
第9章 形态学滤波\t303
9.1 形态学滤波简介\t303
9.2 形态学滤波的基本应用\t304
9.3 基于FPGA的Tophat滤波设计\t311
9.3.1 顶层框架设计\t311
9.3.2 子模块设计\t312
9.3.3 Verilog代码设计\t317
9.3.4 仿真及调试结果\t337
第10章 图像分割\t341
10.1 图像分割简介\t341
10.2 基于阈值的分割\t341
10.2.1 全局阈值分割\t341
10.2.2 局部自适应阈值分割\t344
10.3 基于边缘的分割\t347
10.3.1 Canny算子\t347
10.3.2 Canny算子的计算步骤\t347
10.4 基于FPGA的局部自适应分割\t356
10.4.1 算法转换\t357
10.4.2 FPGA结构设计\t358
10.4.3 子模块设计\t359
10.4.4 Verilog代码设计\t363
10.4.5 仿真与调试\t371
10.5 基于FPGA的Canny算子设计\t378
10.5.1 非最大值抑制电路设计\t378
10.5.2 滞后阈值分割电路设计\t381
10.5.3 Verilog代码设计\t382
10.5.4 仿真调试结果\t390
第11章 视频接口\t391
11.1 视频输入接口\t391
11.1.1 模拟视频输入\t391
11.1.2 CameraLink接口\t394
11.1.3 USB接口\t399
11.1.4 FireWire接口\t401
11.1.5 GigE Vision?接口\t407
11.1.6 直接接口\t410
11.2 视频输出接口\t411
11.2.1 CVT标准\t411
11.2.2 VGA\t416
11.2.3 PAL\t425
11.2.4 DVI/HDMI\t433
参考文献\t441