基于Zedboard的視頻圖像處理系統設計與實現_第1頁
基于Zedboard的視頻圖像處理系統設計與實現_第2頁
基于Zedboard的視頻圖像處理系統設計與實現_第3頁
基于Zedboard的視頻圖像處理系統設計與實現_第4頁
基于Zedboard的視頻圖像處理系統設計與實現_第5頁
已閱讀5頁,還剩45頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本科畢業設計題目基于Zedboard的視頻圖像處理系統設計與實現英文題目DesignandImplementationofZedboardBasedVideoImageProcessingSystem2021年4月

2021年4月

中文摘要隨著計算機技術和人工智能技術的發展,視頻處理的應用領域和應用需求愈發增長,高清海量的數據對末端處理器和智能算法提出更高要求,利用FPGA或者ARM技術完成實時圖像處理是研究的熱點,本文以Xilinx(賽靈思)公司的zynq-7000芯片作為主控芯片,展開了圖像處理的實時性研究。本文主要分為兩個部分,第一個部分是是針對軟硬件協同設計對視頻直通系統進行實現;第二個部分主要是在系統實現的基礎上增加新的算法,實現視頻處理的多種不同功能。對于第一部分本文協調分配軟硬件內容,對于硬件部分,其主要負責視頻的采集,視頻的處理,視頻的顯示。對于軟件部分則主要是對整個系統各個ip核進行初始化操作以及調度,并且通過設計使系統錯誤信息通過uart串口進行輸出。第二部分主要是針對硬件的視頻處理部分進行改進,本文在實現的基礎上添加了邊緣檢測模塊以及濾波模塊。最終本次實驗通過vivado作為開發軟件,進行硬件電路的搭建,通過SDK進行軟件算法的編寫,完成了基于zedboard的視頻圖像采集系統。并且在實現的基礎上進行進一步的開發,通過systemgenerator搭建邊緣檢測模塊,生成ip核對系統進行改進,實現了基于zedboard的視頻圖像邊緣檢測。關鍵詞:systemgenerator;軟硬件協同設計;邊緣檢測;zedboard

