1. 程式人生 > >FPGA影象處理系列——乒乓球追蹤設計例項

FPGA影象處理系列——乒乓球追蹤設計例項

注:本博文將講解一個FPGA設計影象處理系統例項,此例項的功能為高速追蹤乒乓球。讀者可以參考本博文的演算法思路、工程框架,但博主並不提供工程。

當前,實用的影象處理系統都要求高速處理。目前廣泛採用軟體進行處理,但軟體處理存在速度、成本的問題。近年來,隨著現成可程式設計門陣列FPGA的發展,為提高影象處理系統的效能提供了新的思路和方法。FPGA的並行特性所帶來的高速性,以及低成本低功耗等特性,都是計算機無法比擬的。

小球追蹤平臺的FPGA以及PCB部分由本人開發。採用digilent公司Basys3 FPGA開發板作為控制核心,此款開發板採用xilinx 7系列晶片,板卡設計小巧,同時片上資源也足以滿足大多教學應用場合。此平臺擁有如下功能:

·        採集攝像頭影象,將影象顯示在VGA上

·        控制舵機-攝像頭雲臺,高速追蹤單一顏色物體(比如乒乓球)

系統框架

小球追蹤平臺的系統框圖如下:



從系統框圖可知,片上主要分為5個模組,簡要介紹如下表格:

名稱

功能簡介

Camera control

攝像頭控制,包含驅動、IIC配置

Frame buffer

幀快取

Image process

影象處理

Vga driver

VGA驅動

Servo control

舵機控制

IP詳解

1.      攝像頭模組

小球追蹤平臺的攝像頭採用OV系列的OV7725攝像頭。這款攝像頭時序、暫存器配置都比較簡單,效能也足以滿足追蹤的需要。

關於OV7725具體的引數和時序,使用者可以參考OV7725的官方手冊。本平臺在工程中構建了兩個關於攝像頭的IP核——一個是攝像頭時序控制模組;另一個是暫存器配置模組。

攝像頭的採集模組IP封裝如下圖所示:


引腳說明如下表格:

埠名稱

位寬

方向

埠說明

pclk

1

輸入

畫素時鐘,來自於外部攝像頭。依據此時鐘來取樣攝像頭資料

vsync

1

輸入

幀同步訊號,來自外部攝像頭,採集完一幀會有一個vsync脈衝產生

href

1

輸入

行資料有效訊號,來自外部攝像頭,當此訊號為高電平時,說明攝像頭有資料輸入到此模組

d

8

輸入

攝像頭資料輸入

addr

17

輸出

幀快取寫地址訊號

dout

16

輸出

RGB565畫素輸出

we

1

輸出

幀快取寫使能訊號

此IP的功能為:根據攝像頭的時序,對輸入的pclk、vsync、href訊號進行時序分析,將輸入的攝像頭初始資料d[7:0]轉換為使用者需要的RGB565畫素,並對應每一個RGB畫素產生一個地址、一個寫使能,以便將畫素正確存到幀快取之中。注意到,攝像頭的工作時鐘xclk並不由此模組提供。在工程中,我們直接新增一個clock模組來提供所有時鐘,其中產生一路25MHz給攝像頭,充當xclk。

OV7725內部有一些暫存器,這些暫存器的內容決定攝像頭的工作引數、工作模式等,主機可以通過IIC協議讀寫這些暫存器。本系統我們構建了一個IIC的IP。

暫存器配置IP封裝如下圖:


引腳說明如下表格:

埠名稱

位寬

方向

埠說明

iCLK

1

輸入

模組工作時鐘,25MHz

rst

1

輸入

復位(高電平復位)

I2C_SCLK

1

輸出

IIC的時鐘

I2C_SDAT

1

輸出

IIC的資料訊號

Config_Done

1

輸出

IIC配置結束訊號

此IP的功能為:產生IIC時序,並通過IIC向攝像頭暫存器寫入資料,使得攝像頭能正常工作。如果想再次配置,只需rst引腳復位一次即可。

在本系統中,我們通過IIC模組將攝像頭配置成QVGA的解析度(320*240)、RGB565的畫素格式。關於配置指令的詳細內容,使用者可以參考OV7725的官方手冊。

2.      幀快取

