本書主要內(nèi)容包括FPGA程序設(shè)計(jì)和圖像與視頻處理的基礎(chǔ)知識(shí),通過(guò)實(shí)例代碼詳細(xì)講解了如何利用FPGA來(lái)實(shí)現(xiàn)直方圖操作中直方圖統(tǒng)計(jì)/均衡化/線性拉伸/規(guī)定化、線性濾波器操作中的均值濾波器、Sobel算子(濾波、求模、求角度)、非線性濾波器操作中的排序類算法/形態(tài)學(xué)濾波、圖像分割算法中的局部自適應(yīng)分割/Canny算子等。本書在仿真測(cè)試章節(jié)提出了一種通用的完善的測(cè)試系統(tǒng),并利用此測(cè)試系統(tǒng)在每一章的仿真測(cè)試環(huán)節(jié)對(duì)所設(shè)計(jì)算法進(jìn)行嚴(yán)格的測(cè)試和驗(yàn)證。本書在最后一章介紹了在視頻處理領(lǐng)域常見的輸入輸出接口。本書還提供大量關(guān)于如何利用FPGA實(shí)現(xiàn)圖像處理算法的實(shí)例及源代碼。
最近幾年圖像處理與機(jī)器視覺的發(fā)展非常迅速,圖像處理領(lǐng)域也被認(rèn)為是未來(lái)幾十年最有前途的領(lǐng)域之一。
隨著現(xiàn)代圖像及視頻處理技術(shù)的不斷發(fā)展,人們對(duì)圖像處理提出了新的要求,圖像處理系統(tǒng)的硬件體積越來(lái)越小,實(shí)時(shí)性也越來(lái)越好。特別是最近幾年,圖像的分辨率和掃描頻率都有了較大范圍的提升,1080P分辨率的視頻已經(jīng)非常流行,2K甚至4K分辨率的圖像也在火熱發(fā)展中。目前比較火熱的VR技術(shù)更是需要雙通道的高分辨率、高掃描頻率的視頻數(shù)據(jù)及處理能力。
這些新的要求給之前的圖像處理平臺(tái)帶來(lái)了嚴(yán)重的挑戰(zhàn),傳統(tǒng)的圖像處理技術(shù)主要基于軟件平臺(tái),一般運(yùn)行在Windows平臺(tái)的PC上。雖然現(xiàn)代PC的主頻較高,但是用軟件的串行化處理方法進(jìn)行圖像處理的效率還是非常低的。例如,用PC處理一個(gè)比較復(fù)雜的高分辨率圖像處理算法花費(fèi)半個(gè)小時(shí)或更多時(shí)間也是常見的事情。然而,對(duì)于實(shí)時(shí)圖像處理,例如實(shí)時(shí)跟蹤和視頻顯示,這個(gè)處理速度是遠(yuǎn)遠(yuǎn)不夠的。
正是由于這個(gè)原因,嵌入式圖像處理技術(shù)得到了廣泛的應(yīng)用,一些帶有圖像視頻處理組件的嵌入式處理器開始在圖像處理領(lǐng)域大顯身手,例如,TI公司生產(chǎn)的達(dá)芬奇系列的DSP。這些組件實(shí)際上是圖像處理硬核,但是大部分是標(biāo)準(zhǔn)化接口的硬核,針對(duì)數(shù)字視頻、圖像采樣處理、視覺分析等應(yīng)用進(jìn)行了剪裁和優(yōu)化。對(duì)于一個(gè)特定的圖像處理任務(wù),需要利用其內(nèi)部的處理器來(lái)進(jìn)行串行化軟件處理。多核處理器的發(fā)展使得多個(gè)圖像處理任務(wù)可以同時(shí)執(zhí)行,也大大提高了圖像處理的實(shí)時(shí)性。盡管這些嵌入式處理器的發(fā)展加快了圖像處理和視頻分析的實(shí)際應(yīng)用,但其本質(zhì)上仍為軟件處理的串行方式,難以滿足通用圖像處理中大數(shù)據(jù)量計(jì)算的需求。
隨著成像傳感器技術(shù)和信號(hào)處理技術(shù)的迅猛發(fā)展,圖像的分辨率、幀頻和像元有效位數(shù)越來(lái)越高,圖像處理算法越來(lái)越復(fù)雜,圖像處理結(jié)果的實(shí)時(shí)性要求越來(lái)越高,基于PC和DSP軟件平臺(tái)的圖像處理系統(tǒng)已難以滿足要求。由于圖像處理算法天然的并行性,F(xiàn)PGA的加入給圖像處理帶來(lái)了新的活力,特別是針對(duì)圖像處理底層一些并行特性的圖像處理算法。例如二維卷積,F(xiàn)PGA可以保證在極低主頻下得到比DSP平臺(tái)快得多的處理速度,利用其流水線技術(shù)可以在每個(gè)時(shí)鐘輸出一個(gè)處理后像素。然而,F(xiàn)PGA并不適合進(jìn)行串行化處理算法和部分其他的上層算法。因此,目前DSP+FPGA平臺(tái)是圖像處理平臺(tái)的主流。此外,F(xiàn)PGA在一些低成本的機(jī)器視覺領(lǐng)域也得到了廣泛的應(yīng)用。例如,著者所在實(shí)驗(yàn)室研究的利用線列CCD和激光實(shí)現(xiàn)高精度位移測(cè)量項(xiàng)目,該項(xiàng)目利用FPGA實(shí)現(xiàn)CCD時(shí)序驅(qū)動(dòng)、A/D轉(zhuǎn)換和測(cè)量算法實(shí)現(xiàn),并實(shí)現(xiàn)高速接口與上位機(jī)。
在FPGA上實(shí)現(xiàn)一個(gè)圖像處理算法包括確定具體算法和對(duì)其進(jìn)行并行性改造、將算法中計(jì)算和存儲(chǔ)需求與FPGA內(nèi)部可用資源相映射、將算法映射到硬件結(jié)構(gòu)上等步驟。然而,目前只有很少的公開資料可供初學(xué)者學(xué)習(xí)該領(lǐng)域的知識(shí),可以讓初學(xué)者深入了解設(shè)計(jì)思路、過(guò)程、代碼的文獻(xiàn)資料更難找到。
為改變這一現(xiàn)狀,本書從FPGA圖像處理理論和分析入手,重點(diǎn)講解圖像處理算法移植到FPGA中的基本思路和方法,突出工程應(yīng)用。每一章均附有C/C++實(shí)現(xiàn)代碼,同時(shí)用循序漸進(jìn)、自頂向下的方式設(shè)計(jì)FPGA算法模塊,針對(duì)每一個(gè)模塊設(shè)計(jì)了詳細(xì)的實(shí)現(xiàn)框圖,確保讀者能理解算法設(shè)計(jì)的原理。此外,每個(gè)算法都配有Verilog實(shí)現(xiàn)方法,并給出仿真結(jié)果。本書還提出了一個(gè)通用的利用Modelsim和VS實(shí)現(xiàn)圖像處理的仿真測(cè)試平臺(tái)。
本書內(nèi)容概述如下:
。1)第1~5章是基礎(chǔ)章節(jié),重點(diǎn)介紹數(shù)字圖像處理和FPGA程序設(shè)計(jì)的基礎(chǔ)知識(shí)。
第1章簡(jiǎn)單介紹了圖像處理的基礎(chǔ)知識(shí),包括圖像處理的發(fā)展現(xiàn)狀,還地介紹了圖像從獲取到顯示存儲(chǔ)的基本流程。
第2章首先介紹了FPGA的發(fā)展現(xiàn)狀,生產(chǎn)廠家及其開發(fā)流程。接著介紹了基于FPGA的圖像處理的基本開發(fā)流程。
第3章主要介紹了在FPGA中應(yīng)用的編程語(yǔ)言。本章并沒有詳細(xì)介紹Verilog語(yǔ)法,而是從工程應(yīng)用的角度介紹常用的設(shè)計(jì)方法和實(shí)例。
第4章主要介紹了把軟件算法映射到FPGA常用的技巧。首先介紹了應(yīng)用較廣泛的流水線設(shè)計(jì)方法,接著介紹了FPGA硬件計(jì)算技術(shù),包括一些常用的計(jì)算轉(zhuǎn)換、查找表、浮點(diǎn)計(jì)算、Cordic計(jì)算等方法。最后介紹了在圖像處理中用途非常多的存儲(chǔ)器映射,并提出了一些其他設(shè)計(jì)技巧。
第5章首先簡(jiǎn)要介紹了仿真測(cè)試軟件Modelsim的使用,接著重點(diǎn)介紹了一個(gè)通用的視頻圖像處理仿真測(cè)試系統(tǒng)。這個(gè)測(cè)試系統(tǒng)包括完整的視頻模擬、視頻捕獲,以及testbench設(shè)計(jì),并結(jié)合基于MFC的VC上位機(jī)來(lái)實(shí)現(xiàn)測(cè)試系統(tǒng)的搭建。
。2)第6~10章主要介紹算法實(shí)現(xiàn)。
第6章介紹直方圖操作,主要介紹幾種常用直方圖操作的FPGA實(shí)現(xiàn):直方圖統(tǒng)計(jì)、直方圖均衡、直方圖規(guī)定及直方圖線性拉伸。
第7章介紹基于圖像處理的線性濾波。首先,介紹了均值濾波算法、高斯濾波算法、Sobel算子及FFT等常見的幾種線性濾波原理。其次,介紹了均值濾波算法和Sobel算子的FPGA實(shí)現(xiàn)。
第8章主要介紹基于圖像處理的非線性濾波算法,包括排序?yàn)V波的基本原理及其FPGA實(shí)現(xiàn)方法。
第9章主要介紹基于圖像處理的形態(tài)學(xué)濾波算法,包括形態(tài)學(xué)濾波的基本概念,包括形態(tài)學(xué)膨脹、形態(tài)學(xué)腐蝕、開運(yùn)算及閉運(yùn)算等。重點(diǎn)介紹了基于FPGA的Tophat濾波的原理及實(shí)現(xiàn)方法。
第10章主要介紹基于圖像處理的常見的分割算法,包括全局閾值分割、局部自適應(yīng)閾值分割及Canny算子。重點(diǎn)介紹基于FPGA的局部自適應(yīng)閾值分割和Canny算子的設(shè)計(jì)與實(shí)現(xiàn)。
第11章主要介紹與視頻和圖像處理相關(guān)的輸入/輸出接口,包括CameraLink、火線接口、USB接口、千兆以太網(wǎng)等視頻輸入接口和CVT標(biāo)準(zhǔn),以及VGA,PAL,DVI,HDMI等視頻輸出接口。其中,給出了VGA和PAL接口的Verilog代碼實(shí)現(xiàn)。
為了確保讀者能夠快速地掌握FPGA圖像處理設(shè)計(jì)方法,本書提供了算法章節(jié)的全部源代碼。
本書由武漢理工大學(xué)機(jī)電工程學(xué)院牟新剛、周曉和鄭曉亮合著,全書由牟新剛統(tǒng)稿。
本書參考了相關(guān)著作及資料的部分內(nèi)容和圖表,部分技術(shù)資料取材于互聯(lián)網(wǎng),在此對(duì)這些文獻(xiàn)的作者一并表示謝意。盡管我們?yōu)榫帉懕緯冻隽诵难团,但仍然存在一些疏漏及欠妥之處,敬?qǐng)讀者批評(píng)指正。
著者
2016.5
第1章 圖像處理基礎(chǔ) 1
1.1 數(shù)字圖像處理簡(jiǎn)介 1
1.1.1 圖像采樣 1
1.1.2 圖像量化 2
1.1.3 數(shù)字圖像處理 3
1.2 數(shù)字圖像處理系統(tǒng) 4
1.2.1 圖像處理系統(tǒng)構(gòu)成 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技術(shù)優(yōu)勢(shì) 33
2.3 FPGA的發(fā)展歷程 34
2.4 FPGA生產(chǎn)廠家及其產(chǎn)品 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開發(fā)流程 38
2.5.1 FPGA設(shè)計(jì)方法 38
2.5.2 典型的FPGA開發(fā)流程 39
2.6 FPGA常用開發(fā)工具 44
2.6.1 代碼輸入工具 45
2.6.2 綜合工具 46
2.6.3 仿真工具 47
2.6.4 實(shí)現(xiàn)與優(yōu)化工具 47
2.6.5 EDA工具 48
2.7 FPGA圖像處理的開發(fā)流程 49
2.7.1 需求分析及問題描述 49
2.7.2 軟件算法設(shè)計(jì)及驗(yàn)證 50
2.7.3 硬件平臺(tái)設(shè)計(jì) 51
2.7.4 FPGA映射 52
2.7.5 仿真及驗(yàn)證 54
第3章 FPGA編程語(yǔ)言 55
3.1 HDL語(yǔ)言簡(jiǎn)介 55
3.2 模塊化設(shè)計(jì) 56
3.3 可移植性 57
3.4 不可移植性 61
3.5 測(cè)試邏輯 62
3.6 冗余邏輯 63
3.7 常用語(yǔ)法 63
3.7.1 參數(shù)化 63
3.7.2 條件編譯 68
3.7.3 位寬匹配 69
3.7.4 二維數(shù)組 69
3.8 應(yīng)用實(shí)例 70
3.8.1 信號(hào)邊沿檢測(cè) 70
3.8.2 多拍處理 72
3.8.3 圖像行列計(jì)數(shù) 73
第4章 映射技術(shù) 77
4.1 系統(tǒng)結(jié)構(gòu) 77
4.1.1 流水線設(shè)計(jì) 77
4.1.2 并行陣列 81
4.2 計(jì)算技術(shù) 82
4.2.1 算法轉(zhuǎn)換 82
4.2.2 近似計(jì)算 83
4.2.3 增量更新 85
4.2.4 查找表 85
4.2.5 浮點(diǎn)計(jì)算 89
4.2.6 Cordic技術(shù) 96
4.3 存儲(chǔ)器映射 103
4.3.1 幀緩存 104
4.3.2 行緩存 105
4.3.3 異步緩存 113
4.3.4 增加存儲(chǔ)器帶寬 114
4.3.5 存儲(chǔ)器建模與仿真 115
4.4 其他設(shè)計(jì)技巧 116
4.4.1 合理處理參數(shù) 116
4.4.2 資源及模塊復(fù)用 117
4.4.3 防止亞穩(wěn)態(tài) 118
第5章 系統(tǒng)仿真 121
5.1 Modelsim使用基礎(chǔ) 121
5.1.1 Modelsim簡(jiǎn)介 121
5.1.2 Modelsim圖形界面及
仿真示例 122
5.1.3 使用腳本命令來(lái)加速
仿真 133
5.1.4 其他加速仿真的方法 136
5.2 視頻圖像處理仿真測(cè)試系統(tǒng) 136
5.2.1 仿真測(cè)試系統(tǒng)框架 136
5.2.2 視頻時(shí)序模擬 137
5.2.3 視頻捕獲模擬 145
5.2.4 MFC程序設(shè)計(jì) 157
5.2.5 通用testbench 161
第6章 直方圖操作 167
6.1 灰度直方圖 167
6.2 直方圖均衡化 169
6.3 直方圖規(guī)定化 172
6.4 直方圖拉伸 175
6.5 基于FPGA的直方圖操作 179
6.5.1 FPGA直方圖統(tǒng)計(jì) 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 整體設(shè)計(jì)與模塊劃分 227
7.2.2 子模塊設(shè)計(jì) 228
7.2.3 Verilog代碼設(shè)計(jì) 232
7.2.4 仿真與調(diào)試結(jié)果 243
7.3 基于FPGA的Sobel算子 247
7.3.1 整體設(shè)計(jì)與模塊劃分 247
7.3.2 Sobel模板計(jì)算電路 249
7.3.3 基于Cordic的坐標(biāo)系轉(zhuǎn)換
電路 251
7.3.4 Verilog代碼設(shè)計(jì) 257
7.3.5 仿真與調(diào)試結(jié)果 274
第8章 非線性濾波器 280
8.1 統(tǒng)計(jì)排序?yàn)V波 280
8.2 基于FPGA的統(tǒng)計(jì)排序?yàn)V波器 282
8.2.1 并行全比較排序法原理 282
8.2.2 整體設(shè)計(jì)與模塊劃分 285
8.2.3 子模塊設(shè)計(jì) 286
8.2.4 Verilog代碼設(shè)計(jì) 288
8.2.5 仿真與調(diào)試結(jié)果 298
第9章 形態(tài)學(xué)濾波 303
9.1 形態(tài)學(xué)濾波簡(jiǎn)介 303
9.2 形態(tài)學(xué)濾波的基本應(yīng)用 304
9.3 基于FPGA的Tophat濾波設(shè)計(jì) 311
9.3.1 頂層框架設(shè)計(jì) 311
9.3.2 子模塊設(shè)計(jì) 312
9.3.3 Verilog代碼設(shè)計(jì) 317
9.3.4 仿真及調(diào)試結(jié)果 337
第10章 圖像分割 341
10.1 圖像分割簡(jiǎn)介 341
10.2 基于閾值的分割 341
10.2.1 全局閾值分割 341
10.2.2 局部自適應(yīng)閾值分割 344
10.3 基于邊緣的分割 347
10.3.1 Canny算子 347
10.3.2 Canny算子的計(jì)算步驟 347
10.4 基于FPGA的局部自適應(yīng)分割 356
10.4.1 算法轉(zhuǎn)換 357
10.4.2 FPGA結(jié)構(gòu)設(shè)計(jì) 358
10.4.3 子模塊設(shè)計(jì) 359
10.4.4 Verilog代碼設(shè)計(jì) 363
10.4.5 仿真與調(diào)試 371
10.5 基于FPGA的Canny算子設(shè)計(jì) 378
10.5.1 非最大值抑制電路設(shè)計(jì) 378
10.5.2 滯后閾值分割電路設(shè)計(jì) 381
10.5.3 Verilog代碼設(shè)計(jì) 382
10.5.4 仿真調(diào)試結(jié)果 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標(biāo)準(zhǔn) 411
11.2.2 VGA 416
11.2.3 PAL 425
11.2.4 DVI/HDMI 433
參考文獻(xiàn) 441