大俠好,歡迎來到FPGA技術(shù)江湖,江湖偌大,相見即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。
今天給大俠帶來基于FPGA的實時圖像邊緣檢測系統(tǒng)設計,由于篇幅較長,分三篇。今天帶來第一篇,上篇,話不多說,上貨。
這里也超鏈接了中篇和下篇,方便各位大俠參考學習。
隨著科學技術(shù)的高速發(fā)展,F(xiàn)PGA在系統(tǒng)結(jié)構(gòu)上為數(shù)字圖像處理帶來了新的契機。圖像中的信息并行存在,因此可以并行對其施以相同的操作,使得圖像處理的速度大大提高,這正好適合映射到FPGA架構(gòu)中用硬件算法得以實現(xiàn)。
本篇闡述了基于FPGA設計一個能夠?qū)崟r采集、實時處理并實時顯示的數(shù)字圖像處理系統(tǒng)的設計思想和流程,分析了攝像頭接口的時序;闡述了圖像信息的捕獲原理;詳細介紹了圖像邊緣檢測部分各模塊的功能;重點介紹了具有去噪功能的中值濾波模塊的設計;簡單描述了邊緣檢測算子的選用;系統(tǒng)的介紹了SDRAM的工作原理以及控制方式;介紹了VGA時序;最后針對整個系統(tǒng)做了驗證和總結(jié),包括仿真波形的驗證以及板級驗證。
該系統(tǒng)基于實體FPGA開發(fā)板實現(xiàn)了圖像數(shù)據(jù)的實時采集、實時邊緣檢測和實時顯示,運行穩(wěn)定,實時性能較高,從而也表明FPGA確實具有海量數(shù)據(jù)高速傳輸?shù)哪芰Α?/p>
本篇為本人當年的畢業(yè)設計部分整理,各位大俠可依據(jù)自己的需要進行閱讀,參考學習。
第一篇內(nèi)容摘要:本篇會介紹前言,包括課題研究的背景和意義、相關(guān)技術(shù)在國內(nèi)外的發(fā)展現(xiàn)狀及應用、圖像邊緣檢測技術(shù)的主要應用、FPGA技術(shù)在國內(nèi)外的發(fā)展現(xiàn)狀及應用、系統(tǒng)設計的主要內(nèi)容及方案、系統(tǒng)的設計流程。
還會介紹基于FPGA實現(xiàn)圖像的實時采集部分,包括圖像信息的實時采集,攝像頭型號及其參數(shù),SCCB總線特點及其工作原理,基于FPGA驅(qū)動攝像頭接口,圖像信息的實時捕獲等相關(guān)內(nèi)容。
一、前言
1.1 課題研究的背景和意義
信息化是本世紀最主要的特征之一,在這樣一個信息化的時代,計算機顯得尤為重要,在各行各業(yè)都起著舉足輕重的作用。在圖像處理領(lǐng)域,數(shù)字圖像處理技術(shù)發(fā)展得尤為迅速,并廣泛應用于航空航天、電子通信、醫(yī)學等各個領(lǐng)域,隨著技術(shù)的不斷發(fā)展,新開發(fā)的產(chǎn)品在圖像質(zhì)量、圖像存儲容量以及圖像處理速度等方面也都有了新的需求。數(shù)字圖像處理,往往是基于像素進行一些運算,從而有效提高圖像質(zhì)量。在圖像處理過程中,處理算法往往比較簡單,然而由于參與運算的圖像數(shù)據(jù)量大,大多數(shù)圖像數(shù)據(jù)還需要多次重復使用,因此圖像處理的速度便成為了整個系統(tǒng)設計的瓶頸。
目前,圖像處理的算法研究已經(jīng)日趨成熟,在這種背景下,有效提高圖像處理的時效性,解決實際系統(tǒng)設計的瓶頸問題,便有了很大的應用前景。隨著科學技術(shù)的高速發(fā)展,F(xiàn)PGA在系統(tǒng)結(jié)構(gòu)上為數(shù)字圖像處理帶來了新的契機。圖像中的信息并行存在,因此可以并行對其施以相同的操作,使得圖像處理的速度大大提高,這正好適合映射到FPGA架構(gòu)中用硬件算法得以實現(xiàn)。
數(shù)字圖像處理技術(shù)包括圖像增強、圖像復原、模式識別等,圖像中亮度變化明顯的點可能就是邊緣點,能夠有效地檢測出圖像的邊緣,將對圖像的后續(xù)處理起到事半功倍的作用。通過邊緣檢測過程,我們可以保留圖像中對象的邊界信息,這在很大程度上減少了待處理的數(shù)據(jù)量,從而有效簡化了圖像的分析過程。
FPGA結(jié)構(gòu)靈活、現(xiàn)場可編程、并行處理信息,兼顧速度和靈活性。另外,其通用性強、適于模塊化設計、易于維護和擴展、開發(fā)周期較短,適合用來做實時圖像處理。因此,基于FPGA設計一個基于VGA實時顯示圖像邊緣檢測信息的系統(tǒng)有著廣泛的應用前景和深遠的現(xiàn)實意義。
1.2 相關(guān)技術(shù)在國內(nèi)外的發(fā)展現(xiàn)狀及應用
1.2.1 圖像邊緣檢測技術(shù)的主要應用
1)邊緣檢測在儲糧害蟲方面的應用
農(nóng)業(yè)是我國的主要根基,蟲害是儲糧的大敵,近年來,對儲糧產(chǎn)生威脅的害蟲種類和密度均呈上升趨勢,導致國家的儲糧損失日益嚴重。為了降低儲糧損失,有效防治害蟲,就必須要盡可能準的分析它們的種類、數(shù)量、發(fā)展趨勢及其潛在危害。利用計算機實時采集儲糧害蟲的相關(guān)圖像、數(shù)字化處理、分析識別,自動提取儲糧害蟲的種類、數(shù)量等相關(guān)信息,并由計算機系統(tǒng)輸出數(shù)據(jù)、發(fā)出指令,這就構(gòu)成了當今的科學保糧專家系統(tǒng)?;?a class="article-link" target="_blank" href="/tag/%E6%9C%BA%E5%99%A8%E8%A7%86%E8%A7%89/">機器視覺實時監(jiān)測蟲害信息并智能化處理是蟲情檢測的發(fā)展趨勢,蟲害圖像處理算法則是關(guān)鍵核心問題,其中,圖像的邊緣檢測技術(shù)起到了非常關(guān)鍵的作用。
2)圖像邊緣檢測技術(shù)在電廠中的應用
在電廠中,其安全和經(jīng)濟運行主要取決于其鍋爐燃燒的穩(wěn)定性。20世紀80年代,出現(xiàn)了一種將計算機技術(shù)、數(shù)字圖像處理技術(shù)以及燃燒學等技術(shù)相結(jié)合應用的跨學科技術(shù)——鍋爐圖像火檢技術(shù)。其原理是利用計算機分析火焰圖像,從而得到關(guān)于爐內(nèi)運行情況的大量原始信息。利用計算機對火焰圖像進行數(shù)字處理,提取火焰亮度均值、火焰燃燒中心以及火焰鋒面位置等參數(shù),從而分析描述爐內(nèi)燃燒的整體水平、火焰中心位置以及火焰充滿程度等信息。該技術(shù)的核心之一就是圖像邊緣檢測技術(shù)。
目前,邊緣檢測技術(shù)已滲透到各個領(lǐng)域,例如醫(yī)學細胞檢測領(lǐng)域、產(chǎn)品外觀檢測領(lǐng)域、模式識別領(lǐng)域等。
1.2.2 FPGA技術(shù)在國內(nèi)外的發(fā)展現(xiàn)狀及應用
FPGA即現(xiàn)場可編程門陣列(Field-Programmable Gate Array),是當前用于IC設計的主流形式之一,具有近乎完美的現(xiàn)場編程架構(gòu),極具發(fā)展?jié)摿?。FPGA所能實現(xiàn)的數(shù)據(jù)流的高速傳輸性能是目前沒有任何技術(shù)能夠與之抗衡的,在這個處處都追求速度的社會,F(xiàn)PGA幾乎無處不在。隨著信息產(chǎn)業(yè)和微電子技術(shù)的發(fā)展,可編程邏輯嵌入式系統(tǒng)設計技術(shù)已經(jīng)成為信息產(chǎn)業(yè)最熱門的技術(shù)之一,應用范圍遍及航空航天、醫(yī)療、通訊、網(wǎng)絡通訊、安防、 廣播、汽車電子、工業(yè)、消費類市場、測量測試等多個熱門領(lǐng)域。2008年北京奧運會的主舞臺中——畫卷就用到了4000個FPGA芯片,這是FPGA在圖像領(lǐng)域中的應用;FPGA在人臉、車牌等物體檢測中得到了廣泛應用,航空航天領(lǐng)域中導彈軌跡的實時監(jiān)測也少不了它;奧迪選擇了兩個FPGA芯片用于它的導航定位系統(tǒng),這是FPGA在汽車電子領(lǐng)域中的應用。
FPGA最主要的優(yōu)勢有四點:①FPGA用硬件描述語言(VHDL或Verilog)進行描述,并發(fā)執(zhí)行,除此之外,F(xiàn)PGA內(nèi)部集成鎖相環(huán),可以把外部時鐘倍頻,核心頻率可高達幾百兆,在高速領(lǐng)域,F(xiàn)PGA無法被取代;②FPGA可現(xiàn)場編程,具有近乎完美的現(xiàn)場編程架構(gòu),可根據(jù)用戶需求實現(xiàn)定制;③基于FPGA可以實現(xiàn)SOC的設計(內(nèi)部集成ARM);④FPGA可以內(nèi)嵌CPU,甚至可以嵌入多核。
隨著科技的發(fā)展,人們對數(shù)字圖像處理技術(shù)的要求也越來越苛刻,F(xiàn)PGA具有高速運算、微型體積、較低功耗等諸多優(yōu)點,這使得FPGA技術(shù)在數(shù)字圖像處理領(lǐng)域中必將起著不可替代的作用。
1.3 課題研究的主要內(nèi)容及方案
1.3.1 題研究的主要內(nèi)容
21世紀是一個高速的信息時代,在眾多信息中,圖像類信息是其中的一大類,對圖像信息實時、高速、準確的處理一直都是學者們研究的一大熱點。圖像處理一般指數(shù)字圖像處理:就其技術(shù)本身而言,包括圖像增強、圖像復原、圖像匹配、模式識別等,無論是那一種技術(shù),都脫離不開同一個話題——圖像邊緣檢測,換言之,圖像處理技術(shù)的好壞很大程度上就取決于是否能夠?qū)D像邊緣的信息處理妥當;就其處理形式而言,包括靜態(tài)處理和實時處理,所謂圖像的靜態(tài)處理,就是對靜態(tài)圖像的處理,而實時的圖像處理,就是對持續(xù)更新的圖像信息進行處理。
本課題研究的主要內(nèi)容就是基于VGA實時顯示由攝像頭所捕獲圖像的邊緣信息,整個系統(tǒng)設計基于FPGA實現(xiàn):首先是基于FPGA實現(xiàn)圖像數(shù)據(jù)的實時采集;接著對捕獲到的信息進行邊緣檢測,這里分為三步完成(先是將捕獲到的彩色圖像轉(zhuǎn)換成為亮度文件,接著采用中值濾波對圖像進行有效去噪,然后采用sobel算子對圖像進行邊緣檢測);最后基于FPGA驅(qū)動VGA接口實時顯示檢測得到的圖像邊緣信息。
1.3.2 系統(tǒng)的設計流程
本課題基于FPGA實現(xiàn),主要涉及到以下內(nèi)容:1、攝像頭接口的驅(qū)動;2、圖像數(shù)據(jù)的實時捕獲;3、彩色圖像到灰度圖像的轉(zhuǎn)換;4、中值濾波;5、邊緣檢測;6、圖像數(shù)據(jù)實時存儲;7、圖像信息實時顯示。具體設計流程如圖1-1所示。
圖1-1 系統(tǒng)設計流程
二、基于FPGA實現(xiàn)圖像的實時采集
2.1 圖像信息的實時采集
2.1.1 攝像頭型號及其參數(shù)
人對視覺的感知往往以圖像的形式再現(xiàn),圖像可以由光學設備獲取,也可以由人為創(chuàng)作。隨著數(shù)字采集技術(shù)和處理技術(shù)的發(fā)展,越來越多的圖像以數(shù)字形式存儲,即數(shù)字圖像。數(shù)字圖像以二維數(shù)字組的形式表示,用數(shù)值表示各像素灰度值的集合,用來表示圖像的數(shù)據(jù)體稱為圖像數(shù)據(jù)。數(shù)字圖像處理的過程就是利用計算機對獲取的圖像數(shù)據(jù)進行去噪、增強、特征提取的過程。本課題的主要任務就是實現(xiàn)圖像的實時采集、實時處理并實時顯示,因此我們的首要任務就是實現(xiàn)圖像的實時采集,這里我選用攝像頭作為我獲取圖像的設備,基于FPGA按照相應的時序驅(qū)動攝像頭接口。
本系統(tǒng)選用由豪威公司生產(chǎn)的Ov7725 CMOS Sensor攝像頭進行設計和調(diào)試。Ov7725 屬于VGA分辨率的CMOS Sensor,其分辨率最高達640*480,成像質(zhì)量優(yōu)越,功耗小,開發(fā)簡單,受到很多中低端產(chǎn)品的青睞。Ov7725是一款集成1/4英寸單芯片VGA相機及圖像處理器的高性能傳感器。由于該型號攝像頭的質(zhì)量和性能可靠,因此在PC相機、玩具、手機等眾多移動產(chǎn)品中均有諸多應用。
1)Ov7725?CMOS Sensor攝像頭的參數(shù)及特點
(1)圖像飽和度、銳度、噪聲抑制等可調(diào)節(jié);
(2)自動調(diào)節(jié)邊緣的增強與衰弱,自動調(diào)節(jié)噪聲的抑制;
(3)具有標準的SCCB(相機控制總線)接口,可以配置輸出 RAW RGB、RGB422、RGB565、RGB444、YUV422等格式的視頻流;
(4)支持VGA、QVGA以及40*30到CIF(352*288)分辨率的圖像尺寸;
(5)能通過配置實現(xiàn)幀同步模式;
(6)高靈敏度,適合低照度使用;
(7)自動曝光(AEC)、自動白平衡(AWB)、自動帶通濾波(ABF)、自動黑白電平校準(ABLC);
(8)擁有640*480的感光陣列,最高支持640*480@60hz圖像輸出。
2)Ov7725 CMOS Sensor攝像頭的內(nèi)部功能模塊框架與說明
圖2-1?Ov7725 CMOS Sensor 內(nèi)部模塊框架
如圖2-1所示為Ov7725 CMOS Sensor攝像頭的內(nèi)部模塊框架,從框架中可以看出,我們可以通過SCCB接口來配置Ov7725的寄存器。其工作原理如下:在XCLK的驅(qū)動下,首先由感光元件陣列進行相關(guān)圖像的采樣,并默認輸出640*480陣列的原始模擬數(shù)據(jù);然后通過12bit的A/D轉(zhuǎn)換,將原始模擬數(shù)據(jù)轉(zhuǎn)換成為數(shù)字信號(原始數(shù)字信號格式為 RAW RGB);最后通過DSP進行相關(guān)的算法處理,并最終輸出10bit 視頻流數(shù)據(jù)。
3)Ov7725傳感器的控制信號接口及其功能描述
表2-1 Ov7725傳感器控制信號的功能描述
4)Ov7725傳感器的寄存器說明
Ov7725 CMOS Sensor一共有172個配置寄存器,在這172個寄存器中,有的只能讀,有的只能寫,有的則既可讀又可寫。在傳感器正式工作之前,必須首先對寄存器進行正確的配置,否則將無法得到預期的工作模式,更別說得到較好的畫質(zhì)和相應的圖像效果。然而這172個寄存器并非都需要我們配置,需要我們配置的只是個別重要的寄存器。其配置的方式就是通過SCCB總線進行相關(guān)操作,其余寄存器則采用默認值。表2-2中所介紹的寄存器主要與視頻圖像輸出格式、采樣畫質(zhì)、曝光參數(shù)等有關(guān)。
表2-2 Ov7725傳感器的寄存器介紹
2.1.2?SCCB總線特點及其工作原理
1)SCCB總線特點
SCCB(Serial Camera Control Bus)接口,即串行相機控制總線。Ov7725的SCCB總線實際上就是我們常用的IIC通信總線,用于完成對絕大多數(shù)OmniVision 系列圖像傳芯片功能的控制。Ov7725的SCCB接口有兩根信號線:一根是時鐘線SCL;一根是數(shù)據(jù)線SDA。通過這兩根線我們就能夠完成Ov7725寄存器的配置,從而驅(qū)動Ov7725使其實時采集到我們所需要的圖像信息。
SCCB總線的控制方式簡單,通信速率較高,具有以下特點:
(1)SCCB總線只需要兩根線,一根數(shù)據(jù)線SDA,一根時鐘線SCL;
(2)SCCB總線不需要片選信號就可以實現(xiàn)多個設備的鏈接,可以通過從機的唯一地址識別碼來訪問,最終實現(xiàn)器件信息的配置;
(3)SCCB總線上的所有器件都具有“自動應答”功能,從而保證了數(shù)據(jù)交換的正確性。同時SCCB總線還具有“時鐘同步”功能,其時鐘頻率最大約為400KHz。
2)?SCCB總線的接口時序
SCCB總線是由數(shù)據(jù)線SDA和時鐘線SCL構(gòu)成的串行總線,可以實現(xiàn)數(shù)據(jù)的發(fā)送和接收,SCCB總線的體系結(jié)構(gòu)如圖2-2所示。
圖2-2?SCCB總線的體系結(jié)構(gòu)
SCCB總線通過串行方式發(fā)送8位數(shù)據(jù),基本時序如下:首先發(fā)送數(shù)據(jù)的最高位,最后發(fā)送數(shù)據(jù)的最低位;每發(fā)送完一組8bit的數(shù)據(jù),都需要通過接收從機發(fā)送的一個響應信號來判斷本次發(fā)送數(shù)據(jù)是否正確。官方手冊所提供的使用SCCB總線發(fā)送8位串行數(shù)據(jù)的時序如圖2-3所示,其中信號SCCB_E不需要我們關(guān)心。
圖2-3?SCCB總線8bit數(shù)據(jù)串行發(fā)送的時序圖
在我們按照SCCB協(xié)議發(fā)送或接收數(shù)據(jù)時,需要特別注意以下幾點:
(1)開始信號和結(jié)束信號
當時鐘信號SCL為高電平時,數(shù)據(jù)線SDA由高電平跳變到低電平的時刻即為開始信號,自此時起數(shù)據(jù)開始傳輸;當時鐘信號SCL為高電平時,數(shù)據(jù)線SDA由低電平跳變到高電平的時刻即為結(jié)束信號,數(shù)據(jù)傳輸在此時結(jié)束。SCCB總線的開始信號和結(jié)束信號的體系結(jié)構(gòu)示意圖如圖2-4所示。
圖2-4 SCCB總線開始和結(jié)束體系結(jié)構(gòu)
(2)應答信號ACK
每8位數(shù)據(jù)發(fā)送完畢之后,外圍設備向發(fā)送數(shù)據(jù)的控制器(FPGA芯片)發(fā)出低電平應答信號表示已經(jīng)接收到數(shù)據(jù),這個信號叫做應答信號。控制器(FPGA芯片)接收到應答信號之后,會據(jù)此判斷并作出是否繼續(xù)傳遞信號的決定。如果控制器(FPGA芯片)沒有接收到應答信號,控制器就會認為是受控制的外圍設備出現(xiàn)故障,因此需要重新進行配置,直到成功接收到外圍設備所發(fā)出的正確的應答信號。SCCB總線應答信號ACK如圖2-5所示。
圖2-5 SCCB總線數(shù)據(jù)傳輸圖
(3)數(shù)據(jù)傳輸
SCCB總線在進行數(shù)據(jù)傳輸時,時鐘信號SCL為高電平,同時數(shù)據(jù)線SDA上的數(shù)據(jù)必須保持穩(wěn)定,只有這樣才能夠保證所傳輸數(shù)據(jù)的穩(wěn)定性和可靠性。因此只有當時鐘信號為低電平時,數(shù)據(jù)線上的高電平信號或者低電平信號才允許變化。SCCB總線數(shù)據(jù)傳輸圖如圖2-6所示。
圖2-6 SCCB總線數(shù)據(jù)傳輸圖
3)使用?SCCB總線配置Ov7725的寄存器
基于上述的分析,我們對SCCB總線時序已經(jīng)有了一定的了解,接下來就可以按照指定的流程來配置Ov7725的寄存器:通過發(fā)送器件地址、寄存器地址、寄存器參數(shù)數(shù)據(jù)等參數(shù)的配置,最終完成寄存器的讀操作和寫操作。
(1)SCCB總線寄存器的寫入時序
SCCB總線在給寄存器寫數(shù)據(jù)的時候,需要按照一個嚴格的時序來執(zhí)行:先寫設備地址,再寫寄存器地址,最后寫入寄存器的參數(shù),即可完成一個寄存器的配置,如圖2-7所示。
圖2-7 SCCB總線數(shù)據(jù)傳輸圖
Phase 1:CMOS傳感器的唯一ID地址。豪威(OmniVision)相機的設備地址是0x42,最后1bit是用來判斷讀/寫的:寫數(shù)據(jù)時ID地址是0x42,而讀數(shù)據(jù)時ID地址是0x43;
Phase 2:傳感器里面有許多的寄存器,這些寄存器都有著自己唯一的地址,這里我們只關(guān)心Sub-address;
Phase 3:在Phase中發(fā)送完寄存器的地址之后,該階段發(fā)送的數(shù)據(jù)就是寄存器的配置數(shù)據(jù)。
由官網(wǎng)手冊可以知道這里面的X代表低電平,也就是邏輯“0”。
(2)SCCB總線寄存器的讀數(shù)據(jù)時序
SCCB總線從寄存器往外讀數(shù)據(jù)的時候,也需要遵循一個嚴格的順序:先寫設備地址,再寫寄存器地址,然后再寫入一次設備地址,最后讀出數(shù)據(jù)。讀數(shù)據(jù)的時序如圖2-8所示。
圖2-8 SCCB讀數(shù)據(jù)時序
Phase 1:CMOS傳感器的唯一ID地址。豪威(OmniVision)相機的設備地址是0x42,最后1bit是用來判斷讀/寫的,即寫數(shù)據(jù)時ID地址是0x42;
Phase 2:傳感器里面有許多的寄存器,這些寄存器都有著自己唯一的地址,這里我們只關(guān)心Sub-address;
Phase 3:CMOS 傳感器的唯一ID地址。豪威(OmniVision)相機的設備地址是0x42,最后1bit是用來判斷讀/寫的,即讀數(shù)據(jù)時ID地址是0x43;
Phase 4:讀取傳感器發(fā)送的指定的寄存器的值。
由官網(wǎng)手冊可以知道這里面的X代表低電平,也就是邏輯“0”,NA表示高電平,也就是邏輯“1”。
2.1.3?基于FPGA驅(qū)動攝像頭接口
理解了SCCB總線的時序,我們就可以按照相應的時序編寫控制代碼,如圖2-9所示為工程RTL級視圖中的sccb_config_ctrl模塊,其功能是實現(xiàn)攝像頭接口的驅(qū)動,該模塊代碼及說明見附錄。
圖2-9 工程RTL級視圖中的sccb_config_ctrl模塊
2.2 圖像信息的實時捕獲等相關(guān)內(nèi)容
通過攝像頭的采集,我們得到了視頻數(shù)據(jù)流,但是我們所要處理的是單幀的圖像數(shù)據(jù),因此需要實時捕獲數(shù)據(jù)流中的圖像數(shù)據(jù),為后續(xù)的圖像處理做準備。如圖2-10所示為工程RTL級視圖中的coms_capture_rgb565模塊,其功能是實現(xiàn)圖像信息的實時捕獲,該模塊代碼及說明見附錄。
圖2-10 工程RTL級視圖中的coms_capture_rgb565模塊
本篇到此結(jié)束,下一篇帶來基于FPGA的實時圖像邊緣檢測系統(tǒng)設計(中),介紹FPGA實現(xiàn)圖像的邊緣檢測模塊及FPGA驅(qū)動VGA接口實現(xiàn)圖像邊緣信息的實時顯示模塊相關(guān)內(nèi)容。
這里也超鏈接了中篇和下篇,方便各位大俠參考學習。