一個完整的影象採集系統一定要有幀快取。因為影象的採集端和輸出端往往並非同步,它們中間需要有一個儲存器來快取整張影象,將影象的採集、輸出部分分開,互不干擾。在硬體上,通常選用雙口ram來實現幀快取。雙口ram可以讀、可以寫,並且讀寫可以同時進行,互不影響。本系統採用的幀快取ip採用了vivado自帶的簡單雙口bram,封裝如下:

埠名稱

位寬

方向

埠說明

dina

16

輸入

寫資料訊號,為16bit的RGB565畫素

addra

17

輸入

寫地址,影象大小為320*240,因此地址範圍為0-76799

clka

1

輸入

寫時鐘,採用pclk

wea

1

輸入

寫使能

clkb

1

輸入

讀時鐘,採用25MHz的時鐘,與VGA畫素時鐘同步

addrb

17

輸入

讀地址,來自於VGA驅動模組

doutb

16

輸出

讀資料

3.影象處理部分功能框圖:


·        色彩空間轉換模組RGB2HSV

攝像頭模組得到的是RGB資料。在實際環境中,光照經常會給影象中同一物體的RGB分量帶來影響。不過,光照對於HSV(Hue、Saturation、Value)色彩空間中H、S分量的影響卻相對小很多。本平臺由於攝像頭位置隨時在變化,影象明暗程度經常會變化,為了追蹤色彩單一的乒乓球,採用HSV色彩空間是一個比較合適的策略。本系統即構建了一個RGB畫素到HSV畫素的轉換ip,IP的封裝如下:

 

引腳說明如下:

埠名稱

位寬

方向

埠說明

pclk

1

輸入

畫素時鐘,與VGA畫素時鐘同步

RGB24

24

輸入

輸入的24bit RGB畫素,R、G、B各8位

HSV24

24

輸出

轉換後的24bit HSV畫素,H、S、V各8位

IP功能說明:將輸入的RGB畫素,轉換成HSV畫素。RGB色空間和HSV空間之間的轉換為非線性的,硬體實現需要考慮時鐘同步、演算法優化、實時性等問題。此ip內部呼叫了低延遲的除法器實現Hue分量與Saturation分量的高速計算,從而實現了RGB轉換成HSV。

·        色彩提取與座標計算模組ColorDetect IP

本系統追蹤乒乓球的原理是應用了色彩方面的理論,尋找類似乒乓球色彩的區域,然後計算這個區域的中心。首先需要人為提取乒乓球的HSV分量(只提取一次);之後的每一幀都進行如下操作:遍歷影象每個畫素,對HSV分量和乒乓球相近的畫素進行標註,然後對標註後的區域去噪,去噪後,對此區域進行中心點的計算。每一幀結束都會將計算所得的中心座標傳送給舵機控制模組。

本系統提供的ColorDetect IP能實現以下功能:

·檢測顏色

·標註並上色

·計算標註區域的中心座標

在標註過程中,假如背景有橘黃色的物體,就會產生噪聲。本系統去噪、降噪的策略有兩個方面:1.形態學處理,直接去除面積較小的噪點;2.設定權值的概念,降低較大噪點影響。

對於形態學處理,在colorDetact ip內部並沒有包含,而是將待處理訊號引出到其他IP——erode ip和dilate ip。後續內容中,會介紹erode ip和dilate ip這兩個在本系統中專門用來形態學處理的IP。對於權值降噪,在ColorDetectip中,有一個權值計算模組,中心點的計算會和權值相關。對於每一個標註畫素,都計算此畫素和上一幀得到的中心點的距離,根據距離遠近設定不同大小的權值,越接近中心的標註畫素,權值越大,否則越小。這樣就會降低和乒乓球實際球體距離較遠,但面積較大的噪點的影響

ColorDetect IP的封裝如下:


引腳說明如下表所示:

埠名稱

位寬

方向

埠說明

PClk

1

輸入

畫素時鐘,與VGA畫素時鐘同步

btn_ColorExtract

1

輸入

顏色提取按鍵,按下一次就儲存一組參考色彩的值

sw_ColorClear

1

輸入

顏色清除開關。為1時,清除之前儲存的參考色彩值

VtcHCnt

12

輸入

當前畫素的列計數值,來自於VGA驅動模組

VtcVCnt

11

輸入

當前畫素的行計數值,來自於VGA驅動模組

HSV24

24

輸入

輸入的HSV畫素

RGB24

24

輸入

輸入的RGB畫素

Binary_PostProcess