AbstractWiththedevelopmentofcomputertechnologyandartificialintelligencetechnology,theapplicationfieldandapplicationdemandofvideoprocessingisgrowingincreasingly,thehighdemandforthemassofhigh-definitiondataonterminalprocessorsandintelligentalgorithmsisincreasing.TheapplicationofFPGAorARMtechnologyonreal-timeimageprocessingisahottopicofresearch.ThisarticlebasedonXilinxcompany'szynq-7000chipasthemaincontrolchip,developsthestudyonreal-timeofimageprocessing.Thispaperisdividedintotwoparts.Thefirstpartisthehardwareandsoftwareco-designofthevideopass-throughsystem,andthesecondpartismainlybasedontheimplementedsystemtoaddnewalgorithmsthentoachieveavarietyofdifferentfunctionsofvideoprocessing.Forthefirstpartofthisarticle,itistocoordinatetheallocationofhardwareandsoftwarecontent.Forthehardwarepart,itmainlyincludesvideocapture,videoprocessing,videodisplay.Forthesoftwarepart,theinitializationoperationandschedulingofeachipcoreofthewholesystemismainlycarriedout,andthesystemerrormessageisoutputthroughtheuartserialportifdesignedwell.Thesecondpartismainlyforthehardwarevideoprocessingpart.Thispaperaddstheedgedetectionmoduleandfilteringmoduleintothissystem.Finally,theexperimentusedVivadoasadevelopmentsoftwarewherethehardwarecircuitisconstructed.AndthesoftwarealgorithmiswrittenbySDK.Thenthevideoimageacquisitionsystembasedonzedboardiscompleted.Onthebasisoftherealization,furtherdevelopmentiscarriedout.Theedgedetectionmoduleisbuiltbysystemgenerator,whoseipcorecanbeaddedintothissystemtoimprove.Finally,theedgedetectionofvideoimagebasedonzedboardisrealized.Keywords:systemgenerator,hardwareandsoftwareco-design,edgedetection,zedboard目錄TOC\o"1-2"\h\u304301緒論 緒論課題研究意義在人們日常生活中,視覺是我們得到與外界交互最最要的方式,且大腦對視覺信息吸收和敏感程度也是最高。而由于科技的不斷發展,電力行業、監測行業、交通行業等,對安全監控的要求也隨之增加。視頻能否有效的傳輸,傳輸的質量是否能夠有效的還原,傳輸距離是否足夠遠,傳輸的延遲是否能足夠小等因素都需要解決。并且目前圖像處理,人臉識別,模式識別,雙目算法等的流行,以及在國防,科學等高精尖領域對視頻處理技術的要求也變得更高,因此以往采用CCD捕捉圖像的方法越來越無法滿足目前的需要。對于實時高速的采集,以及結果采集的處理有了更高一步的要求。在超大規模基礎電路問世以后,嵌入式的視頻圖像采集系統可以較好地滿足以上要求。除此以外,因為嵌入式系統所具有的特性,使其具有體量小,易交互,成本低,穩定性強等優點。因此本實驗將采用基于FPGA的zynq-7000芯片對視頻進行采集。由于FPGA具有靈活易操作的特點,并且可以在不改變硬件平臺的情況下,針對不同的要求對系統進行修改,因此具有非常強大的適應性。且zynq-7000芯片具有相當高的集成度,一定程度上使軟件的開發難度下降,即軟硬件同時可編程,并且該芯片是ARM+FPGA結構組成的,充分發揮了兩者的優勢,即兼容性能和低功耗于一體,并且擴展和開發升級較為方便,節省掉了主機與從機之間的通訊總線,加快了通訊速度。對于人們對高清甚至超清視頻的追求、分辨率成為一個優秀視頻采集系統的關鍵性能指標,分辨率越高一個視頻就越清晰。目前在市面上流通的相機分辨率大概從640*480到2592*1944不等。相機的分辨率越高那么相應的傳輸數據的量就會越大,這些數據量的變化對硬件要求將變得異常巨大,對于整個系統的要求的更為嚴苛。Zedboard具有多種視頻輸出方式,如:1080pHDMI,8-bitVGA,128x32OLED,因此可以應用在很多型號的智能相機開發中。國內外研究現狀國外發展狀況對于視頻采集技術,主要由攝像管,CCD,CMOS等獲取。攝像管通過內部的光敏元件接收輸入的圖像的光信號進而通過光電轉換,將光信號變為電信號;通過電信號的形式將光信息存儲在系統存儲器中;最終通過電子槍產生的電子束全面掃描該儲存的電荷完成電荷轉移。CCD這種半導體器件,它可以接收光信號,轉換成模擬信號,模擬信號放大后經過A/D轉換,成為數字信號。而CMOS是將外界信號轉換成電能通過邏輯運算核A/D轉換最終輸出。而對于圖像實時處理主要的硬件平臺主要是從一開始的計算機,isp和pci等,隨著數字電路的發展DSP技術開始興起。如今的處理芯片主要為單核處理器;同構多核處理器;異構多核處理器,詳見表1-1,在如今視頻圖像處理最具有代表性的應用可以說是智能相機了。在國外,該技術發展較早,且由于智能相機,智能攝像頭等產品的大量需要。美國康耐視公司(Cognex)的智能相機在工業應用場合也享有很高的國際知名度,在生產車間的流水線中,由于其良好的抗噪和防塵能力,且較高的靈活性,無論生產速度多塊,測量精度多高,配備無接縫式的應用框架和網絡環境,都可以實現。表1-1處理芯片的分類單核處理器ARM、PowerPC、DSP以及純FPGA硬件同構多核處理器Inteli3、i5、i7以及ARMCortex-A9等異構多核處理器ARM+DSP、ARM+FPGA等國內發展狀況在國內,改革開放以來,我工業化不斷進步,資源和人力成本也不斷增加,同時科技也正在飛速發展,由于這些原因,不斷促使著工業自動化進程的加快,急需有較好性能的自動化系統,智能化系統出現在工業生產以及生活領域。因此,近些年圖像處理,機器人視覺以及模式識別等在國內有較高的人氣,并且國家,企業和相關科研院所在有關領域投入了大量的人力、物力,以確保盡快研發適應當前需要的機器視覺產品。但由于國內該領域起步較晚,底子較薄,目前發展水平仍距國外相關產業有一定差距,有較大的進步空間。因此,國內工業智能相機的發展仍需要時間,仍需要大家的不懈努力,這樣才能真正從低端逐步轉向高端。本課題的研究內容、方法、手段及預期成果課題研究內容本實驗主要包括視頻圖像采集,視頻圖像的處理以及視頻圖像實時顯示。其中視頻采集部分主要是將采集到的視頻數據信號轉變成可以被fpga處理的信號類型以方便后續操作;視頻處理部分主要是一些算法的設計,其中可以包括伽馬矯正或者邊緣檢測等等;顯示部分主要是對數據輸出做輸出與處理后直接驅動顯示器顯示..本研究內容使用的是Xilinx開發的全可編程SoC系列。主要是使用zynq-7000的開發板,在zedbaord上進行視頻圖像采集系統設計開發。在zynq的邏輯可編程硬件部分,需要先設計和配置攝像頭的ip核,之后對采集得到的數據進行預處理和存取功能的實現,并且在需要的情況下可以設計視頻處理通道的IP核設計,最后通過VGA接口連接到顯示屏上進行顯示。而對于軟件部分,主要是對硬件部分進行控制和初始化。最后在實現圖像視頻采集的基礎上可以對得到的圖像進行二次圖像處理通過調整圖像的各項系數,實現圖像的曝光,改變對比色等使得到的圖像更為美觀,甚至可以添加去霧算法,紅外檢測裝置等實現更加復雜,多樣的要求,以實現美顏,智能識別,攝像頭去霧等任務。課題研究方法及手段為了實現以上要求需要對硬件部分和軟件部分分別進行設計。為進行該系統的設計,我們使用賽靈思針對Zynq系列芯片推出的Vivado軟件來設計,可以設計通過MATLAB輸入,轉化為verilog語言,分別作為HDL硬件描述語言和SDK軟件描述語言。對于視頻信息的讀取我們采用Pcam-5C圖像傳感器,該傳感器主要是由OV5640組成。對于視頻輸出部分我們采用zedboard上自帶的VGA模塊,連接到VGA顯示器上。課題預期成果通過合理的設計使該系統能夠成功地在zedboard上搭建相應的軟硬件系統以實現圖像信息采集,并且以較快的速度完成信息的處理、顯示。并且可以通過uart得到一些程序運行過程中的錯誤信息。基于zedboard的軟硬件協同設計開發平臺的介紹zynq芯片由于目前的處理器對信號處理的能力還不達不到我們所需求的程度,且多芯片方案搭建出來的處理器系統成本高、功耗大、占用空間較多、不利于縮小外形、且更新換代的能力也會受到一定的限制、在面臨技術快速革新的時代,這樣子的方案很難提供更高的優勢。最終賽靈思公司開發出了zynq-7000芯片,以應對這些所面臨的問題。Zynq-7000內部具有fpga部分和arm部分,其中的arm是一個完整的系統,內部包含雙核Cortex-TM-A9處理器,并且內部還集成了存儲器和DDR等外設。而Fpga的部分能對系統進行外擴,使該處理器有良好的擴展性和較高的處理速度,最高達100Gb/s。并且為了開發方便Xinlink公司為zynq系列芯片定義了大量的IP核,工程師可以通過Vivado軟件對他們進行調用。為了實現本實驗的內容,zynq-7000自然就成為這個實驗最重要的一個器件。我們可以在其pl部分設計視頻的輸入通道,視頻處理模塊,視頻的顯示通道等,并且再ps部分實現各個模塊的初始化并提供相應的時序。ZedBoard開發板面向高校和大眾,賽靈思公司開發了一個低成本的zynq開發板zedboard。其高性價比使得其再高校實驗學習中備受青睞。Zedboard板載外設主要包括:(1)8個LED燈。(2)7個GPIO接口按鍵。(3)8個DIP封裝的用戶開關。(4)OLED。(5)3個MicroUSB接口。(6)4個3.5mm的標準音頻接口。(7)VGA接口,zedboard使用了標準的15洞VGA接口,其中14根線為12位彩色信號線和兩根同步信號線。(8)HDMI接口,可以提供高清的數字視頻/音頻。(9)10/100/1000兆網口Zedboard擴展外設主要包括:(1)外擴FMC插槽(2)外擴AMS插座(3)5個Pmod兼容插座,其中四個連接到zynq-7000的PL部分,另外一個連接到zynq-7000的PS部分。軟硬件協同設計軟硬件協同設計的概念在傳統的系統開放方法上,由于各種的限制,使工程師在設計系統時一般將硬件電路和軟件部分分為兩部分分別開發設計,最后再將系統集成。這樣設計雖然系統簡單,但是由于電子集成電路發展迅速,傳統的開發方法很快便面臨著難以擴展、難以設計、快速性較差、集成性較低等缺點。因此為了突破傳統設計方法的局限性,人們開始探索軟硬件協同設計方法。軟硬件協同的設計與以硬件優先的傳統方法不同,它是以系統為目標,這樣可以很大限度的利用現有資源得到系統的最大開發效用,如果設計合理,這種方法可以使系統工作在最理想的狀態以最大化的利用資源。軟硬件設計方法流程如圖2-1所示,一般是先考慮硬件,自上而下的方式進行設計的,設計的過程中我們應以模塊為單位優先設計。由于在設計時先考慮硬件其次再估計軟件的設計,這樣子的設計會使設計的過程中受到空間的約束,要么對硬件進行優化,要么對軟件進行優化,這樣做很難使軟硬件的資源得到最高效率的應用。在圖2-2中可以看到,相比傳統設計方法,軟硬件協同設計的亮點集中于設計的流程,在劃分軟硬件任務后,對軟件和硬件以及軟硬件接口進行設計和分配,從而能夠更好的協調軟硬設備。從而極大的提高資源利用效率。圖2-1傳統設計方法流程圖圖2-2軟硬件協同設計流程圖軟硬件協同設計方法可以分為以下幾個步驟:分割:首先由系統的要求出發,完成對硬件和軟件之間的分工。軟件部分交給ARM完成,硬件部分交給FPGA完成。這兩種實現方式各有優劣:軟件實現的開發難度小,但是性能較低,運算速度較慢;由硬件實現部分軟件設計的功能則可以很大程度上的降低CPU負荷、提高運算速度,但是,FPGA的設計相對ARM的實現難度更大、設計周期較長等。因此在完成分割任務時應該綜合考慮這兩部分的優劣。定位:其次在實現這個系統是,由于實際過程中,可能會發現軟件實現的部分性能可能不夠好,我們可以考慮由FPGA實現進行代替,并且如果原先由硬件電路實現的部分可移植性較差,且開發時間較長,我們可以考慮將其改為由ARM執行這部分程序。調度:由于軟硬件協同設計使硬件和軟件之間應該有一個合理的通信,使整個系統可以達到同步且可以得到合理的調度,此時若對整個系統調度,主要是由AXI接口對其進行配置。映射:主要分為硬件和軟件部分,硬件部分對應為系統的pl,軟件部分對應系統的ps。Pl由fpga完成,ps由arm完成。硬件邏輯設計該實驗的目標為基于Xilink開發的全可編程SoC系列的Zynq-7000芯片,在zedboard上進行視頻圖像采集系統的設計和開發。利用兩個Pcam5C攝像頭采集兩路高清視頻,之后通過FMC-Pcam適配器連接到FMC擴展接口上,之后通過板載VGA對視頻進行輸出。高清攝像頭采集和處理的過程在本實驗中主要分為以下幾個部分,視頻圖像的實時獲取、視頻圖像的處理以及視頻圖像的實時顯示。下面將分別介紹這幾部分的設計。視頻圖像的采集模塊由于本實驗為四目攝像頭的視頻采集技術,而zedboard上只有一路VGA接口,要想連接四個攝像頭則需要對其進行擴展,在本實驗中采用FMCPcam適配器在FMC插槽中進行外設的擴展。FMCPcam適配器有兩種版本,分別為雙接口和四接口相機連接接口,在內部有對MIPI到LVDSd電平轉換器,可以使攝像頭的傳來的高速視頻信號轉化為開發板能夠處理的電平信號。其應用主要為將低成本的相機連接至高速開發板上,對多個相機同時進行配置。為開發人員在視頻處理方面帶來了很大程度的便利。圖像傳感器本實驗在攝像頭的選取上選用Pcam5C彩色攝像頭,其內部包括OV5640彩色圖像傳感器和MIPI圖像傳感器接口,可以高速傳輸視頻信號并與zynq兼容。在開發過程中只需要建立相應的MIPI的ip核便可以將圖像信息轉換成可以在fpga內部進行處理的高速視頻流信號。圖像傳感器正是通過對外部光信號在感光面上的接收,并按照一定的比例轉換成電信號,并傳輸到系統中。通過圖像傳感器可以非常方便的得到外部的圖像信息,但是與此同時由于得到的光信號和電信號是呈線性比例轉換的,然而人眼對于亮度的觀測并不是成比例的這就需要在系統的設計過程中對其進行一定程度的調整,該部分將在3.2.2節詳細說明。FMC擴展插槽以及FMCPcam適配器由于本實驗在需要4個攝像頭進行數據采集,而zedboard的只有1個VGA和1和HDMI接口,因此我們嘗試對zedboard擴展外設。在此我們通過外擴FMC插槽進行出入的擴展。在本實驗中采用FMCPcam適配器進行對zedboaed的擴展。FMC-Pcam適配器其接口為CSI-2,將相機添加到zedboard。FMC-Pcam適配器可以和Pcam-5C兼容,目前發布的有兩種版本,一種是連接兩個攝像機,另一種是連接四個攝像機。FMCPcam適配器為了得到LVDS電壓需要MIPI協議。兼容各種VADJ電壓。MIPI接口圖3-1視頻采集結構由圖3-1可知通過Pcam-5c的高速視頻接口要可以在zynq內進行處理需要對其進行數據轉換,將高速視頻數據通過MIPI_CSI進行處理使其轉化為可以在處理器中進行處理的電平信號。MIPI是專為移動應用定制的開發標準,可以應用在多種移動設備的視頻接受、顯示以及音頻的處理,將其接口標準化,從而減少設計的復雜性。MIPI有一套協議和標準,其中用于視頻的接受所用到的協議為CSI協議,CSI定義了處理器和攝像頭之間的高速串口。CSI協議分為三層,分別為應用層、協議層、物理層。在應用層方面,主要是各種算法模塊。協議層又包括組包層、協議層、通道管理層,其中組包層主要是將上層的數據進行打包、將其切割成8比特數據流。協議層是在該數據流上加入包頭包尾、將生成的數據流按照一定的方式來統一管理。物理層定義了傳輸介質、電路信號電氣特征和時序。整個協議的傳輸過程如圖3-2所示。圖3-2MIPI協議結構視頻圖像的處理模塊在視頻數據流傳入之后,為了達到各種視頻效果需要對其進行視頻處理,視頻處理包括濾波、伽馬矯正、邊緣檢測等等。并且通過攝像頭得到的視頻數據一般是BayerRGB,因此需要對其格式進行轉換變為RGB格式。在本實驗中由于需要在一個輸出顯示上輸出4個采集到的視頻圖像,因此需要對得到的視頻數據進行分割,使其分別占據顯示器的一部分。在視頻處理模塊上,本是要主要解決一下幾個問題:圖像格式轉換、伽馬矯正、圖像縮放。整個流程如圖3-3所示。圖3-3視頻圖像處理模塊流程圖圖像格式轉換在Pcam-5c中得到的圖像格式為BayerRGB這種圖像格式一般不能直接輸出,需要進行濾波和伽馬矯正后才能最后得到理想的輸出。在此首先對其進行視頻格式轉換,將BayerRGB轉化為RGB格式。和我們所認識到的圖像不同,通過OV5640得到的圖像每個像素點只有一個顏色通道,該顏色通道代表紅、綠、藍中的一種,但是彩色圖像都是由這三種顏色進行疊加產生的,即一個像素點包含三個顏色取值為0-255。在Bayer格式的圖像中由于這樣的圖像缺少一定程度的顏色信息,每個位置只有一個顏色可以獲取,這就需要我們去復原另外兩種顏色,即需要通過相鄰像素點之間插值來估算。表3-1Bayer格式示意RGRGRGGBGBGBRGRGRGGBGBGBRGRGRGGBGBGB在表3-2中可以看到該圖像格式為奇數行只有R,G分量,偶數行只有R,G分量,奇數列只有G,R分量,偶數列只有B,G分量。在Bayer格式中G顏色分量為其他兩種顏色分量的兩倍,這是人眼對綠色更為敏感,并且如果G分量采用較好的插值方式,也可以一定程度上改善R,B顏色分量的效果。為了將表3-2的Bayer格式圖像轉化為RGN格式,我們采用雙線性插值法。其原理為,將每個像素點所缺少的顏色信息由其旁邊鄰域內的像素顏色信息補全。其插值具體分為兩種情況,即對G的插值和對B或R的插值。表3-2對B進行插值R1G1R2G2BG3R3G4R4表3-3對G進行插值G1B1G2R1GR2G3B2G4對B進行插值則需要對其鄰域內其他顏色分量取平均值。即:對G進行插值公式為:經過這種插值方法的處理一個像素塊的顏色信息就變為了R’,G’,B’,即實現了顏色格式的轉變。這種插值方式較為簡單,但是由于圖像邊界的像素的鄰域缺少一定的像素,這部分像素的需要另外進行處理,在算法設計時可以進行改進。伽馬矯正對于硬件設備而言,傳感器對光的感應是呈線性關系的,有多少倍的光子被傳感器接收,就會產生多少倍的電子信號。但是,人對光的感知并不是呈線性的關系,人眼對于暗色調的反應更為靈敏。這是由于對于純黑物體反射率定位0,而純白物體反射率定位1,則中灰物體的反射率應為0.5,但是實際上并不是這樣,經過測試中灰的反射率大概在0.2左右。伽馬矯正的公式為:上式中,分別為輸入光照和輸出光照,根據經驗式可以得到gamma值一般取為2.2。圖3-4伽馬矯正示意圖如下圖3-5所示,可以看到經過伽馬矯正之后的圖像將表現的更亮。圖3-5伽馬矯正效果對比圖圖像縮放由于四目攝像頭要在同一塊顯示屏上進行顯示,所以對攝像頭得到的圖像數據要進行一定程度上的縮放,以方便輸出顯示。圖像縮放算法的實現主要是通過原來的像素值,通過和鄰域內其他像素的線性變化得到輸出的像素值,縮放的大小和所選鄰域的大小有關。我們一般選用雙線性插值法來得到待求像素。圖3-6線性插值原理由圖3-6可得,假設Q11,Q12,Q21,Q22四個像素點為已知像素點,為求得R1像素點數據,可以將Q11和Q21通過插值來求得,同理求得R2數據,再通過R1,R2數據線性插值得到P的像素數據。綜上所述,可以得到雙線性插值的公式為:這種方法是在圖像縮放中較普遍的方法,效果比臨近插值好,計算量和運算速度也相對較小。但是缺點是,由于考慮到該方法為線性插值,在圖像顏色變化較大的邊界,縮放后將會變得平滑。VDMA模塊VDMA可以為內部zynq與外部內存之間提供一條高速的數據存取通道。在本例中通過VDMA構建硬件部分的視頻流到DDR存儲器之間的數據緩存通道。VDMA的存在可以使得雙緩沖或多緩沖機制的實現變得相對簡單,并且VDMA自身也可以進行數據的存取功能,因此在基于各種FPGA的圖像處理、視頻處理等問題上常常出現。VDMA有兩種接口模式,一種是寫通道,它可以將高速視頻流數據流寫入PS中,另一種是讀通道,它可以從ps中讀取數據,并將數據格式改為AXI-Stream輸出。在本實驗中考慮到視頻圖像地撕裂,我們選用5緩沖機制進行設計。VDMA模塊的主要寄存器如表3-4所示:表3-4VDMA主要配置寄存器地址偏移(十六進制)名稱備注00MM2S_DMACRMM2SDMA控制寄存器04MM2S_DMASRMM2SDMA狀態寄存器50MM2S_VSIZEMM2S傳輸幀豎直大小54MM2S_HSIZEMM2S傳輸幀水平大小58MM2S_FRMDLY_STRIDEMM2S傳輸幀延時5C~98MM2S_START_ADDRESSMM2S傳輸起始地址AC~E8S2MM_START_ADDRESSS2MM傳輸起始地址A0S2MM_VSIZES2MM傳輸幀豎直大小A4S2MM_HSIZES2MM傳輸幀水平大小A8S2MM_FRMDLY_STRIDES2MM傳輸幀延時在該實驗中,為了節省硬件空間我們可以設計一個雙端口VDMA和一個單端口VDMA,將VDMA_A設置為雙端口,用來完成軟件和硬件之間的通訊,以及PL之間的通訊,將VDMA_B設置為單端口,只用來完成硬件和軟件之間的數據交換。具體數據交換框圖如圖3-7所示:圖3-7VDMA數據交換框圖AXI總線AXI是一種協議,該協議最初是AXI3,是由ARM公司提出,是當時AMBA3.0的其中一部分。而AXI4作為AXI協議的第二版,是2010年該公司發布的AMB4.0協議中的一部分。AXI4包含3種類型的接口如下表所示:表3-5AXI4類型接口類型名稱功能AXI4主要面向高性能地址映射通信的需求AXI4-Lite是一個輕量級的,適用于吞吐量較小的地址映射通信總線AXI4-Stream面向高速數據流傳輸通道類型寫地址通道主設備向從設備傳輸寫入地址的通道寫數據通道主設備向從設備傳輸數據的通道寫響應通道傳輸完成的信號傳遞通道讀地址通道主設備讀取從設備數據的地址通道讀數據通道主設備讀取從設備數據的通道AXI模型寫模型主設備將地址信息傳輸到從設備內,之后開始寫入數據,當數據完成之后,從設備通過寫響應通道向主設備發送信號表示傳輸完成。讀模型主設備現象從設備發送地址信號,之后從設備再將數據寫入主設備。AXI協議其實是一個可以點對點的主/從接口技術協議,但是當多個硬件ip需要進行數據間的傳輸時,我們可以使用AXIInterconnect模塊,這個系統模塊也叫AXI互聯網絡矩陣,AXIInterconnect可以實現多個主從設備間的連接。本例中的AXI傳輸就是這種傳輸方式。表3-6Zynq的AXI接口接口類型特點AXI_HP主要是用于PL訪問PS上的存儲器。內部有讀緩沖和寫緩沖AXI_ACP適合做專業指令加速器的模塊數據接口AXI_GP用于獲取傳感器信號信息視頻圖像的顯示通過VDMA中傳出的AXI4-Stream數據對其進行處理,先轉化為通用視頻格式,之后再轉化成VGA可以識別的數據,最后通過zedboard上的VGA接口傳送到顯示器上,以達到最終視頻顯示的效果。總體設計如圖3-8,VTC提供時序信息。圖3-8視頻顯示流程圖視頻流數據轉換在zynq中,由于為了快速且容易的處理視頻數據流,VDMA讀取DDR中的數據后,由于在zynq中各個ip核之間的通訊是依靠AXI4-Stream協議的,因此直接輸出的視頻數據格式為AXI4-Stream,這種格式并不能用于直接顯示,、為了得到帶有視頻有效數據和視頻時序信息的數據流,我們要對其進行一定的轉換,及將其轉化為通用視頻模式。在此我們使用AXI4-Streamtovideoout視頻數據轉換模塊,得到相應的信號會向VTC提供相應的時序信號,當VTC識別到正確的時序信號后,會對AXI4-Streamtovideoout進行反饋。通過VTCIP核提供的時序信號,在AXI4-Streamtovideoout的視頻流接口中將AXI4-Stream格式轉化為帶有行場同步信號與數據有效標志信號的數據格式。視頻時序信號控制器一個視頻采集處理系統,需要相應的時序信號來保證視頻信息的同步。視頻時序信號控制器(VTC),該IP核可以為VGA,HDMI顯示IP核提供時序信號,以保證視頻信息的正常輸出。VTC的主要作用是通過檢測到的視頻流的Hsync,Vsync以及消隱信號,并生成相應的信號以保證視頻輸出的時序不會出錯,總的來說VTC的作用就在于監測和產生視頻時序信號,以保證收發兩端的電子束在掃描過程中的步調保持一致。視頻顯示本實驗是通過VGA進行顯示,VGA也叫視頻圖形陣列,是使用類比訊號的電腦顯示標準。VGA在掃描過程中主要是通過逐行掃描的形式,及從第一行開始自左向右開始進行掃面,每掃描完一行從最后一個像素點跳回到下一行的第一個像素帶你從新開始掃描,當掃描完最后一行的最后一個像素點時,及完成了一幀的掃描。當然在傳輸的過程中為了保持視頻數據的同步我們一般需要場同步信號和行同步信號,行同步信號是在每一行傳輸的過程中為高電平,場同步信號為在每一幀傳輸的過程中為高電平。但是在實際應用的過程中會發生一個問題:電子束掃描的過程中在每一行的最后一個元素跳向下一行的第一個元素的過程中,或者是每一幀的最后一個元素跳向下一幀第一個元素的過程中,這個過程并不是瞬間完成的在這個過程中依然有可能會發射電子投射到電子屏幕上,這是我們不希望的結果,因此我們需要施加消隱信號,消隱信號高電平時電子束不再作用,因此我們可以將消隱信號添加在每行掃描結束到下一行開始,和每一幀結束到下一幀開始的過程中,以保證視頻信息的有效傳輸。因此可以得知,有效的顯示區域只有在VS和HS同時有效,且沒有消隱信號時。實現流程介紹圖3-9系統流程圖根據本章內容在此總體實現流程,由圖3-9可知,將攝像頭所得視頻數據通過FMCPcam適配器接入FMC擴展上得到高速視頻流信息,通過MIPI協議將其轉化為zedboard能夠處理的視頻流信息,經過一定的視頻處理,如視頻格式轉換,伽馬矯正,圖像縮放。最終將視頻數據存入VDMA中,通過AXI4總線將VDMA中的數據傳入PS中,進而存入DDR3內,PS可以直接訪問DDR3因此,可以在其內部對視頻數據進行一定的處理,最終通過AXI4傳送至VDMA中,以AXI-Stream信號形式傳出,最后對視頻數據格式進行轉換,并在VGA上顯示。PS部分則是控制各個IP核的初始化、對視頻進行處理并提供視頻顯示的時序信號。系統軟件設計軟件開發工具與FPGA不同,我們為了實現原硬件之間的交互,除了使用vivado進行PL部分的設計還需要對PS端進行設計,以保證其可以控制PL中的各個IP可以正常運行實現其相應的功能。在zynq的設計中,對于ps的編寫主要是基于ARM的,我們可以使用賽靈思的SDK工具對其進行開發,SDK上面集成了一些xilinx開發過程中所需要的一部分工具。SDK的功能非常強大也非常方便,在vivado設計完成PL部分之后,到處硬件文件之后,SDK會自動分析硬件的結構并且生成相應的BSP工具包以方便我們設計。為了方便開發人員,SDK會自動生成一些相應的BSP進行輔助設計,BSP包含了大部分賽靈思提供的IP核驅動,這些驅動可以方便我們進行系統設計。通過SDK編寫軟件程序分別實現對視頻的采集和顯示等功能。軟件設計流程圖4-1雙目攝像頭軟件運行流程對于整個系統的軟件設計,主要的設計流程框圖如圖4-1所示:由上圖可以看到,在該系統一開始,首先是對其CPU初始化、ARM初始化、重置PL、并判斷是否需要uart,若來連接uart則對其進行初始化。之后清空VDMA緩存,并將其空間設置為1920*1080*3*2,以保證能夠容納4個1920*1080的彩色攝像頭輸入數據。之后配置攝像頭的IP核,主要是配置ps層面的通用IO口和IIC,使其完成對PL中的AXI-IIC控制器的初始化以及使用AXI-IIC控制器對OV5640寄存器進行讀寫操作。之后對AXI-VDMA模塊進行配置,使得VDMA-a模塊既有雙通道,既可以保證和ps間的通訊也可以保證pl之間的數據傳輸。之后對輸出通道進行配置,主要是通過對VTCIP核進行控制,即對VTC進行初始化,并且配置VTC產生所需要的視頻時序信號。對于輸入通道的配置需要判斷D-PHYIP的個數,如果大于2再配置B攝像頭的輸入通道,否則只需要單獨配置A攝像頭輸入通道即可。至此整個系統板的初始換完成。在進行攝像頭的初始化時,我們向攝像頭分配動態存儲器核自動存儲器,因此若OV5640未能成功連接也可以忽略并顯示其余攝像頭輸出信號,在配置時只需要將A攝像頭配置到通用IO端口即可,并且為其余攝像頭分配虛擬的通用IO口,這樣可以避免在構建OV5640時丟失所有板間數據。打印錯誤報告UART介紹為了在程序操作過程中將整個系統各個地方發生的錯誤信息發送出去,我們需要zynq內部自帶的通用異步收發傳輸器(UART)接口。UART內部有兩個FIFO,一個是發送FIFO,一個是接收FIFO。發送FIFO內部有我們需要發送的信息,每當向外提取數據之后,內部移位寄存器就對數據進行一次操作。FIFO有三個標志位,分別為空標志位、滿標志位和溢出標志位。空標志位表示FIFO內部沒有數據,滿標志位表示FIFO內部數據已經達到最大,溢出標志位表示,當FIFO內部已滿時依然有數據寫進來。接收FIFO緩存了接收模塊的寄存器接收到的數據,最大數據寬度為8位,由于我們不用到接收器的內容,因此在此不再贅述。UART有4中工作模式,見表4-1:表4-1UART工作模式工作模式解釋普通模式通過接受并發出FIFO的數據。自動響應模式RXT接收到的數據立即從TXD發送出去,同時處理器也可以讀到數據,但是UART此時不能發送FIFO里的數據。本地循環模式UART自己接收自己所發送的數據。與外部數據傳輸隔離。遠程循環模式UART作為一個平臺,接收的數據從發送端發送出去UART初始配置在UART程序設計中主要分為UART初始化、UART發送設置和UART接收設置三個部分。在本實驗中我們只需要進行UART的初始化和UART的發送設置即可。圖4-2UART初始化配置框圖UART配置首先通過XUartPs_LookupConfig函數進行配置,該函數根據唯一的設備ID來查找設備配置,并返回XUartPs_Config指針,如果沒有找到則返回NULL。之后使用XUartPs_CfgInitialize函數進行初始化配置將傳送波特率預設為19200bps,8數據位,1停止位,不設置奇偶校驗位。配置波特率我們使用XUartPs_SetBaudRate函數將默認波特率重新配置為之前預設的波特率,如果波特率不能與可接受的波特率結合,那么這種錯誤屬于XST_uart_BAUD_ERROR,并返回。UART自檢最后,我們使用XUartPsSelfTest函數對UART進行檢查。此函數運行一次,令UART工作在本地循環模式,即將自己發送的數據自己接收,以檢測UART設備是否可以正常工作。如果不能正常工作則返回XSTUARTTESTFAIL,如果能夠正常工作則顯示XSTSUCCESS。最終來確保UART硬件設備無故障。UART數據發送在程序中使用XUartPsSend進行數據的傳出。該命令可以將數據寫入FIFO中并且發送出去。返回值為實際發送出去的字節數,如果該返回值為0,則表示沒有發送任何字節。錯誤信息通過VERBOSE標志位表示程序中的出現錯誤。其中錯誤類型主要包括一下幾個方面。表4-2錯誤信息類型錯誤信息名稱錯誤信息返回值攝像頭A初始化失敗CameraonportAdidnotinitializecorrectly攝像頭B初始化失敗CameraonportBdidnotinitializecorrectly攝像頭A輸入通道出錯AnexceptionoccurredinInputpipelineforcam_a攝像頭B輸入通道出錯AnexceptionoccurredinInputpipelineforcam_b其余未知錯誤Exceptionthatcouldnotbehandled邊緣檢測算法為了在本實驗的基礎上加入一個邊緣檢測的算法,通過simulink軟件進行邊緣檢測模塊的設計,并生成IP核,以供在vivado內部使用。對于圖像處理,邊緣檢測算法有著非常重要的作用,邊緣檢測可以通過圖像的顯著變化識別圖像的邊緣輪廓,以提取圖像的重要信息。圖像邊緣一幅圖像中兩個或多個明顯界限的圖形信息,代表著一個區域的結束和一個區域的初始。因此,圖像邊緣可以說是某一像素點與其鄰域內其他像素點差量較大的點的合集。圖像的邊緣信息有兩個最重要因素,一個是幅值,另一個方向。順著邊界方向變化的像素點的變化之較小,相反垂直其邊界方向變化的像素點變化較大。因此,特點,我們可采用一階導數或者二階導數其邊界點的確定。邊緣檢測的算法很多,其中應用較廣,效率較高的算法為帶有Sobel算子的邊緣檢測算法。通過對邊緣檢測的介紹可以知道,相鄰像素的灰度變化程度,可以通過導數求得,而導數可以通過微分算子得到,在數字圖像處理的過程中,由于很難實現數字信號導數的計算,因此我們一般通過差分計算來做近似處理。Sobel邊緣檢測邊緣檢測原理邊緣檢測主要是講一個圖像中的信息進行分析,找到圖像的邊緣,可以簡單的理解為在實際生活中的摳圖,我們可以通過邊緣檢測算法,檢測出一個圖像中變化顯著的點,而這些點往往是一幅圖像中的邊緣,從而可以找到圖像的輪廓。圖像的邊緣檢測可以很大程度的減少圖像的數據量,如果算法設置的較好,可以很好的剔除不需要的無關信息,只保留我們需要的圖像信息,將圖像和背景區分開。為了計算一個像素點是否為一個圖像的邊緣點,我們通過計算該點的梯度值或經過濾波后的灰度值是否超過某一給定值,若超過給定值則將該點的灰度設置為0否則設為255。這樣就可以達到在圖形的邊界輸出白色輪廓,其余部分輸出為黑色。為了計算一個像素點處的導數指,我們在圖像處理的過程中一般通過計算相鄰像素點的差值。如以一維圖像信號為例,一階導數是通過原始數據與圖像數據卷積得到。如。該卷積的模板為:-1/201/2可以看出,通過卷積模板可以一定程度上的加快運算效率。經過算法計算出導數值后,我們需要給定一個閾值,使其能過確定該圖像的邊緣位置在哪里,閾值給定的越小,則能夠檢測出來的邊緣信息越多,可以使檢測的結果的細節增多,但是另一方面,在圖像處理的過程中由于噪聲的在圖像中的變化量也較大因此可能無法剔除,從而得到一些與圖像不相關的信息。與之相反,若將閾值定的過高,則會損失一些較細或較短的線段,使圖像的邊界信息變得不明顯。因此需要給定一個適中的閾值已達到一個較好的輸出圖形。因此我們可以得出邊緣檢測實現的步驟如下:1.濾波,由上文可知在邊緣檢測的過程中我們往往需要對圖像進行求導操作,但是往往實際的應用過程中,很難避免噪聲信號的加入,而高頻噪聲往往容易使求導后產生一個較大的數值,從而邊緣檢測會將該數值檢測成為邊緣點,所以我們需要對其進行濾波操作以改善由于現實實現中加入噪聲后的邊緣檢測器的能效,但是相反的是過強的濾波也會對圖像的邊緣信息造成一定程度的損害使其變得更加平滑,所以需要在增強邊緣信息和降低噪聲信號之間做一個這種選擇。2.為了增強圖像邊緣信息,我們可以通過計算出來的橫向導數和縱向導數,求其平方和,即梯度的平方值來擴大邊緣信號,使其更加明顯,并且由于直接求梯度的平方可以在實現的過程中省去開放操作,在fpga內部的實現將變得更為簡單。3.檢測及閾值的比較,通過計算出來的梯度值與之前所設定的閾值相比較,從而篩選出相應的圖像邊緣信息,并且剔除出無用信息。Sobel算子邊緣檢測的算法有很多,在本實驗中我們選用Sobel算子。Sobel算子是帶有方向性的,既有X方向也有Y方向。可以單獨計算X方向或者單獨計Y方向,也可以兩個都計算。其計算的公式如下所示:其中f(x,y)為圖像像素點(a,b)處的灰度值。當然,像5.1.1所述,可以構建卷積算子,使其計算更加有效,其中構建的卷積算子為:橫向Sobel卷積因子:縱向Sobel卷積因子:通過卷積運算可以得到橫向和縱向邊緣檢測的圖像灰度值:其中Gx為圖像的橫向微分值,Gy為圖像的縱向微分值,A為原始圖像。得到橫向和縱向的微分值后,可以求得某一像素點處的梯度值大小,計算公式如下:為了在系統實現過程中,提高系統的運算效率,我們通常取絕對值的和來省去開方運算以簡化運算。因此在經過以上的計算之后,得到梯度值G之后,和之前所設定的閾值比較最終來確定該像素點是否為圖像的邊緣點。并且在一些其他的邊緣檢測算法中可以通過計算梯度的方向來使邊緣信息更加明確,梯度方向通過下式得到:systemgenerator的實現邊緣檢測systemgenerator的實現賽靈思公司為了方便在simulink上進行數字信號處理,設計出systemgenerator這種開發工具,其可以在simulink中將賽靈思開發的模塊嵌入進去,使所需要進行設計的部分在simulink中進行仿真并生成相應的HDL文件與Vivado實現交互,但是在simulink中進行的仿真必須使用XilinxBlock內的相關模塊才能進行仿真。也可以生成比特流文件,加快數字信號系統的開發進程。由邊緣檢測的原理我們可以得知,要在systemgenerator上實現邊緣檢測我們需要完成一下幾個步驟:像素流的輸入和圖像的輸出、緩沖器、X濾波器、Y濾波器以及閾值比較。下面我們將按照上述幾個模塊分別在simulink中實現。像素流的輸入和圖像的輸出由于在matlab中進行圖像處理時,內部是可以進行矩陣運算的,這種運算使圖像處理變得非常方便,但是在實際應用的過程中我們很難實現這么多并口同時輸入,一來沒有這么多的io口進行設計,二來這樣的設計對于硬件運算負荷太大設計困難,因此我們在PL上實現數字圖像處理時,我們應該將matlab中的矩陣信息變為數據流的形式輸入并且處理。因此本實驗在simulink內部進行仿真的時候選擇使用回調函數的方法分別在仿真開始前和仿真結束前添加圖像提取和圖像輸出的回調函數。函數的具體思路如下:圖5-1圖像輸入的回調函數由圖5-1可知,在matlab界面使用imread函數將某一圖像進行提取,但是由于直接讀取的圖像信息是unit8格式并且是矩陣形式,這樣的圖像信息并不能用于圖像處理,因此使用double語句改變其格式,并且在得到圖像大小信息之后,用reshape函數將圖像矩陣變成一個一維向量,這個過程應注意reshape的格式。為了使其能夠在systemgenerator中進行仿真,我們在前面再加入一個時針信號,信號范圍是像素點總數。圖5-2圖像顯示的回調函數圖像顯示的回調函數如圖5-2所示。從上圖可以看出在此處我們依然使用reshape函數將經過simulink處理的圖像信息轉換為矩陣形式,方便在matlab中輸出。緩沖器圖像處理一般是根據一個鄰域內進行運算,因此在硬件中進行數字圖像處理時,需要緩沖器使一個像素的領域內的數據可以進行運算。其中包括行緩存器和列緩存器。1.行緩存器在simulink中的行緩存器非常簡單,由于圖像數據是自上而下,從左向右進行處理的,因此3行緩存器只需要加入兩個延遲環節即可。如圖5-3所示:圖5-3行緩存器內部結構通過行緩存器就可以實現將f(x+1,y),f(x,y),f(x-1,y)進行并行輸入。將設計好的行緩存器封裝,如圖5-4圖5-4行緩存器2.列緩存器當然與行緩存器類似,我們可以按照其原理進行如圖5-5所示設計。這種設計的輸出延遲為輸入圖形的寬度。使得輸出通道為一列相鄰像素數據的并行輸出,但是顯而易見的是,這種輸出模式會向后延遲1280拍,使得整個系統的延遲增大非常多,因此我們需要另一種列緩存模式。圖5-5列緩存器與行緩存器目的一致,為了使圖像數據的f(x,y+1),f(x,y),f(x,y-1)并行輸入。在simulink中進行列緩存器的設計,可以仿照行緩存器,設置兩個延遲環節。但是在列緩存器的設計過程中,其延時拍數將設計為圖像的長度,這樣就會使整個系統的延時加大,整個系統的效率就會大大降低。因此我們選用雙口RAM模塊進行緩存器的設置。圖5-6DualportRAM模塊該模塊可以將直接將數據存放在相應地址,addra是A存儲器的地址入口,dina是A存儲器的數據入口,wea是a的寫入使能端。我們可以通過對于地址信息的設計,使用較少的延遲來實現列緩存器。圖5-7列緩存器的內部結構圖可以看到通道一直接輸出,通道二通過concat模塊將兩個數組連接起來作為其存儲地址。通道三的實現是通過RAM的A口輸出數據連接到RAM的B口輸入,并增加地址最高位,使其延遲一個圖像寬度的拍數。但是在此處設計的時候應該注意DualPortRAM內部的延遲為2拍,所以要使其列緩存器輸出正確,我們將該模塊的總延遲設計為5拍,因此需要在相應的位置加入延遲環節驚醒校對。校對結果如圖5-8所示:圖5-8加入延遲環節的列緩存器內部結構圖最后將其封裝,如圖5-9所示:圖5-9列緩存器X,Y濾波器以及梯度計算X,Y濾波器的原理在6.1節已經涉及到,在此不再進行過多描述,主要是將卷積公式,轉換成simulink的模塊實現。實現過程主要是依靠乘法器和加法器實現:如圖5-10,5-11所示:圖5-10X濾波器內部結構圖5-11Y濾波器內部結構可以看到simulink中通過行緩存器和列緩存器之后,將得到某一像素點鄰域內的各個像素信息,通過計算可以得出Sobel算子卷積后的Gx和Gy。正如5.1節所述,計算其梯度的數值,經過比較便可得到最終的結果,及該店是否為邊緣點。將X,Y濾波器打包如圖5-12所示:圖5-12X,Y濾波器由于前文所說,為求得梯度的數值,開方的操作實現起來較為麻煩,可以選擇絕對值的和的方式進行實現,或者如本實驗所選用的計算平方和的方法和閾值的平方進行比較。及:最后由和閾值比較。Simulink的梯度計算如圖5-13所示圖5-13梯度值的計算閾值比較閾值比較在閾值比較的simulink實現中我們選用比較模塊和二選一Mux模塊共同實現,Mux模塊如圖5-14所示:圖5-14Mux模塊可以看到sel口輸入0時,Mux模塊輸出d0值,當sel口輸入1時,Mux模塊輸出d1的值。因此可以將邊緣點檢測模塊設置為:圖5-15閾值比較模塊若比40000大則判斷該點處的像素變化較大,該像素點為圖像的邊緣點,之后令sel輸入為0,Mux的輸出為255,即亮度強度最強為白色。整體實現通過上述在simulink中構建相應的模塊,將其組裝成為邊緣檢測的系統實現,因為在systemgenerator的實現過程中,有一些其他的模塊需要添加,在本節我們做出一些必要的說明。1.systemgenerator模塊為了使simulink的仿真可以正常運行,在整個系統的內部需要加入一個systemgenerator模塊,如圖5-15所示圖5-16systemgenerator模塊該模塊可以驅動整個fpga的運行和實現,只有systemgenerator模塊存在,XilinxBlock中的模塊才能正常運行,該模塊在simulink中不和其他的元件連接,獨立存在。我們在使用時雙擊進入內部對其進行配置,我們可以在其內部選擇仿真的芯片,時鐘頻率,仿真頻率等等,并且最終生成ip核或者是將整個系統通過HDL語言描述出來。在本次實驗中我們需要systemgenerator為我們生成相應的ip核,systemgenerator可以通過系統內部的構成來自動生成ip核的數據輸入接口和時序輸入接口。2.FPGA邊界模塊Systemgenertor可以實現fpga開發和matlab算法的交互,但是我們不難想到,matlab有著優秀的矩陣運算,但是在fpga中并沒有矩陣運算的概念,因此為了進行fpga式的開發,我們需要在simulink中規定數據的輸入形式,即數據流的輸入形式,以方便在后續的處理過程中可以根據fpga的開發思想來進行相應的操作,XilinxBlock為我們提供了兩個模塊,分別為gatewayin和gatewayout,這兩個模塊使系統在simlink內部仿真的時候可以確定生成的ip核的邊界在哪里,在整個系統的內部必須使用XilinxBlock中的模塊,在系統外部可以使用simulink中的其他模塊。而為了仿真fpga的數據類型,gatewayin的功能是可以將傳入matlab中的浮點型數據變為fpga可以接收的定點型數據。GatewayIn和GatewayOut結構如圖6-17所示:圖5-17FPGA的邊界定義對于整個FPGA在simulink中的仿真參數的設置可以在GatewayIn中設置,如圖6-18所示:圖5-18GatewayIn模塊設置這里可以設置轉換成定點數的數據格式,可以設置成有符號數或無符號數,以及數據位寬和小數點的位置。需要注意的是這里的采樣時間應該與simulink系統的仿真時間保持一致或更小。自此整個系統構建所需要的模塊已經介紹完畢。3.系統實現通過上述所講,將所有模塊串聯成整個邊緣檢測的系統,如圖5-19所示圖5-19邊緣檢測simulink實現為了檢驗該系統的可靠性,我們可以構建一個基于matlab矩陣運算的邊緣檢測模型,如圖5-20所示:圖5-20基于矩陣運算的邊緣檢測模型可以對比兩個模型的運算結果運行結果如圖5-22和圖5-23所示,原圖如5-21所示:圖5-21原始圖像圖5-22基于矩陣運算的邊緣檢測圖5-23基于FPGA的邊緣檢測可以看到該實驗的實現效果較好。若要進行調整只需要適當改變閾值參數即可。以下為改變閾值參數后的輸出圖像效果圖。(A)(B)(C)(D)圖5-24閾值改變時的結果由圖5-24可以看出a,b,c,d四張圖的閾值參數設置分別為,60000、40000、10000、5000。當閾值設置越小時,圖像信息就越明顯,線條也越鮮明。這是對于一幅沒有高頻干擾的圖像,但是在現實的圖像處理設備中,難免的會有一些高頻噪聲的干擾。如圖5-25所示,將圖像加入一些高頻噪聲后,不同的邊緣檢測參數對其影響。(B)(C)圖5-25帶有高頻噪聲的邊緣檢測上圖中A圖將閾值改為20000,B圖將閾值改為80000,C圖將閾值設定為11000。可以看出,如果閾值設置過小,雖然圖像較為完整但是將有大量的高頻噪聲保留在圖像上,如果加大閾值參數使盡量少的噪聲保留,這樣會一定程度上損壞原圖像的信息。因此閾值的選取應該適當。vivado的整體實現通過systemgenerator模塊選取zedboard開發板,生成相應的IP核,在vivado內部加入邊緣檢測模塊,之后整個系統實現原理圖如圖5-26所示:圖5-26加入邊緣檢測后的vivado系統框圖通過systemgenerator模塊生成ip核文件,并將生成的ip核配置到vivado內。生成的ip核如圖5-27所示。圖5-27邊緣檢測ip核將生成的ip核嵌入到vivado建立的工程中,進行總體的實現。邊緣檢測的優化通過第五章可以發現,在現實生活中有很多的硬件設備里總是存在多多少少的高頻噪聲干擾,因此在實現邊緣檢測時總會發生圖5-25所示內容,為了使邊緣檢測不受到高頻噪聲的影響,我們可以在邊緣檢測ip核前加入一個濾波ip核,使輸入進的視頻數據先經過濾波去除一定的高頻噪聲,之后在此基礎上再將濾波后的圖像進行其他的圖像處理,可以很大程度上的減少高頻噪聲對系統的影響。由于ip核的建立在第五章已經有所設計,因此本章不再做過多說明,只將重心放在系統在systemgenerator的搭建上。濾波裝置的systemgenerator實現濾波裝置的實現有很多種,其中我們可以通過FDAtool進行降噪,FDAtool是systemgenerator的一個濾波模塊,可以通過它對進行數字濾波的配置,可以通過伯德圖的形式直觀的表現出我們所需要的濾波器信息。如圖6-1所示6-1FDAtool內部配置通過FDAtool和數字濾波模塊的配合可以將圖像流信息進行濾波操作。總體systemgenerator實現圖如圖6-2所示:6-2FDAtool濾波流程圖從上圖可以看出,FDAtool的濾波流程較為簡單,設計起來也非常方便,參數調整可以根據FDAtool內部進行調整,較為靈活。但是對于數字圖像的處理過程中,參數的確定就顯得尤為麻煩,并且濾波的效果也不是很理想,往往會使整個圖像變得非常模糊。因此我們在此選取另一種圖像濾波方式,即中值濾波。中值濾波的原理非簡單,即再每一個像素點周圍3×3的鄰域內共計9個像素信息,將這9個像素信息,進行排序之后選取中位數作為該像素點的輸出。這種濾波方法可以很大程度的減小圖像中的噪聲,并且也不會對邊緣信息造成像均值濾波一樣的損壞。因此我們在本例中使用中值濾波的實現方法。圖6-3中值濾波的systemgenerator實現在圖6-3中可以看到,主要系統包括橫向和縱向的緩存器,以及MUX模塊,和Mcode模塊。對于視頻的輸入輸出,和緩存器部分在第五章已經做了詳細的介紹,在此我們不再進行說明。對于MUX模塊主要是將緩存器的9個像素信息,逐個輸出。而Mcode的主要功能是將輸入的9個像素信息進行排序之后再選取中間值作為輸出,具體的Mcode函數見附錄。建立好的中值濾波systemgenerator模塊可以通過第五章的方法進行ip核的建立,建立好的ip核加入整個系統后,可以觀察,優化后的邊緣檢測模型的圖像效果。(A)(B)(C)圖6-4中值濾波的邊緣檢測可以看出再圖6-4中,(A)為原圖,(B)為帶中值濾波的邊緣檢測,(C)為不帶中值濾波的邊緣檢測。對比5.2.6節中的結果可以看出,帶有中值濾波的邊緣檢測很好的剔除了高頻噪聲,可以使邊緣檢測的結果得到一定程度的改善。其他實現當然邊緣檢測的優化方式有很多,我們可以對邊緣檢測算法本身進行一定程度的改進,我們只研究了邊緣檢測處理過程中的梯度的大小,但是并沒有根據梯度的方向對邊緣信息進行分析,并且由于sobel算法對圖像邊緣的處理時,只考慮圖像邊緣是一段很小的像素鄰域,因此當某個圖像邊緣較厚時,可能會出現其他情況的錯誤。并且如果莫伊圖像的邊緣顏色和背景顏色較為接近時,可能會發生無法檢測到的情況,因此我們可以在算法上進行改進,可以設置雙閾值檢測,大于高閾值時則為邊緣點,大于低閾值時則為弱邊緣點,通過統計觀察不難發現,軟邊緣點總是在強邊緣點附近延伸出來,因此我們可以通過這種方法對邊緣檢測進行一定程度的改進。除了這些以外,我們也可以考慮不同

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論