本书首先介绍FPGA程序设计和图像与视频处理的关键基础理论,然后通过实例代码详细讲解了如何利用FPGA实现直方图操作中的直方图统计/均衡化/线性拉伸/规定化、线性滤波器操作中的均值滤波器、Sobel算子(滤波、求模、求角度)、非线性滤波器操作中的排序类算法/形态学滤波、图像分割算法中的局部自适应分割/Canny算子等。本书在仿真测试部分设计了一种完善的通用测试系统,并利用此测试系统在每一章的仿真测试环节对所设计算法进行严格的测试和验证。本书在后一章介绍了在视频处理领域常见的输入/输出接口。本书偏向于工程应用,在书中有大量关于如何利用FPGA实现图像处理算法的实例及代码,并对这些算法的原理及其实现过程、算法测试等做了详细的介绍,全部的算法都进行了仿真测试验证。本书提供实例的全部源代码,可登录以下网址免费获取:www.hxedu.com.cn(华信资源教育网)。本书适用于需要利用FPGA进行图像处理和视频分析的学者和工程开发人员。读者需要具备一定的嵌入式设计及FPGA设计的基础知识,特别是Verilog语言的语法基础。
提供大量关于如何利用FPGA实现图像处理算法的实例及代码
牟新刚,武汉理工大学专职教师,主要从事图像处理、高速信号处理、并行计算、嵌入式系统设计等方面的研究工作
目 录
第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