1

輸入

輸入的去噪後的標註畫素(1bit),來自於dilate IP

Binary_PreProcess

1

輸出

輸出的去噪前的標註畫素(1bit),提供給erode IP

center_h

12

輸出

計算得到的小球區域中心點橫座標

center_v

11

輸出

計算得到的小球區域中心點縱座標

RGB24_dis

24

輸出

·        膨脹與腐蝕模組——erode IP & dilate IP

在影象中,利用形態學處理演算法,可以去除較小的噪點。在FPGA上實現腐蝕和膨脹兩種操作的演算法,關鍵是濾波視窗的實現。

設計的思路是:因為視窗在遍歷影象過程中,每一個畫素都會被視窗多次使用,因此需要通過快取來儲存畫素,使得它們能在後續的視窗位置被重複利用。本平臺需要的視窗大小為3*3,在FPGA中,可以設計3個單口行快取,藉助狀態機和列計數值實現這種視窗,採用流水處理的方法,實現加速計算。

得到視窗之後,就可以對其中的單元並行操作。對於腐蝕演算法,假設輸入的影象為單畫素1bit的二值化影象,只有當視窗所有元素都為1時,視窗最後輸出才為1,否則輸出為0。而對於膨脹演算法,只有當視窗所有元素都為0時,視窗最後輸出才為0,否則輸出為1。

本系統構建了erode ip和dilate ip,先通過erode ip對影象進行腐蝕,去掉小的噪點,但同時對非噪聲區域也削去了一部分邊緣;然後再經過dilate ip對影象進行膨脹,恢復被削去的非噪聲區域的邊緣。

Erode IP的封裝如下:


引腳說明如下:

埠名稱

位寬

方向

埠說明

PCLK

1

輸入

畫素時鐘,與VGA畫素時鐘同步

VtcHCnt

12

輸入

當前畫素的列計數值,來自於VGA驅動模組

VtcVCnt

11

輸入

當前畫素的行計數值,來自於VGA驅動模組

pix_i

1

輸入

單bit的畫素,如果是標註區域,為1,否則為0

pix_o

1

輸出

單bit的畫素,如果是標註區域,為1,否則為0

dilate IP的封裝如下:


引腳說明:

埠名稱

位寬

方向

埠說明

PCLK

1

輸入

畫素時鐘,與VGA畫素時鐘同步

VtcHCnt

12

輸入

當前畫素的列計數值,來自於VGA驅動模組

VtcVCnt

11

輸入

當前畫素的行計數值,來自於VGA驅動模組

pix_i

1

輸入

單bit的畫素,如果是標註區域,為1,否則為0

pix_o

1

輸出

單bit的畫素,如果是標註區域,為1,否則為0

VGA IP

模組功能:產生VGA時序訊號、資料訊號,產生影象的行列計數值,以及幀快取的讀地址

IP的封裝如圖所示:


引腳說明:

埠名稱

位寬

方向

埠說明

Clk25

1

輸入

VGA工作時鐘,25MHz

frame_pixel

16

輸入

16bit RGB畫素輸入

vga_red

4

輸出

VGA 輸出資料(R通道)

vga_green

4

輸出

VGA 輸出資料(G通道)

vga_blue

4

輸出

VGA 輸出資料(B通道)

vga_hsync

1

輸出

VGA 行同步訊號

vga_vsync

1

輸出

VGA 場同步訊號

Hcnt_signal

12

輸出

當前畫素的列計數值

Vcnt_signal

11

輸出

當前畫素的行計數值

frame_addr

17

輸出

幀快取的讀地址訊號,由vga時序產生

舵機控制IP

本系統為了實現追蹤,需要水平方向、豎直方向各一個舵機,以組成二自由度平臺。平臺採用的舵機是四線舵機,除了電源、地以及pwm訊號線以外,還有一根反饋訊號線,能夠以電壓的形式返回舵機當前的位置(角度)。反饋訊號使得控制演算法設計變得簡單而有效,本系統的控制演算法框圖如下:

 

本系統的舵機控制IP,封裝如下:


引腳說明:

埠名稱

位寬

方向

埠說明

Clk_50M

1

輸入

工作時鐘,50MHz

reset

1

輸入

模組復位

Move_EN

1

輸入

舵機運動使能

vsync_in

1

輸入

幀同步輸入

x

12

輸入

小球中心點橫座標

