數(shù)碼影像系統(tǒng)的FPGA設(shè)計定稿
《數(shù)碼影像系統(tǒng)的FPGA設(shè)計定稿》由會員分享,可在線閱讀,更多相關(guān)《數(shù)碼影像系統(tǒng)的FPGA設(shè)計定稿(47頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、數(shù)碼影像系統(tǒng)的FPGA設(shè)計 目錄 1. 緒論 1 1.1課題背景 1 1.2數(shù)碼影像處理系統(tǒng)的現(xiàn)狀研究 1 1.2.1當(dāng)前主流數(shù)碼影像處理系統(tǒng)的研究方法 1 1.2.2基于FPGA的數(shù)碼影像處理系統(tǒng)的特點 2 1.3論文的課題意義 2 1.4論文的主要內(nèi)容 3 1.5論文的主要創(chuàng)新點 3 2. 數(shù)碼影像系統(tǒng) 3 2.1系統(tǒng)總體架構(gòu) 4 2.2 I2C傳感器配置單元 5 2.2.1 I2C總線工作原理 5 2.2.2 I2C傳感器配置單元功能介紹 6 2.3 RAW轉(zhuǎn)化RGB 8 2.3.1 RAW格式與RGB格式 8 2.3.2 Bayer 色彩模型 9 2
2、.3.3 雙線性插值算法 9 2.3.4 雙線性插值算法的實現(xiàn) 10 3. 影像處理算法的Verilog HDL設(shè)計 16 3.1灰度圖 17 3.1.1 YCbCr空間 17 3.1.2 由RGB產(chǎn)生灰度圖 18 3.2 二值圖 20 3.2.1 二值圖簡介 20 3.2.2 二值圖的實現(xiàn) 20 3.3 Sobel 邊緣檢測 21 3.3.1 Sobel邊緣檢測的算法基礎(chǔ) 22 3.3.2 Sobel 邊緣檢測的FPGA實現(xiàn) 23 3.4 腐蝕與膨脹 28 3.4.1 腐蝕與膨脹的應(yīng)用 28 3.4.2 腐蝕與膨脹的原理與實現(xiàn) 29 4. 系統(tǒng)驗證 32 4.
3、1設(shè)計平臺 32 4.2灰度圖的驗證 33 4.3二值圖的驗證 34 4.4Sobel邊緣檢測的驗證 34 4.5膨脹與侵蝕的驗證 35 5. 設(shè)計總結(jié)與展望 35 5.1設(shè)計總結(jié) 35 5.2展望 36 5.2.1全高清攝像 36 5.2.2基于Nios II的二次開發(fā) 36 5.2.3自動白平衡算法的初步探究 37 6. 結(jié)論 39 致謝 …………………………………………………………………………………………..40 參考文獻(xiàn) 41 摘要 本研究以FPGA技
4、術(shù)為基礎(chǔ)的嵌入式實時影像處理系統(tǒng),將目前數(shù)字信號處理中廣泛使用的大規(guī)??删幊碳呻娐沸酒陀跋裉幚砑夹g(shù)相結(jié)合,克服了在影像處理中長期依賴PC機(jī)而且處理速度較慢的缺點,同時也避免了使用DSP芯片而導(dǎo)致的不能隨組織架構(gòu)變化而修改,具有較高的靈活性和復(fù)用性。 在設(shè)計的過程中,查閱了很多相關(guān)資料,在認(rèn)真研究,仔細(xì)分析并且動手實踐后,最終確定提出基于FPGA技術(shù)的數(shù)碼影像系統(tǒng)的設(shè)計方案。設(shè)計實現(xiàn)了基于緩存技術(shù)的了RAW to RGB的雙線性轉(zhuǎn)化算法可調(diào)用模塊和Sobel邊緣檢測可調(diào)用模塊。該方案硬件平臺由DE2-70開發(fā)板、TRDB-D5M 500M像素CMOS傳感器、VGA顯示器組成,使用Veril
5、og HDL語言設(shè)計,在單片F(xiàn)PGA上實現(xiàn)了影像數(shù)據(jù)的采集和處理,包括雙線性插值算法、色彩空間的變換(RGB空間轉(zhuǎn)換YCbCr空間)、二值圖、Sobel邊沿檢測、膨脹和侵蝕、并且可以通過VGA接口顯示在顯示器上。 最后對系統(tǒng)的主要功能模塊進(jìn)行了調(diào)試和驗證,實驗證明了系統(tǒng)可以較好的進(jìn)行影像采集、影像處理和影像的現(xiàn)實,證明了系統(tǒng)框架及算法的正確性 關(guān)鍵詞:實時影像處理、FPGA、Verilog HDL、雙線性插值算法、Sobel邊緣檢測 Abstruct This research, designed an Embedded Real
6、-time Digital Video Processing System on basis of FPGA technique, is focused on the combination of video processing technique with the large scale programmable integration chips, which are widely used in digital signal process. It overcomes the long-term dependency on PCs during the video processing
7、 and the low pace of processing, and avoids the incapability of modifying the structure with the use of DSP chips. Thus, this system possesses higher flexibility and reusability. In the procedure of design, large amount of documents are considered. With attentive study, analysis and practices, a de
8、sign program of digital video system based on FPGA technique was raised. This research realizes the RAW to RGB bi-linear algorithm invokable modules and Sobel edge examination invokable modules, all of which are based on the caching technique. This program’s hardware platform consists of DE2-70 boar
9、d, TRDB-D5M 500M Pixel CMOS sensor and VGA monitor and uses Verilog HDL language design to realize on single piece of FPGA the collection and processing of video data, including bi-linear interpolation, the conversion of color space (from RGB color space to YCbCr space), binary image, Sobel edge exa
10、mination, expansion and corrosion, and all these can be seen on the monitor through the VGA interface. Lastly, the main function modules of this system are modified and verified. This research clarifies the capability of collecting, processing and the presence of the images of this system and prove
11、s the correctness of the algorithm and the system framework. Key words: real-time video processing, FPGA, Verilog HDL, bi-linear interpolation, Sobel edge examination 43 1.緒論 1.1課題背景 進(jìn)入信息化時代之后,人類大概有80%以上的信息都來源于數(shù)碼影像,影像信息較之傳統(tǒng)的紙面媒體,所占的比例日益增高。在多媒體技術(shù)的各個領(lǐng)域中,影像處理技術(shù)占有極為重要的地位。 影像處理技術(shù)被廣泛的應(yīng)用于實時視頻監(jiān)控
12、,網(wǎng)絡(luò)多媒體通信,高清數(shù)字電視等多個方面。隨著各種媒體的出現(xiàn)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展出現(xiàn) 很多新鮮的事物,如網(wǎng)絡(luò)視頻會議、電視電話會議、多媒體智能會議等,這些系統(tǒng)都要求對數(shù)碼影像進(jìn)行靈活的處理和顯示。而在電力、交通、通信以及指揮調(diào)度等傳統(tǒng)行業(yè)中,多媒體的應(yīng)用在逐漸增加。這些行業(yè)中應(yīng)用到的大屏幕顯示系統(tǒng),都要求其顯示的影像能根據(jù)具體要求進(jìn)行靈活的變換。因此,數(shù)碼影像處理系統(tǒng)在民用方面有著廣闊的應(yīng)用前景。 1.2數(shù)碼影像處理系統(tǒng)的現(xiàn)狀研究 1.2.1當(dāng)前主流數(shù)碼影像處理系統(tǒng)的研究方法 數(shù)碼影像處理系統(tǒng)主要完成數(shù)碼影像的采集、處理、存儲和顯示。影像采集部分完成影像的獲取,影像處理部分對獲得的影
13、像數(shù)據(jù)進(jìn)行相關(guān)處理,影像存儲部分用于存儲影像數(shù)據(jù),影像顯示部分用于顯示經(jīng)處理或未經(jīng)處理的影像。數(shù)碼影像處理系統(tǒng)的核心任務(wù)是處理采集來的數(shù)碼影像信號。 圖1-1 影像處理系統(tǒng) 目前的數(shù)碼影像處理系統(tǒng)大體上可以分為兩大類[4],通用數(shù)碼影像處理系統(tǒng)和專用數(shù)碼影像處理系統(tǒng)。通用數(shù)碼影像處理系統(tǒng)一般以通用計算機(jī)為基礎(chǔ),如大型機(jī)、小型機(jī)、工作站、微機(jī)等,其中較普及的是以微機(jī)為基礎(chǔ)的數(shù)碼影像處理系統(tǒng)。專用數(shù)碼影像處理系統(tǒng)一般是針對嵌入式應(yīng)用而產(chǎn)生和發(fā)展起來的,通常以DSP、可編程邏輯器件(FPGA)等為基礎(chǔ). 本課題是以可控編程邏輯器件(FPGA)為基礎(chǔ)的嵌入式實時專用影像處理系統(tǒng)做一個初步的探
14、索。 1.2.2基于FPGA的數(shù)碼影像處理系統(tǒng)的特點 可編程邏輯器件(FPGA:Field Programmable Gate Array)是近幾年才發(fā)展起來的一種新型集成電路,是當(dāng)前數(shù)字系統(tǒng)設(shè)計的主要硬件基礎(chǔ),是VHDL,Verilog-HDL等硬件編程語言的物理實現(xiàn)工具,F(xiàn)PGA器件以其靈活的可重配和可編程特性, 逐漸成為一種流行的設(shè)計載體被廣泛地應(yīng)在工業(yè)控制、 通信、 消費類電子等各種領(lǐng)域的復(fù)雜設(shè)計中。 圖1-2 FPGA結(jié)構(gòu)圖 目前主流的FPGA仍是基于查找表技術(shù)的,已經(jīng)遠(yuǎn)遠(yuǎn)超出了先前版本的基本性能,并且整合了常用功能(如RAM、時鐘管理和DSP)的硬核(ASIC型)模
15、 塊。如圖1-2所示(注:圖1-2只是一個示意圖,實際上每一個系列的FPGA都有其相應(yīng)的內(nèi)部結(jié)構(gòu)),F(xiàn)PGA芯片主要由7部分完成,分別為:可編程輸入輸出單元、基本可編程邏輯單元、完整的時鐘管理、嵌入塊式RAM、豐富的布線資源、內(nèi)嵌的底層功能單元和內(nèi)嵌專用硬件模塊。 1.3論文的課題意義 1)提高系統(tǒng)的實時性 本課題采用Verilog HDL語言進(jìn)行設(shè)計,各模塊間數(shù)據(jù)可并行處理,能有效提高視頻圖像的處理速度,滿足實時性要求。 2)增強(qiáng)系統(tǒng)的靈活性 利用FPGA的在系統(tǒng)硬件升級能力,可以在原有硬件資源不變的情況下對硬件系統(tǒng)進(jìn)行升級。硬件升級包括緩存的升級、接口控制器的升級等
16、。這在其他方式的視頻圖像處理器上是無法實現(xiàn)的。在使用過程中,可能會發(fā)現(xiàn)某些原始設(shè)計中的缺陷,或隨著技術(shù)的不斷更新,產(chǎn)生某些新的需求。此時,可以利用FPGA的硬件可重配置技術(shù),在不改變原有硬件結(jié)構(gòu)的情況下,通過網(wǎng)絡(luò)對異地的硬件電路進(jìn)行遠(yuǎn)程升級,更正設(shè)計中的瑕疵或增加功能。 3)為今后的進(jìn)一步研究作基礎(chǔ) 本課題對以可控編程邏輯器件(FPGA)為基礎(chǔ)的嵌入式實時專用影像處理系統(tǒng)做一個初步的探索,完成了影像最基本的采集,簡單的預(yù)處理,圖像制式的轉(zhuǎn)化,圖像的顯示和一些圖形學(xué)算法。在后文中提及到的自動白平衡、自動曝光等都可以以此為基礎(chǔ)作進(jìn)一步的研究。 1.4論文的主要內(nèi)容 1)研究數(shù)碼影像系統(tǒng)
17、的現(xiàn)狀,重點關(guān)注基于FPGA的嵌入式實時數(shù)碼影像系統(tǒng)。 2)使用Verilog HDL語言設(shè)計數(shù)碼影像處理系統(tǒng)的采集、處理和顯示等IP模塊 3)對系統(tǒng)軟、硬件進(jìn)行綜合測試,驗證其正確性和可靠性 1.5論文的主要創(chuàng)新點 1)設(shè)計實現(xiàn)基于緩存技術(shù)的了RAW to RGB的雙線性轉(zhuǎn)化算法的實時處理單元,使得轉(zhuǎn)化后的影像有較好的質(zhì)量。 2)設(shè)計實現(xiàn)了Sobel邊緣檢測的實時處理單元,對Sobel邊緣檢測這一圖形學(xué)上的重要算法做出較好的實現(xiàn)方式。 2.數(shù)碼影像系統(tǒng) 2.1系統(tǒng)總體架構(gòu) 一個典型的數(shù)碼影像處理系統(tǒng)一般包括以下幾個部分:CMOS傳感器、影像處理系統(tǒng)、輸入輸出單元和
18、顯示器等,概括而言,即為前文所述的影像采集、影像處理和影像顯示3大部分。影像采集事實上就是一個光電轉(zhuǎn)換的過程,即將被拍攝物體的光學(xué)信號轉(zhuǎn)換成可以被系統(tǒng)處理的數(shù)碼影像信號。影像的處理和顯示過程包括影像格式的轉(zhuǎn)換、圖形學(xué)上的算法處理然后將處理之后的圖像通過顯示器表現(xiàn)出來。 結(jié)合課題需求和實際情況綜合分析, 系統(tǒng)的硬件平臺總體框架如下圖所示: 圖2-1 系統(tǒng)硬件平臺總體框圖 數(shù)碼影像系統(tǒng)中的大部分設(shè)計工作都集中在FPGA上完成,通過分析可以確定FPGA中需要包含以下幾個模塊(內(nèi)部結(jié)構(gòu)圖如圖2-3所示): 圖2-2 FPGA內(nèi)部各模塊框圖 (1) I2C傳感器配置單元
19、: FPGA通過I2C總線對其內(nèi)部控制寄存器進(jìn)行配置,使其按照一定格式進(jìn)行采樣輸出。 (2) CMOS傳感器數(shù)據(jù)接口:當(dāng)FPGA接收到CMOS傳送的影像數(shù)據(jù)之后,由于CMOS影像傳感器和FPGA工作在不同頻率下,此模塊作為一個異步FIFO,來處理異步時鐘的問題。 (3) RAW to RGB轉(zhuǎn)換模塊:將得到的RAW格式影像數(shù)據(jù)轉(zhuǎn)化成RGB格式的影像數(shù)據(jù),以便后續(xù)的處理和顯示。 (4) 4端口SDRAM控制器:將轉(zhuǎn)換后的圖像存入SDRAM芯片中作為幀緩存。 (5) 影像處理單元:集成了本課題中所有完成的的影像后期處理模塊。。 (6) VGA控制器:,產(chǎn)生行同步和場同步信號,并在恰當(dāng)?shù)臅r
20、候?qū)?shù)據(jù)輸出,經(jīng)由D/A轉(zhuǎn)換后送至VGA顯示。 對于圖像傳感器獲取的數(shù)據(jù)進(jìn)行前期的預(yù)處理中,I2C傳感器控制單元和RAW to RGB轉(zhuǎn)換模塊為最重要的兩個模塊。 2.2 I2C傳感器配置單元 I2C(Inter-Integrated Circuit)總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。是微電子通信控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。它是同步通信的一種特殊形式,具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高等優(yōu)點。 2.2.1 I2C總線工作原理 I2C總線是由數(shù)據(jù)線SDA和 時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU
21、與被控IC之間、IC與IC之間進(jìn)行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián) 在這條總線上,但就像電話機(jī)一樣只有撥通各自的號碼才能工作,所以每個電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線 上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU或者IC發(fā)出的控制信號分為地址碼和控制量兩部分,地址 碼用來選址,即接通需要控制的電路,確定控制的種類;控制量決定該調(diào)整的類別(如曝光時間、增益等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線 上,卻彼此獨立,互不相關(guān)。 I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號
22、, 它們分別是:開始信號、結(jié)束信號和應(yīng)答信號。 開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。 結(jié)束信號:SCL為低電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。 應(yīng)答信號:接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單 元發(fā)出一個應(yīng)答信號,CPU接收到應(yīng)答信號后,根據(jù)實際情況作出是否繼傳遞信號的判斷。若未收到應(yīng)答信號,由判斷為受控單元出現(xiàn)故障。其邏輯關(guān)系如圖2-3和圖2-4所示。 圖2-3 I2C總線的開始和結(jié)束信號 圖2-4 I2C總線的響應(yīng)信號 2
23、.2.2 I2C傳感器配置單元功能介紹 在本設(shè)計中,I2C總線主要應(yīng)用在對CMOS傳感器的配置上。控制單元通過I2C總線和CMOS通信,配置CMOS給出的各個寄存器。不同得寄存器有對應(yīng)的地址,和對應(yīng)的控制量,從而調(diào)整CMOS的個參數(shù),包括:曝光時間、紅綠藍(lán)曝光增益、水平消隱和垂直消隱等。I2C傳感器配置單元結(jié)構(gòu)圖如下: 圖2-5 I2C傳感器配置單元FPGA實例化模塊圖 其中常量default_exposure為默認(rèn)曝光時間, exposure_change_value 為曝光變化量,CLK_Freq 為系統(tǒng)采樣時鐘頻率,I2C_Freq為I2C總線時鐘頻率 LUT_SUZE為查
24、找表數(shù)量。 圖2-6 I2C傳感器配置單元RTL圖 2.3 RAW轉(zhuǎn)化RGB CMOS傳感器的數(shù)據(jù)由數(shù)據(jù)接口轉(zhuǎn)發(fā)后,仍舊是RAW格式,并不能直接交由隨后的圖像處理模塊進(jìn)行圖像處理,在期間要轉(zhuǎn)化為使用的比較多的RGB格式,因此就有了RAW to RGB轉(zhuǎn)換模塊。 2.3.1 RAW格式與RGB格式 RAW中文解釋是“原材料”或“未經(jīng)處理的東西”。RAW文件包含了原圖片文件在傳感器產(chǎn)生后,進(jìn)入影像處理器之前的一切影像信息。通過對顏色過濾排列的專題的了解,我們應(yīng)該知道傳統(tǒng)的傳感器中,每個象素只負(fù)責(zé)獲得一種顏色。每個象素承載的數(shù)據(jù)通常有10或12位(本文所選用的傳感器產(chǎn)生的是12位數(shù)
25、據(jù)),而這些數(shù)據(jù)就能儲存到RAW文件里面。 RAW文件最大的弊端在于,對于不同廠商的傳感器,RAW文件的色彩模型可能會不一樣,這圖像處理的不便。因此,往往會將RAW轉(zhuǎn)化為RGB在進(jìn)行處理。 RGB色彩模式(也翻譯為“紅綠藍(lán)”,比較少用)是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過對紅(R)、綠(G)、藍(lán)(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍(lán)三個通道的顏色,這個標(biāo)準(zhǔn)幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色系統(tǒng)之一。 圖2-7 RGB色彩空間 RGB色彩模式使用RGB模型為圖像中每一個像素的R、G、B分量分配一個強(qiáng)度值。RGB
26、圖像只使用三種顏色,就可以使它們按照不同的比例混合,在屏幕上重現(xiàn)不同的顏色。 2.3.2 Bayer 色彩模型 本課題從CMOS中獲取的RAW文件采用的是Bayer色彩模型,其制式如下圖所示: 圖2-8 Bayer模型 如2.3.1所述,Raw data是指原始的數(shù)據(jù),傳感器的單個像素只能感應(yīng)一種顏色。如果這個原始數(shù)據(jù)的排列格式是RGRG/GBGB排列的,我們叫做Bayer pattern。(這個模型最為常見)。 對于傳感器來說,BayerRGB的圖象結(jié)構(gòu)是BG/GR的。Bayer模型說的是COLOR FILTER 的結(jié)構(gòu),分為兩種:STD Bayer pattern與P
27、air pattern,其中STD Bayer pattern的結(jié)構(gòu)是BG/GR的(見圖2-8),而 PairPattern顧名思義是指BGBG/GRGR的結(jié)構(gòu),即以四行為一個單位,前兩行是BG的結(jié)構(gòu),后兩行是GR的結(jié)構(gòu),這種結(jié)構(gòu)是美光專門為此 申請了專利的,主要是在輸出TV模式(NTSC/PAL制)時用到。 2.3.3 雙線性插值算法 對于Bayer格式圖像的彩色還原算法,國內(nèi)外都有很多成熟的算法,例如:最鄰近替換法、雙線性插值算法、平滑色調(diào)轉(zhuǎn)化算法、自適應(yīng)邊界敏感的插值算法、模式匹配算法等。考慮到可實現(xiàn)性、穩(wěn)定性等因素,本論文主要基于雙線性插值算法還原彩色圖像,還原出來的圖像效果較
28、好,完全滿足實際應(yīng)用要求。 參照圖2-8,可以將雙線性而插值算法簡述為以下3種情況: 1.紅色/藍(lán)色像素點的綠色分量: 差值等于其相鄰4個綠色像素點分量的均值,例如G8=(G3+G7+G9+G13)/4 2.綠色像素點的紅色/藍(lán)色分量: 差值等于其相鄰兩個像素的紅色/藍(lán)色分量,例如R7=(R2+R12)/2,B7=(B6+B8)/2 3.紅色/藍(lán)色像素點的藍(lán)色/紅色分量: 差值等于其對角方形的4個像素點處得紅色/藍(lán)色分量均值,例如R8=(R2+R4+R12+R14)/4,B14=(B8+B10+B18+B20)/4。 2.3.4 雙線性插值算法的實現(xiàn) 在使用C/C++或者
29、其他編程語言對圖像進(jìn)行處理的時候,可以直接將每個像素放到二維數(shù)組之中,然后使用for語句和if語句嵌套,實現(xiàn)諸如雙線性而插值算法非常的簡單。 但是在FPGA中,由于做的是實時處理,SDRAM僅僅是用來做幀緩存,影像不斷從CMOS進(jìn)來,再不斷的傳送到VGA,可以將其視為FIFO,在使用HDL類語言進(jìn)行FPGA的開發(fā)時,我們無法建立一個類似于高級編程語言中的二維數(shù)組來存取。 因此為了解決實時性的問題本文采用了基于緩存技術(shù)的雙線性插值算法,其基本流程如圖2-9 所示: 圖2-9 雙線性插值算法基本流程 在通過緩存的處理后可以將3行的RAW DATA依次放入一個3X3的寄存器矩陣中
30、,用來計算單個像素點的轉(zhuǎn)換,每過一個時鐘周期,寄存器矩陣中的數(shù)據(jù)會一次時鐘周期刷新一個,再通過調(diào)用寄存器矩陣中的數(shù)據(jù)進(jìn)行插值運算,從而達(dá)到實時處理的功能。此模塊核心代碼如下: module RAW2RGB ( iCLK,iRST_n, //Read Port 1 iData, iDval, oRed, oGreen, oBlue, oDval, iZoom, iX_Cont, iY_Cont
31、); input iCLK,iRST_n; //輸入時鐘 input [11:0] iData; //輸入RAW數(shù)據(jù) input iDval; //幀同步信號 output [11:0] oRed; //輸出R通道 output [11:0] oGreen; //輸出G通道 output [11:0] oBlue; //輸出B通道 output oDval; //輸出場同步 input [1:0] iZoom; input [15:0] iX_Cont; //行計
32、數(shù)器 input [15:0] iY_Cont; //列計數(shù)器 wire [11:0] wData0; wire [11:0] wData1; wire [11:0] wData2; reg [13:0] rRed; reg [13:0] rGreen; reg [13:0] rBlue; reg rDval; reg [11:0] wData0_d1,wData0_d2; reg [11:0] wData1_d1,wData1_d2; reg [11:0] wData2_d1,wData2_d2; reg oDval; r
33、eg dval_ctrl; reg dval_ctrl_en; //out assign oRed = rRed[13:2]; assign oGreen = rGreen[13:2]; assign oBlue = rBlue[13:2]; Line_Buffer L1 ( //緩存 .clken(iDval), .clock(iCLK), .shiftin(iData), .shiftout(), .taps2x(wData0), .taps1x(wData1), .ta
34、ps0x(wData2) ); always@(posedge iCLK or negedge iRST_n) begin if (!iRST_n) begin dval_ctrl<=0; end else begin if(iY_Cont>1) begin dval_ctrl<=1; end else begin dval_ctrl<=0; end end end always@(posedge dval_
35、ctrl or negedge iRST_n) begin if (!iRST_n) begin dval_ctrl_en<=0; end else begin dval_ctrl_en<=1; end end always@(posedge iCLK or negedge iRST_n) begin if (!iRST_n) begin rDval<=0; oDval <= 0; end else if(dval_ctrl_en) be
36、gin rDval<=iDval; oDval<=rDval; end else begin rDval<=iDval; oDval<=0; end end always@(posedge iCLK or negedge iRST_n) //寄存器傳遞 begin if (!iRST_n) begin wData0_d1<=0; wData0_d2<=0; wData1_d1<=0; wData1_d2<=0; wData2
37、_d1<=0; wData2_d2<=0; end else begin {wData0_d2,wData0_d1}<={wData0_d1,wData0}; {wData1_d2,wData1_d1}<={wData1_d1,wData1}; {wData2_d2,wData2_d1}<={wData2_d1,wData2}; end end always@(posedge iCLK or negedge iRST_n) //雙線性插值算法 begin if (!iRST_n)
38、begin rRed<=0; rGreen<=0; rBlue<=0; end else if ({iY_Cont[0],iX_Cont[0]} == 2b11) begin if (iY_Cont == 12d1) begin rRed<={wData1_d1,2b00}; rGreen<=wData0_d1+wData1+wData0_d1+wData1; rBlue<={wData0,2b00}; end else begin
39、 rRed<={wData1_d1,2b00}; rGreen<=wData1+wData2_d1+wData1_d2+wData0_d1; rBlue<=wData2+wData2_d2+wData0+wData0_d2; end end else if ({iY_Cont[0],iX_Cont[0]} == 2b10) begin if (iY_Cont == 12d1) begin if (iX_Cont == 12b0) begin rRed
40、<={wData0_d2,2b00}; rGreen<={wData1_d2,2b00}; rBlue<={wData1_d1,2b00}; end else begin rRed<={wData1,2b00}; rGreen<=wData1_d1+wData0+wData1_d1+wData0; rBlue<={wData0_d1,2b00}; end end else begin //
41、for last one X pixel of the colowm process if (iX_Cont == 12b0) begin rRed<={wData2_d2,2b00}; rGreen<={wData2_d1,2b00}; rBlue<={wData1_d1,2b00}; end // normal X pixel of the colowm process else begin rRed<=wData1+wData1
42、_d2+wData1+wData1_d2; rGreen<=wData1_d1+wData2+wData0++wData0_d2; rBlue<=wData2_d1+wData0_d1+wData2_d1+wData0_d1; end end end else if ({iY_Cont[0],iX_Cont[0]} == 2b01) begin rRed<=wData2_d1+wData0_d1+wData2_d1+wData0_d1; rGreen<=wData1_d1+wDa
43、ta2+wData0++wData0_d2; rBlue<=wData1+wData1_d2+wData1+wData1_d2; end else if ({iY_Cont[0],iX_Cont[0]} == 2b00) begin if (iX_Cont == 12b0) begin rRed<={wData1_d2,2b00}; rGreen<={wData2_d2,2b00}; rBlue<={wData2_d1,2b00}; end // normal X o
44、f the colowm process else begin rRed<=wData2+wData2_d2+wData0+wData0_d2; rGreen<=wData2_d1+wData1+wData0_d1+wData1_d2; rBlue<={wData1_d1,2b00}; end end end endmodule 經(jīng)過編譯后我們可以得到如下圖所示的可調(diào)用模塊: 圖2-11 RAW to RGB FPGA實例化模塊圖 其RTL圖為: 圖2-12
45、RAW to RGB模塊RTL圖 3.影像處理算法的Verilog HDL設(shè)計 Verilog HDL是一種硬件描述語言(HDL:Hardware Discription Language),是一種以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。 Verilog HDL和VHDL是目前世界上最流行的兩種硬件描述語言,都是在20世紀(jì)80年代中期開發(fā)出來的。前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購)開發(fā)。兩種HDL均為IEEE標(biāo)準(zhǔn)。 Verilog
46、HDL由于其和C語言類似,擁有比基于ADA語言的VHDL有更高的可讀性,更重要的是它在復(fù)雜FPGA上的良好性能和可拓展性,因此本課題所有的模塊都是使用Verilog HDL進(jìn)行設(shè)計。 3.1灰度圖 在計算機(jī)領(lǐng)域中[3],灰度(Gray scale)數(shù)字影像是每個像素只有一個采樣顏色的影像。這類影像通常顯示為從最暗黑色到最亮的白色的灰度,盡管理論上這個采樣可以任何顏色的不同深淺,甚至可以是不同亮度上的不同顏色?;叶扔跋衽c黑白影像不同,在計算機(jī)影像領(lǐng)域中黑白影像只有黑白兩種顏色,灰度影像在黑色與白色之間還有許多級的顏色深度。但是,在數(shù)字影像領(lǐng)域之外,“黑白影像”也表示“灰度影像”,例如灰度
47、的照片通常叫做“黑白照片”。 3.1.1 YCbCr空間 正如幾何上用坐標(biāo)空間來描述坐標(biāo)集合, 色彩空間用數(shù)學(xué)方式來描述顏色集合。常見的3 個基本色彩模型是RGB,CMYK和YUV。 YCbCr 則是在世界數(shù)字組織視頻標(biāo)準(zhǔn)研制過程中作為ITU - R BT1601 建議的一部分, 其實是YUV經(jīng)過縮放和偏移的翻版。在YCbCr中,Y是指亮度分量,Cb指藍(lán)色色度分量,而Cr指紅色色度分量。在YUV中, YCbCr 是在計算機(jī)系統(tǒng)中應(yīng)用領(lǐng)域最廣泛的版本,JPEG、MPEG均采用此格式。一般人們所講的YUV大多是指YCbCr。 YCbCr 有許多取樣格式, 如4∶2:0 ,
48、4∶2∶2 ,和4∶4∶4。4:2:0表示每4個像素有4個亮度分量,2個色度分量 (YYYYCbCr),僅采樣奇數(shù)掃描線,是便攜式視頻設(shè)備(MPEG-4)以及電視會議(H.263)最常用格式;4:2:2表示每4個像素有4個亮度 分量,4個色度分量(YYYYCbCrCbCr),是DVD、數(shù)字電視、HDTV 以及其它消費類視頻設(shè)備的最常用格式;4:4:4表示全像素點陣 (YYYYCbCrCbCrCbCrCbCr),用于高質(zhì)量視頻應(yīng)用、演播室以及專業(yè)視頻產(chǎn)品。 3.1.2 由RGB產(chǎn)生灰度圖 轉(zhuǎn)化為RGB格式后的數(shù)據(jù)都有3個單元分別表示和紅(R)、綠(G)、藍(lán)(B)三色空間;為了降低運算
49、量,許多影響處理算法常常直接使用灰階的影像處理技術(shù)做處理和分析。 灰度是沒有色彩,RGB色彩分量全部相等,用來確定黑白圖像中的顏色深度,故黑白圖片也被稱為灰度圖。彩色圖像的灰度其實是轉(zhuǎn)化為黑白圖像后的像素值,轉(zhuǎn)化的方法看應(yīng)用的領(lǐng)域而定,一般按加權(quán)的方法轉(zhuǎn)換: (1) 根據(jù)公式(1)求得Y后,將原來的RGB(R,G,B)中的R,G,B統(tǒng)一用Y替換,形成新的顏色RGB(Y,Y,Y),用它替換原來的RGB(R,G,B)就是灰度圖了。 實現(xiàn)灰度轉(zhuǎn)換的核心代碼如下: module RGB_to_Gray( en, clk, rst, //isCCD_DVAL,
50、 i_R, i_G, i_B, //osCCD_DVAL, o_Y ); input en; //使能開關(guān) input clk; //時鐘信號 input rst; //復(fù)位信號 input [9:0] i_R; //R通道輸入 input [9:0] i_G; //G通道輸入 input [9:0] i_B; //B通道輸入 output [9:0] o_Y; //Y信號輸出 wire [17:0] Y; reg [9:0] r_Y; assign Y = i_R*77+i_G*1
51、50+i_B*29; //灰度圖僅需要Y信號輸出 assign o_Y = r_Y; always@(posedge clk or negedge rst) begin if(!rst) begin r_Y <= 0; end else if(en!=1b1) begin r_Y <= 0; end else begin r_Y <= Y[17:8]; end end endmodule 下圖為代碼編譯后的可調(diào)用模塊和其RTL結(jié)構(gòu)圖 圖3-1 RGB to Gray
52、灰階轉(zhuǎn)化FPGA實例化模塊圖 圖3-2 RGB to Gray 灰階轉(zhuǎn)化RTL結(jié)構(gòu)圖 3.2 二值圖 3.2.1 二值圖簡介 二值圖像是每個像素只有兩個可能值的數(shù)字圖像。人們經(jīng)常用黑白、B&W、單色圖像表示二值圖像,但是也可以用來表示每個像素只有一個采樣值的任何圖像,例如灰度圖像等。 二值圖像經(jīng)常出現(xiàn)在數(shù)字圖像處理中作為圖像掩碼或者在圖像分割、二值化和dithering的結(jié)果中出現(xiàn)。一些輸入輸出設(shè)備,如激光打印機(jī)、傳真機(jī)、單色計算機(jī)顯示器等都可以處理二值圖像;同時,二值圖像經(jīng)常使用在位圖格式存儲。 事實上二值圖像可以解釋為二維整數(shù)格,圖像變形處理領(lǐng)域很大程度上就是受到這個觀
53、點啟發(fā)。 3.2.2 二值圖的實現(xiàn) 由灰階圖像,可以進(jìn)而轉(zhuǎn)化為二值圖像。二值圖顧名思義,這個圖像中只有2種顏色,黑和白,即FF和00。二值化后,可以明顯的區(qū)分出背景和主要影響,這樣的處理可以使得資料單純化,更易于識別。實驗中所用的二值化公式如(2)所示,其中f為圖像的灰階值,I0為灰階門檻值: (2) 其核心代碼如下: module Binary( input clk, input rst, input en, input [9:0] i_Y, //Y信號輸入 input [9:0] i
54、THRESHOLD, //門閥值 output [9:0] o_Binary //二值圖信號輸出 ); reg [9:0] Y; assign o_Binary = Y; always@(posedge clk or negedge rst) begin if(!rst) begin Y <= 0; end else if(!en) begin Y <= 0; end else begin Y <= (i_Y > iTHRESHOLD) ? 1023 :0; //門閥值判斷 e
55、nd end endmodule 代碼經(jīng)過編譯后,得到的可調(diào)用模塊與RTL結(jié)構(gòu)圖如下: 圖3-3 二值圖FPGA實例化模塊圖 圖3-4 二值圖模塊RTL結(jié)構(gòu)圖 3.3 Sobel 邊緣檢測 邊緣是指圖像中灰度有解約的變化的那些像素的集合。兩個覺有不同灰度值的相鄰區(qū)域之間總存在邊緣,它對圖像識別和分析十分有用。邊緣能勾畫出目標(biāo)物的的輪廓,使觀察者一目了然,是圖像識別中的重要屬性。 3.3.1 Sobel邊緣檢測的算法基礎(chǔ) Sobel邊沿檢測常用在一些特殊的領(lǐng)域,由于其Sobel算法的特殊性,在實現(xiàn)Sobel算法時使用和實現(xiàn)雙線性插值算法有類似的地
56、方?,F(xiàn)在給出Sobel 梯度算子: Gx: 圖3-5 矩陣Gx Gy: 圖3-6 矩陣Gy 對于Gx從左向右從上往下編號為X1,X2,X3……X8,X9,Gy同理有Y1,Y2……Y8,Y9, 對以下像素陣列求P5的整列有: Pi: 圖3-7 像素矩陣 (3) (4) 根據(jù)Sobel演算法,要求其幾何平均數(shù): (5) 得出的G再和門閥值進(jìn)行比較: (6) 這樣就可以得出單個像素點的Sobel邊沿檢測的結(jié)果。 3.3.2 Sobel 邊緣檢測的FPGA實現(xiàn) 根據(jù)2.2中基于緩存技術(shù)
57、的雙線性插值算法,可以同樣的的設(shè)計出: 圖3-8 Sobel邊沿檢測算法的FPGA實現(xiàn) 在對Gx,Gy依次完成函數(shù)(5)、(6)的運算后,就能實現(xiàn)像素點的Sobel邊緣檢測。 其核心代碼如下: module Sobel ( input iCLK, input iRST_N, input [9:0] iTHRESHOLD, input iDVAL, input [9:0] iDATA, output reg oDVAL, output reg [
58、9:0] oDATA ); // mask x parameter X1 = 8hff, X2 = 8h00, X3 = 8h01; parameter X4 = 8hfe, X5 = 8h00, X6 = 8h02; parameter X7 = 8hff, X8 = 8h00, X9 = 8h01; // mask y parameter Y1 = 8h01, Y2 = 8h02, Y3 = 8h01; parameter Y4 = 8h00, Y5 = 8h00, Y6 = 8h00; parameter Y7 = 8hff, Y8 = 8hfe, Y9 = 8
59、hff; wire [9:0] Line0; wire [9:0] Line1; wire [9:0] Line2; wire [19:0] Mac_x0; //乘法器 wire [19:0] Mac_x1; wire [19:0] Mac_x2; wire [19:0] Mac_y0; wire [19:0] Mac_y1; wire [19:0] Mac_y2; wire [21:0] Pa_x; //加法器 wire [21:0] Pa_y; wire [15:0] Abs_mag; //開方
60、 LineBuffer_3 b0 ( //緩存 .clken(iDVAL), .clock(iCLK), .shiftin(iDATA), .taps0x(Line0), .taps1x(Line1), .taps2x(Line2) ); // X MAC_3 x0 ( .aclr0(!iRST_N), .clock0(iCLK), .dataa_0(Line0), .datab_0(X9), .datab_1(X8), .datab_2(X7), .result(Mac_x0) );
61、MAC_3 x1 ( .aclr0(!iRST_N), .clock0(iCLK), .dataa_0(Line1), .datab_0(X6), .datab_1(X5), .datab_2(X4), .result(Mac_x1) ); MAC_3 x2 ( .aclr0(!iRST_N), .clock0(iCLK), .dataa_0(Line2), .datab_0(X3), .datab_1(X2), .datab_2(X1), .result(Mac_x2) ); // Y MA
62、C_3 y0 ( .aclr0(!iRST_N), .clock0(iCLK), .dataa_0(Line0), .datab_0(Y9), .datab_1(Y8), .datab_2(Y7), .result(Mac_y0) ); MAC_3 y1 ( .aclr0(!iRST_N), .clock0(iCLK), .dataa_0(Line1), .datab_0(Y6), .datab_1(Y5), .datab_2(Y4), .result(Mac_y1) ); MAC_3 y2 (
63、 .aclr0(!iRST_N), .clock0(iCLK), .dataa_0(Line2), .datab_0(Y3), .datab_1(Y2), .datab_2(Y1), .result(Mac_y2) ); PA_3 pa0 ( .clock(iCLK), .data0x(Mac_x0), .data1x(Mac_x1), .data2x(Mac_x2), .result(Pa_x) ); PA_3 pa1 ( .clock(iCLK), .data0x(Mac_y0), .
64、data1x(Mac_y1), .data2x(Mac_y2), .result(Pa_y) ); SQRT sqrt0 ( .clk(iCLK), .radical(Pa_x * Pa_x + Pa_y * Pa_y), .q(Abs_mag) ); always@(posedge iCLK, negedge iRST_N) begin if (!iRST_N) oDVAL <= 0; else begin oDVAL <= iDVAL; if (iDVAL) oDATA <=
65、(Abs_mag > iTHRESHOLD) ? 0 : 1023; //門閥值比較 else oDATA <= 0; end end endmodule 代碼編譯成功后,Sobel邊沿檢測的可調(diào)用模塊與其RTL結(jié)構(gòu)圖如下: 圖3-9 Sobel邊沿檢測FPGA實例化模塊圖 圖3-10 Sobel邊沿檢測模塊RTL結(jié)構(gòu)圖 3.4 腐蝕與膨脹 3.4.1 腐蝕與膨脹的應(yīng)用 在圖形學(xué)上,腐蝕是一種消除邊界點,使邊界向內(nèi)部收縮的過程??梢杂脕硐∏覠o意義的物體;膨脹是將與物體接觸的所有背景點合并到該物體中,使邊界向外部擴(kuò)張的過程。
66、可以用來填補(bǔ)物體中的空洞。 先腐蝕后膨脹的過程稱為開運算。用來消除小物體、在纖細(xì)點處分離物體、平滑較大物體的邊界的同時并不明顯改變其面積。 先膨脹后腐蝕的過程稱為閉運算。用來填充物體內(nèi)細(xì)小空洞、連接鄰近物體、平滑其邊界的同時并不明顯改變其面積。 3.4.2 腐蝕與膨脹的原理與實現(xiàn) 膨脹處理會將影像擴(kuò)張(如下圖所示),從而填補(bǔ)影像中的空洞,也可以去除背景雜訊中的黑點,但同時,為了得到和原始圖像相同大小的圖像,要進(jìn)行侵蝕處理回去。 圖3-12 膨脹示例 侵蝕處理和膨脹大致相同,只是將或操作(OR)改為與操作(AND)。 給予緩存技術(shù)的膨脹處理FPGA實現(xiàn)原理圖如下 3-13 膨脹算法的FPGA實現(xiàn) 可以使用膨脹和侵蝕對Sobel算法處理后的圖像進(jìn)行加工從而濾波,去掉噪點。其核心代碼如下: module Dilation ( input iCLK, input iRST_N, input
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。