本發明屬于fpga嵌入式圖像處理技術領域,涉及一種空間標志物動態坐標實時捕捉相機。基于fpga并行圖像處理,可以在幀率為100幀并且1280×720的高分辨率下,最多可以實時計算出圖像中200多個動態標志物的空間坐標。
背景技術:
運動捕捉系統在動漫制作、運動員訓練、互動式游戲等領域應用非常廣泛。在動漫制作時,可以通過捕捉真人的動作,然后進行三維動畫合成,可以極大的提高動畫制作的效率,降低了成本,提高了動漫制作的水平。通過捕捉運動員的動作,便于進行量化,結合人體生理學、物理學原理,研究改進的方法,使體育訓練擺脫純粹依靠經驗的狀態,進入理論化、數字化的時代。還可以把成績差的運動員的動作捕捉下來,將其與優秀運動員動作進行對比分析,從而幫助其訓練。在互動式游戲開發領域,可以利用運動捕捉技術捕捉游戲者的各種動作,用以驅動游戲環境中角色的動作,給游戲者以一種全新的參與感受,加強游戲的真實感和互動性。此外,運動捕捉系統在醫療,機器人,無人機等領域應用也非常廣泛
當圖像大小為1280×720時,傳統的圖像處理算法按照中值濾波、邊緣檢測和重心計算處理完一幅圖像時間都在50ms以上,實時性較差,算法復雜度高。針對上述背景內容,提供一種空間標志物動態坐標實時捕捉相機具有重要使用價值。
技術實現要素:
本發明的目的是提供一種空間標志物動態坐標實時捕捉相機,該空間標志物動態坐標實時捕捉相機基于fpga高速并行處理的特點,圖像的采集和數據處理都在fpga單芯片中進行。在高幀率高分辨率的條件下,實時性好,結構簡單。
本發明采用的技術方案如下:
一種空間標志物動態坐標實時捕捉相機設計,步驟如下:
1.cmos圖像傳感器電路連接
fpga通過iic總線的sclk時鐘和sdata數據信號向將cmos圖傳感器的寄存器中寫入設置的參數。包括工作模式、圖像和增益的大小等設置。fpga還向傳感器提供12.5mhz的主輸入時鐘extclk,然后通過傳感器的片上鎖相環倍頻成96mhz的像素時鐘pixclk。fpga還要為其提供曝光觸發信號trigger,用來控制圖像幀率,當trigger為低電平時,就會觸發一幀圖像,低電平時間的長短決定曝光時間的長短。圖像傳感器把輸出的圖像數據dout、輸出像素時鐘pixclk、幀有效信號fv和行有效信號lv等信號傳輸到fpga上。通過兩排插針將fpga與cmos圖像傳感器連接起來。
2.microblaze嵌入式軟核與fpga的數據交換
ddr3作為microblaze的內存,緩存從雙口塊ram1中讀取的數據段。ddr3通過多端口內存控制器mpmc連接到microblaze內核。microblaze軟核通過塊ram控制器來讀寫雙口塊ram。microblaze通過雙口塊ram1的控制器從塊ram1讀取邊緣坐標數據;microblaze通過雙口塊ram2的控制器向雙口塊ram2寫入動態標志物的質心坐標數據。在本發明中,兩個雙口塊ram都是用一個端口用來讀,另一個端口用來寫。塊ram1的端口a是寫入邊緣坐標數據數據的端口,與fpga圖像處理模塊相連。端口b是讀出邊緣坐標數據數據的端口,與塊ram1控制器的輸入信號端口相連;塊ram2端口a是寫入動態標志物的質心坐標數據的端口,與塊ram2控制器的輸出信號端口相連。端口b是讀出質心坐標數據的端口,也與切換模塊相連。
在microblaze中通過讀數據函數xio_in32讀取出雙口塊ram1中的所有邊緣坐標數據存儲到ddr3中。microblaze軟核通過連通域快速檢測算法,只需遍歷一次ddr3中的邊緣坐標數據段矩陣,就可以實時計算出整幀圖像中的所有動態標志物的質心坐標,算法過程如下:
(1)對數據進行初始化,total表示一共有多少個數據段。i表示計數數據段的個數,初始化為1,即從第一個數據段開始判斷。n表示當前一共有多少個動態標志物連通域,初始化為1。j表示當前判斷的是第幾個動態標志物的連通域。初始為1。row_num[j]表示第j個動態標志物占有多少行,初始化為1。mark_num表示一共計算了多少個動態標志物的質心坐標。初始化為0。
(2)判斷當前數據段個數i是否小于等于total。若不滿足條件,依次計算出當前n個動態標志物質心坐標,再把mark_num與n和的值賦給mark_num,結束一幀圖像所有動態標志物的坐標計算。若滿足條件,則對j賦初值1,即對當前已有的n個連通域逐一進行判斷。
(3)判斷j是否小于等于n,不滿足,說明第i個數據段不在當前的n個動態標志物連通域內,而在一個新的連通域內,增加當前連通域個數,將n的值加1。計算第n個新連通域在x和y方向上的像素,再把i的值加1,對下一個數據段進行循環判斷。直到i的值大于total,計算出整幀動態標志物質心坐標。
(4)若j小于等于n,則判斷第i個數據段是否在第j個動態標志物的連通域內,若滿足,把第j個連通域在x和y方向上的像素分別累加。再把row_num[j]加1,變量i加1,對下一個數據段進行循環判斷,直到i大于total。
(5)當第i個數據段不屬于第j個動態標志物的連通域時,判斷是否隔行。
1)隔行,即當前數據段的縱坐標數據與第j個連通域的最后一行縱坐標數據的差值大于2,則后面的數據段都不在第j個連通域內,因此計算出第j個連通域的質心坐標,mark_num個數累加1。刪除第j個連通域,用后一個(第j+1)連通域的數據覆蓋掉前一個(第j個)連通域的數據,直到用最后一個(第n個)連通域覆蓋掉第n-1個連通域的數據。連通域個數n減1。計算j減1后,再用j加1,即判斷當前第i個數據段是否在當前第j個動態標志物的連通域內。
2)不隔行,直接判斷當前第i個數據段是否在下一個動態標志物的連通域,計算j=j+1,對下一個連通域進行判斷。繼續循環判斷,直到i大于total。
根據連通域快速檢測算法,計算出整幀圖像中的所有動態標志物的質心坐標,并把計算出的質心坐標數據存儲到ddr3中,再通過寫數據函數xio_out8將計算出的質心坐標數據寫入到雙口塊ram2中,計算結果經過切換模塊后,輸入到fpga的fifoip核中緩存,fifo另一端連接的是千兆網端口。
fpga切換模塊輸入端是濾波后的圖像數據和動態標志物的質心坐標數據。當接收到顯示圖像的命令時,切換模塊把圖像數據通過千兆網發送到上位機上進行圖像的實時顯示;在接收到顯示坐標命令時,切換模塊把動態標志物的質心坐標數據通過千兆網傳輸到上位機實時顯示動態坐標的軌跡。
本發明的有益結果:
(1)采用iic總線對cmos圖像傳感器進行配置。
(2)本發明基于fpga的快速并行處理的特點,在fpga中實現對圖像數據采集和處理以及計算動態標志物質心坐標的功能,不但簡化結構,而且實時性好、處理速度快。而傳統運動捕捉系統只能在對圖像數據采集存儲后,再交由后端進行處理,對圖像數據實時處理能力差。
(3)本發明的快速連通域檢測算法,算法復雜度非常低,為o(n)。對所有的數據只遍歷一次就實現對整幀圖像中所有的動態標志物質心坐標的計算,從而保證了系統的實時性。傳統算法復雜度高,為o(n2),計算量大、耗時多。
(4)本發明算法實現了對幀率100為幀分辨率為1280×720的圖像實時顯示功能和最多實時計算并顯示200多個動態標志物坐標的功能。實現對高幀高分辨率多個動態標志物質心坐標的實時捕捉,實用性好。
附圖說明
圖1為本發明的整體流程示意圖。
圖2為cmos圖像傳感器的電路連接圖。
圖3為microblaze與fpga數據交換連接圖。
圖4為提取動態標志物邊緣坐標數據流程圖。
圖5為本發明連通域快速檢測算法流程圖。
圖6為本發明傳感器實時顯示圖像。
圖7為本發明二值化后的圖像。
圖8為本發明實時計算200多個動態標志物的質心坐標圖像。
具體實施方式
以下結合本發明的技術方案與附圖對本發明包含的步驟分別進行詳細完整的描述。
步驟一,cmos圖像傳感器電路連接
xilinx公司的fpga通過iic總線的sclk時鐘和sdata數據信號向將cmos圖傳感器的寄存器中寫入設置的參數。包括工作模式、圖像和增益的大小等設置。fpga還向傳感器提供12.5mhz的主輸入時鐘extclk,然后通過傳感器的片上鎖相環倍頻成96mhz的像素時鐘pixclk。fpga還要為其提供曝光觸發信號trigger,用來控制圖像幀率,每當trigger為低電平時,就會觸發一幀圖像,低電平時間的長短決定曝光時間的長短。圖像傳感器把輸出的圖像數據dout、輸出像素時鐘pixclk、幀有效信號fv和行有效信號lv等信號傳輸到fpga上。通過兩排插針將fpga與cmos圖像傳感器連接起來。如附圖2所示。
步驟二,fpga圖像處理模塊對數據進行并行處理
xilinx公司的fpga輸入圖像接口接收來自傳感器的輸出信號。fpga的圖像處理模塊一邊對圖像數據進行均值濾波,把濾波后的數據輸出到切換模塊,一邊并行處理提取出動態標志物的邊緣坐標數據,如附圖4所示,過程如下:
(1)首先對圖像中的像素灰度值進行二值化處理。將每幀圖像中的所有像素的灰度值都分別與閾值進行比較。比閾值大,置為1,否則為0。定義一個4位wire型變量mark_state,用來表示四個連續像素的二值化后的結果。
(2)當mark_state的值為4'b0001,當前的圖像列坐標為左邊緣坐標x1。當mark_state的值為4'b1110時,當前圖像的列坐標為右邊緣坐標x2,當前的行坐標為縱坐標y。把這三個數據寫成數據段(x1,x2,y)的形式。
(3)檢測到右邊緣時把雙口塊ram1的寫使能信號bram_wen置為1,開始向塊ram1輸入數據信號bram_data中依次寫入x1、x2和y。然后把bram_wen置0。重復檢測右邊緣,直到把整幀圖像中所有動態標志物的邊緣坐標數據全部檢測出來。并且把所有的數據段數據存入塊雙口塊ram1中。
步驟四,microblaze嵌入式軟核與fpga的數據交換
ddr3作為microblaze的內存,緩存從雙口塊ram1中讀取的數據段。ddr3通過多端口內存控制器mpmc連接到microblaze內核。microblaze軟核通過塊ram控制器來讀寫雙口塊ram。microblaze通過雙口塊ram1的控制器從塊ram1讀取邊緣坐標數據;microblaze通過雙口塊ram2的控制器向雙口塊ram2寫入動態標志物的質心坐標數據。在本發明中,兩個雙口塊ram都是用一個端口用來讀,另一個端口用來寫。如附圖3所示,塊ram1的端口b是寫入邊緣坐標數據數據的端口,與fpga圖像處理模塊相連。端口a是讀出邊緣坐標數據數據的端口,與塊ram1控制器的輸入信號端口相連;塊ram2端口a是寫入動態標志物的質心坐標數據的端口,與塊ram2控制器的輸出信號端口相連。端口b是讀出質心坐標數據的端口,也與切換模塊相連。
在microblaze中通過讀數據函數xio_in32讀取出雙口塊ram1中的所有邊緣坐標數據存儲到ddr3中。microblaze軟核中連通域快速檢測算法的流程圖,如附圖5所示,只需要遍歷一次ddr3中的邊緣坐標數據段,實時計算出每幀圖像中所有動態標志物的質心坐標,把計算出的質心坐標數據存儲到ddr3中,再通過寫數據函數xio_out8將坐標計算結果寫入到雙口塊ram2中,計算結果經過fpga的圖像或坐標顯示切換模塊,輸入到fpga的fifoip核中緩存,fifo另一端連接的是千兆網端口。
當接收到上位機實時顯示圖像的命令時,fpga的圖像或坐標顯示切換模塊把圖像數據通過千兆網發送到上位機上進行圖像的實時顯示,如附圖6所示為顯示的圖像,附圖7所示為顯示的二值化后的圖像;在接收到顯示坐標命令時,fpga的圖像或坐標顯示切換模塊把動態標志物的質心坐標數據通過千兆網傳輸到上位機實時顯示動態質心的坐標,如附圖8所示。