y

11

輸入

小球中心點縱座標

A_VAUXP

1

輸入

A路ADC差分輸入P端

A_VAUXN

1

輸入

A路ADC差分輸入N端

B_VAUXP

1

輸入

B路ADC差分輸入P端

B_VAUXN

1

輸入

B路ADC差分輸入P端

pwm_x

1

輸出

舵機雲臺水平方向舵機的pwm訊號

pwm_y

1

輸出

舵機雲臺豎直方向舵機的pwm訊號

為了採集反饋訊號,需要一個模擬-數字轉換器件。Xilinx 7系列的晶片都集成了模數轉換器(XADC)。這是相比Xilinx前一代產品新增加的特性,可在系統設計中免去外接的ADC器件,提高了系統的整合度。XADC的框圖如下:

 

XADC的主要效能指標有:

l 12-bit,1M取樣率;

l 即可採集片外電壓訊號輸入,又可採集晶片溫度、晶片供電電壓

通過DRP(dynamic reconfigurationport)介面,可靈活配置XADC的工作模式和引數(輸入極性、取樣通道選擇、報警值等),也可檢視ADC轉換結果。

本平臺的XADC的呼叫和配置,參考了《7 Series FPGAs and Zynq-7000 All Programmable SoC XADC Dual 12-Bit 1 MSPSAnalog-to-Digital Converter User Guide》(ug480)的p77-p85。具體讀者可查閱此文件。本系統的XADC有兩路,每一路都為差分訊號,分別用到上面ADC框圖中,外部模擬輸入的VAUXP[6]/ VAUXN[6]以及VAUXP[7] / VAUXN[7]。

舵機控制模組的工作原理為:影象每一幀都會得到一組小球中心點的橫縱座標。在幀同步訊號vsync_in的驅動下,根據ADC取樣值計算出當前的舵機角度,同時計算出當前小球中心點座標與畫面中心點座標的距離,將這兩個數值的單位統一換算成pwm,然後根據上述控制演算法框圖,計算出下一時刻舵機的pwm值。


相關推薦

FPGA影象處理系列——乒乓球追蹤設計例項

注:本博文將講解一個FPGA設計影象處理系統例項,此例項的功能為高速追蹤乒乓球。讀者可以參考本博文的演算法思路、工程框架,但博主並不提供工程。 當前,實用的影象處理系統都要求高速處理。目前廣泛採用軟體進行處理,但軟體處理存在速度、成本的問題。近年來,隨著現成可程式設計門陣列

FPGA影象處理系列——實現窗處理

窗處理是影象處理中常見的一種處理,它的思想是對於影象矩陣,通過一個固定大小(例如3*3)的小矩陣對影象進行運算操作。常用的窗處理包括Sobel邊緣檢測,形態學操作,模糊濾波,高斯濾波等。在基於PC的影象處理領域,可以方便的實現窗處理操作。比如,在opencv庫中可以自己隨意構建視窗大小,然後呼叫相關

FPGA影象處理系列-video訊號轉Avalon-ST模組

    年前到手一塊Altera的SoCKit開發板,跑了跑友晶的VIP例程。也是為了練手,自己寫了個video input format detection模組(此模組官方有提供IP)。功能為:將輸入的包含RGB data, hsync,vsync,data_valid訊

FPGA影象處理之行快取(linebuffer)的設計FPGA影象處理之行快取(linebuffer)的設計

轉載: FPGA影象處理之行快取(linebuffer)的設計一 FPGA影象處理之行快取(linebuffer)的設計一 作者:OpenS_Lee   1 背景知識     在FPGA數字影象處理中,行快取的使用非常頻繁,

android影象處理系列之五--給圖片新增邊框(中)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

android影象處理系列之六--給圖片新增邊框(下)-圖片疊加

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

android影象處理系列之四--給圖片新增邊框(上)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

FPGA影象處理入門(一)

本人有過多年用FPGA做影象處理的經驗,在此也談一下自己的看法。用FPGA做影象處理最關鍵的一點優勢就是:FPGA能進行實時流水線運算,能達到最高的實時性。因此在一些對實時性要求非常高的應用領域,做影象處理基本就只能用FPGA。例如在一些分選裝置中影象處理基本上用的都是FPGA,因為在其中相機從看到

【數字影象處理系列二】基本概念:亮度、對比度、飽和度、銳化、解析度

