一種用CPLD實現(xiàn)視頻信號運動檢測的方法 作者: 時間:2007-03-09 來源:網(wǎng)絡(luò) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢 收藏 摘要:介紹了一種采用CPLD外加SRAM存儲芯片,對ITU601格式數(shù)字視頻信號進行運動檢測的方法。在此基礎(chǔ)上,給出了一個實現(xiàn)這種檢測方法的例子。在這個例子中,用Philips公司的視頻處理芯片SAA7113的輸出信號作為數(shù)字視頻源,用Lattice公司的CPLD芯片LC4128V對視頻信號進行運動檢測。 關(guān)鍵詞:運動檢測 CPLD 數(shù)字視頻信號 在數(shù)字錄像、數(shù)字監(jiān)控等領(lǐng)域內(nèi),人們通常只對場景內(nèi)存在的物體運動感興趣。在這種情況下,需要對輸入的視頻信號進行預(yù)處理,識別場景中是否存在物體運動,也就是進行運動檢測,然后再決定是否做進一步的處理,例如錄像、報警等。對于錄像系統(tǒng),通過運動檢測,能夠避免不必要的數(shù)字錄像,有效地減少系統(tǒng)所需存儲空間;同時可以加快檢索速度,提高資料有效性。對于監(jiān)控系統(tǒng),運動檢測是一種監(jiān)視場景信息的有效手段。 很多數(shù)字視頻信號處理系統(tǒng)通常會選用DSP芯片作為主處理芯片。由于DSP對數(shù)字信號的處理是通過編程實現(xiàn)各種算法的,只通過軟件就可以方便地加入某些功能,因此沒有必要添加額外的硬件來完成運動檢測。但是有很多系統(tǒng),由于各種原因需要選用其它芯片來完成視頻信號的處理,例如華邦的W9968x系列芯片,由硬件完成信號的處理,其算法已經(jīng)被固化在芯片的內(nèi)部電路中,不能隨意更改。這一類芯片功能比較單一,但速度快、價格便宜,通??梢宰鳛槟承┫到y(tǒng)的專用芯片。對于這種情況,就需要考慮用另外的方法來實現(xiàn)運動檢測。本文介紹的用CPLD進行運動檢測的方法就是針對這一類情況的。該方法是通過附加一片CPLD芯片和一片SRAM芯片構(gòu)成一個低成本的運動檢測模塊的。 1 運動檢測原理 運動檢測的實現(xiàn)方法有硬件實現(xiàn)的也有軟件實現(xiàn)的,但基本思想大同小異,都是對相隔一定時間的兩幀視頻數(shù)據(jù)進行抽樣,并對抽樣數(shù)據(jù)進行比較,如果比較結(jié)果顯示這兩幀數(shù)據(jù)存在比較大的差異,那么就認為數(shù)據(jù)輸入場景中存在物體的運動,反之就認為沒有運動存在。 本文介紹的用CPLD實現(xiàn)運動檢測的方法也是基于這種思想,但和一般的實現(xiàn)方法有所不同,其實現(xiàn)方法有一定的特色。 通常情況下,在實現(xiàn)上述思想的過程中,需要兩個緩存區(qū)分別存放兩幀抽樣數(shù)據(jù),然后對這兩幀數(shù)據(jù)進行比較并對比較結(jié)果進行統(tǒng)計,最后得出比較結(jié)果。這樣做需要較大的SRAM作為緩存,而且往往需要單片機或者DSP對CPLD進行控制,并將其作為兩幀數(shù)據(jù)的比較器。這樣,運動檢測模塊的獨立性會受到限制,而且CPLD的功能只是一個抽樣控制器。 本文提出的方法只對一幀抽樣數(shù)據(jù)進行緩存,在對第二幀數(shù)據(jù)進行抽樣時讀取第一幀中與此刻抽樣的數(shù)據(jù)相對應(yīng)的緩存數(shù)據(jù),并將兩者進行比較,用一個計數(shù)器記錄比較結(jié)果,如果差值超過閾值,計數(shù)器加一,否則不加。當這個計數(shù)值超過某一個規(guī)定數(shù)值的時候,就認為輸入視頻數(shù)據(jù)中存在著物體運動。這樣做的好處是需要的緩存區(qū)較小,而且CPLD可以單獨對數(shù)據(jù)進行處理,提高運動檢測模塊的獨立性,運動檢測模塊可以單獨調(diào)試。 2 用CPLD實現(xiàn)運動檢測 下面通過實例說明用CPLD實現(xiàn)運動檢測的過程,并給出部分VHDL程序。在這個實例中,模擬視頻信號從CCD攝像頭輸入,經(jīng)過SAA7113芯片預(yù)處理后,輸出數(shù)字視頻信號。該信號分作兩路:一路輸入到CPLD進行運動檢測,另一路則輸入到芯片W99682,對信號進行JPEG壓縮等進一步處理。 示例中用到的CPLD是Lattice公司的LC4128V-75T100C,它具有128個宏單元、7.5ns的延時。SRAM芯片是ISSI公司的63LV1024,其容量為128K%26;#215;8bit,具有10ns的延時。CPLD檢測到運動后,通過中斷,要求W99682對信號做進一步處理。其系統(tǒng)結(jié)構(gòu)圖如圖1(省略了部分與運動檢測無關(guān)的元件)所示。 2.1 SAA7113的輸出信號 SAA7113是Philips公司推出的一款功能強大的視頻信號預(yù)處理芯片,最基本的功能是模/數(shù)轉(zhuǎn)換,輸出的數(shù)字視頻信號符合ITU601標準。ITU601是長寬比為43和169的數(shù)字電視信號標準,它對數(shù)字電視信號的各項參數(shù)進行了詳細的描述和規(guī)范。在我國,通常采用的都是422采樣格式、PAL制式、長寬比為43的數(shù)字電視信號。SAA7113的輸出信號就是指這一格式的信號。這種格式信號的主要特征是: (1)有三個正交分量:亮度分量Y、色度分量Cb和Cr。 (2)25幀/秒的幀率,每幀兩場,每幀掃描625行。 (3)對于亮度分量Y,每行抽樣864次,對于色度分量Cr和Cb,每行抽樣432次。 (4)8bit或者10bit的PCM編碼。 (5)量化:0和255用于同步;1到254表示抽樣結(jié)果的PCM碼;對于亮度分量Y,16表示黑色,235表示白色;對于色度分量Cb或者Cr,128表示沒有色度。 (6)有三個信號用于同步輸出數(shù)據(jù):行同步信號SHS(15.6kHz)、場同步信號SVS(50Hz)和象素數(shù)據(jù)同步信號SPCLK(27MHz)。 包括消隱期在內(nèi),每幀數(shù)據(jù)掃描625行,每行抽樣864個象素,因此總的分辨率是864%26;#215;625。一幀數(shù)據(jù)分作奇偶兩場,從上一幀的624行到本幀的310行是奇場,其中上幀624行到本幀22行是奇場消隱期,從23行到310行是奇場有效行;從本幀311行到623行是偶場,其中311到335行是偶場消隱期,336到623行為偶場有效行。圖2是一幀的示意圖。 對于幀內(nèi)的每一行,共有864個象素,其中從第0個到第719個為有效象素,共計720個,從720個到863個為消隱期象素。每個象素都抽?。俜至?,每兩個象素則抽取一個Cr和一個Cb分量。圖3是幀內(nèi)一行以及象素抽樣數(shù)據(jù)排列格式的示意圖。表格第一行是亮度分量Y,第二行是色度分量Cr,第三行是色度分量Cb。 2.2 抽樣 從SAA7113視頻輸出數(shù)據(jù)格式的介紹可以看到,保存完整的一幀數(shù)據(jù)(包括消隱期數(shù)據(jù)在內(nèi))需要864%26;#215;625%26;#215;2=1.08%26;#215;106Byte的SRAM,需要1M以上的存儲空間,這顯然是不可取的,必須對幀數(shù)據(jù)進行抽樣。本文介紹的方法的抽樣規(guī)則如下: (1)抽取一幀數(shù)據(jù)的奇場或者偶場。做比較的兩場抽樣數(shù)據(jù)必須取自相同的場次,或者同為奇場或者同為偶場,否則就沒有可比性。 (2)對連續(xù)的8幀抽取第2幀和第8幀進行比較。被抽樣的兩幀之間必須有一定的時間間隔,間隔太短或者太長都會影響檢測的靈敏度。 (3)對一場數(shù)據(jù)抽取有效行中的奇數(shù)行,從場同步信號有效邊沿開始對行同步信號計數(shù),直到下一個場同步信號為止。從23行到310行是有效行,共144個奇數(shù)行。 (4)對被抽取的行,取其亮度分量Y。根據(jù)圖3中象素數(shù)據(jù)的排列順序,從象素數(shù)據(jù)有效開始,偶數(shù)的象素數(shù)據(jù)脈沖同步的是亮度分量Y。 對于以上的抽樣規(guī)則,有必要說明一下。最終的抽樣數(shù)據(jù)并非全部都是有效數(shù)據(jù),其中還包括了一部分消隱期的數(shù)據(jù)。這樣做是可以理解的,因為運動檢測的結(jié)果是根據(jù)兩幀被抽樣數(shù)據(jù)的差值來判定的,雖然消隱期的數(shù)據(jù)是無效的,但是每次消隱期的數(shù)據(jù)是相同的,兩次抽樣數(shù)據(jù)相減結(jié)果是零,并不會影響結(jié)果的判定。之所以對一場的行進行抽樣,主要是為了減小抽樣數(shù)據(jù)量,使數(shù)據(jù)總量不超過128K SRAM的容量。 如果要保證抽樣數(shù)據(jù)全部都是有效數(shù)據(jù),那么必須利用輸入的象素數(shù)據(jù)同步脈沖SPCLK、場同步信號SVS和行同步信號SHS對抽樣時刻做嚴格的同步。這需要消耗額外的CPLD資源,而效果卻不一定好。 根據(jù)以上規(guī)則,實際抽樣的數(shù)據(jù)量為:864%26;#215;144=124416Byte,需要的SRAM容量為128K。 2.3 程序 下面給出實現(xiàn)以上過程的一部分VHDL程序。 sram_write_controlprocessstore_fieldvalidspclk2line_counter begin writing<=valid and spclk2 and spclk and store_field and line_counter0 end process sram_read_controlprocesscompare_fieldvalidspclk2line_counter begin reading<=valid and compare_field and spclk2 and line_counter0 end process 這兩個進程用于控制SRAM的讀寫信號,reading和writing正好和SRAM的讀寫信號反相。Valid變量指示當前輸入的行是否為需要采樣的有效行,spclk是象素數(shù)據(jù)同步脈沖,spclk2是它的二分頻,用于指示當前輸入數(shù)據(jù)是否為亮度分量Y。line_counter0=1表示奇數(shù)行。store_field和compare_field分別指示本場數(shù)據(jù)是否需要保存或者需要比較。 update_data_busprocessstore_fieldvalidccd_data begin ifstore_field=‘1’and valid=‘1’then data_sram<=ccd_data else data_sram<=“ZZZZZZZZ” end if end process 在抽樣第一幀數(shù)據(jù)的時候,直接把數(shù)字視頻信號輸入到SRAM的數(shù)據(jù)總線上,寫操作信號由writing控制。其它時候,數(shù)據(jù)總線上輸出高阻。 update_data_regprocessspclkccd_dataspclk2compare_field validdata_sram begin ifspclk'event and spclk=‘0’then ifcompare_field=‘1’and valid=‘1’and spclk2=‘1’then data_sram_reg<=data_sram ifccd_data<=thresholdthen data_reg1<=“00000000” data_reg2<=ccd_data+threshold elsifccd_data>=255-thresholdthen data_reg1<=ccd_data-threshold data_reg2<=“11111111” else data_reg1<=ccd_data-threshold data_reg2<=ccd_data+threshold end if end if end if end process SAA7113的象素同步脈沖的下跳邊沿是象素數(shù)據(jù)的有效邊沿,進程在compare_field=1時,一方面把抽樣數(shù)據(jù)讀入,用寄存器保存用于比較的數(shù)據(jù)的上限和下限;另一方面從SRAM讀入對應(yīng)數(shù)據(jù)存入寄存器data_sram_reg,這兩個操作為比較數(shù)據(jù)做好準備。threshold是一個閾值,這里?。保叮斍昂髢纱纬闃硬钪党^threshold時就認為這兩個抽樣數(shù)據(jù)是不等的。在輸入數(shù)據(jù)接近0或者255的時候,需要做特殊處理,避免整型數(shù)溢出,影響比較結(jié)果。 compare_dataprocessspclk2validcompare_field begin ifspclk2'event and spclk2=‘0’then ifcompare_field=‘0’then pixels<=“0000000000” elsifvalid='1'then ifdata_sram_reg<=data_reg1 or data_sram_reg>=data_reg2then pixels<=pixels+1 end if end if end if end process compare_data進程在抽樣的間隔(輸入為色度分量Cr或者Cb時)對前后兩次抽樣的數(shù)據(jù)進行比較,如果比較結(jié)果超過允許值,計數(shù)器pixels加1,否則不加。 motion_detectprocesspixels begin ifpixels>max_pixelsthen int0<=‘1’ else int0<=‘0’ end if end process max_pixels是一個閾值,表示一幀數(shù)據(jù)中允許出現(xiàn)的不相等抽樣數(shù)據(jù)的最大數(shù)目,當計數(shù)器pixels超過max_pixels時,就認為檢測到了物體運動,CPLD將int0輸出管腳置高,向處理器請求中斷。這里max_pixels?。叮埃埃梢愿鶕?jù)需要設(shè)置適當?shù)闹怠?當CCD攝像頭前有物體晃動時,CPLD的int0管腳會連續(xù)產(chǎn)生高電平脈沖,這說明運動檢測模塊已經(jīng)正常工作起來,同時另一路視頻信號經(jīng)過W99682處理后輸送到電視屏幕上,以便觀察運動的場景。如果晃動攝像頭本身,只要微小的晃動就可以看到類似的效果,因此用這種CPLD實現(xiàn)運動檢測是可行的。 事實上,還可以利用同樣的原理對CMOS攝像頭的輸入信號進行運動檢測。 當然這種檢測方法本身也有不足之處,最主要的一點是實際檢測到的只是攝像頭前光線亮度的變化,不能智能地判斷引起這種變化的原因,也不能判別運動物體的形狀。另一方面,從實驗結(jié)果來看,有時候會出現(xiàn)誤判;當運動物體離攝像頭比較遠時,檢測的靈敏度也會降低,出現(xiàn)漏判。誤判和漏判是一對矛盾,在實際應(yīng)用中需要根據(jù)實際情況反復(fù)調(diào)試,選出最佳的閾值,減少這兩種情況的發(fā)生。 合成孔徑雷達相關(guān)文章:合成孔徑雷達原理
評論