本系列python版本:python3.5.4 本系列opencv-python版本:opencv-python3.4.2.17 本系列使用的開發環境是jupyter notebook,是一個python的互動式開發環境,測試十分方便,並集成了vim

【數字影象處理系列四】影象資料集增強方式總結和實現

本系列python版本:python2.7.15 本系列opencv-python版本:opencv-python3.4.2.17 本系列使用的開發環境是jupyter notebook,是一個python的互動式開發環境,測試十分方便,並集成了vim操作,

android影象處理系列之七--圖片塗鴉,水印-圖片疊加

                圖片塗鴉和水印其實是一個功能,實現的方式是一樣的,就是一張大圖片和一張小點圖片疊加即可。前面在android影象處理系列之六--給圖片新增邊框(下)-圖片疊加中也講到了圖片疊加,裡面實現的原理是直接操作畫素點。下面給出別外一種方式讓圖片疊加--用Canvas處理圖片,canva

Matlab影象處理系列3———空間域銳化濾波器

注:本系列來自於影象處理課程實驗,用Matlab實現最基本的影象處理演算法 1.銳化濾波器 銳化濾波,是將影象的低頻部分減弱或去除,保留影象的高頻部分,即影象的邊緣資訊。 影象的邊緣、輪廓一般位於灰度突變的地方,也就是影象的高頻部分,通常用灰度差分提取邊緣

Matlab影象處理系列1———線性變換和直方圖均衡

注:本系列來自於影象處理課程實驗,用Matlab實現最基本的影象處理演算法 影象點處理是影象處理系列的基礎,主要用於讓我們熟悉Matlab影象處理的程式設計環境。灰度線性變換和灰度拉伸是對畫素灰度值的變換操作,直方圖是對畫素灰度值的統計,直方圖均衡是對灰度值分

FPGA影象處理之路

下面論述FPGA在影象處理領域中的地位: 影象處理,它是一個非常廣義的概念,它包含影象增強,影象復原,影象重建,影象分析,模式識別,計算機視覺等N多個應用方向。這些應用技術有許多在本質上是相通的,但是不同應用領域的關注點往往是不同的。 從網路上的開源情況來看,

FPGA 影象處理的開源庫

 F-I-L是一個FPGA平臺的開源的影象處理庫,已經擁有了許多常用操作,並在不斷更新中。這些操作被以IP核的形式進行了封裝,遵循同一種規範化的介面,同時具有流水線和請求響應兩種使用模式。大部分I

Matlab影象處理系列2———空間域平滑濾波器

注:本系列來自於影象處理課程實驗,用Matlab實現最基本的影象處理演算法 本文章是Matlab影象處理系列的第二篇文章,介紹了空間域影象處理最基本的概念————模版和濾波器,給出了均值濾波起和中值濾波器的Matlab實現,最後簡要討論去躁效果。 1.空

影象處理系列(1):測地線動態輪廓(geodesic active contour)

動態輪廓是影象分割的一個熱點,從早期的snake,就有很多的優化版,測地線動態輪廓(GAC)就是其中之一。總體來說,其摒棄了snake對引數的依賴,並加入了水平集,使得輪廓曲線更貼近目標物的拓撲結構。 經典的動態輪廓模型(activecontour model)的能量公式為

【數字影象處理系列三】影象增強:線性、 分段線性、 對數、 反對數、 冪律(伽馬)變換、直方圖均衡

本系列python版本:python3.5.4 本系列opencv-python版本:opencv-python3.4.2.17 本系列使用的開發環境是jupyter notebook,是一個python的互動式開發環境,測試十分方便,並集成了vim操作,安

android影象影象處理系列(一、Bitmap和BitmapFactory)

1、Drawable物件   Android應用添加了Drawabe資源之後,Android SDK會為這份資原始檔在R清單檔案中建立一個索引項:R.drawable.file_name,接著我們可以在xml資原始檔中通過@drawable/file_name來訪問該draw

C#中基於GDI+(Graphics)影象處理系列之高質量縮圖

簡介 生成圖片縮圖的功能在Web開發的工作是經常遇到的,比如使用者上傳一張圖片作為使用者頭像,根據業務的需要生成若干不同尺寸的縮圖,不同的功能使用不同尺寸的圖片等等。 大家知道Image類有一個GetThumbnailImage的方法來生成縮圖,但是這貨表現