《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 一種用CPLD實現視頻信號運動檢測的方法
一種用CPLD實現視頻信號運動檢測的方法
虞衛峰, 唐慧明
摘要: 介紹了一種采用CPLD外加SRAM存儲芯片,對ITU601格式數字視頻信號進行運動檢測的方法。在此基礎上,給出了一個實現這種檢測方法的例子。在這個例子中,用Philips公司的視頻處理芯片SAA7113的輸出信號作為數字視頻源,用Lattice公司的CPLD芯片LC4128V對視頻信號進行運動檢測。
Abstract:
Key words :

  摘  要: 介紹了一種采用CPLD外加SRAM存儲芯片,對ITU601格式數字視頻信號進行運動檢測的方法。在此基礎上,給出了一個實現這種檢測方法的例子。在這個例子中,用Philips公司的視頻處理芯片SAA7113的輸出信號作為數字視頻源,用Lattice公司的CPLD芯片LC4128V對視頻信號進行運動檢測。

  關鍵詞: 運動檢測  CPLD  數字視頻信號

  在數字錄像、數字監控等領域內,人們通常只對場景內存在的物體運動感興趣。在這種情況下,需要對輸入的視頻信號進行預處理,識別場景中是否存在物體運動,也就是進行運動檢測,然后再決定是否做進一步的處理,例如錄像、報警等。對于錄像系統,通過運動檢測,能夠避免不必要的數字錄像,有效地減少系統所需存儲空間;同時可以加快檢索速度,提高資料有效性。對于監控系統,運動檢測是一種監視場景信息的有效手段。

  很多數字視頻信號處理系統通常會選用DSP芯片作為主處理芯片。由于DSP對數字信號的處理是通過編程實現各種算法的,只通過軟件就可以方便地加入某些功能,因此沒有必要添加額外的硬件來完成運動檢測。但是有很多系統,由于各種原因需要選用其它芯片來完成視頻信號的處理,例如華邦的W9968x系列芯片,由硬件完成信號的處理,其算法已經被固化在芯片的內部電路中,不能隨意更改。這一類芯片功能比較單一,但速度快、價格便宜,通常可以作為某些系統的專用芯片。對于這種情況,就需要考慮用另外的方法來實現運動檢測。本文介紹的用CPLD進行運動檢測的方法就是針對這一類情況的。該方法是通過附加一片CPLD芯片和一片SRAM芯片構成一個低成本的運動檢測模塊的。

1 運動檢測原理

  運動檢測的實現方法有硬件實現的也有軟件實現的,但基本思想大同小異,都是對相隔一定時間的兩幀視頻數據進行抽樣,并對抽樣數據進行比較,如果比較結果顯示這兩幀數據存在比較大的差異,那么就認為數據輸入場景中存在物體的運動,反之就認為沒有運動存在。

  本文介紹的用CPLD實現運動檢測的方法也是基于這種思想,但和一般的實現方法有所不同,其實現方法有一定的特色。

通常情況下,在實現上述思想的過程中,需要兩個緩存區分別存放兩幀抽樣數據,然后對這兩幀數據進行比較并對比較結果進行統計,最后得出比較結果。這樣做需要較大的SRAM作為緩存,而且往往需要單片機或者DSP對CPLD進行控制,并將其作為兩幀數據的比較器。這樣,運動檢測模塊的獨立性會受到限制,而且CPLD的功能只是一個抽樣控制器。

  本文提出的方法只對一幀抽樣數據進行緩存,在對第二幀數據進行抽樣時讀取第一幀中與此刻抽樣的數據相對應的緩存數據,并將兩者進行比較,用一個計數器記錄比較結果,如果差值超過閾值,計數器加一,否則不加。當這個計數值超過某一個規定數值的時候,就認為輸入視頻數據中存在著物體運動。這樣做的好處是需要的緩存區較小,而且CPLD可以單獨對數據進行處理,提高運動檢測模塊的獨立性,運動檢測模塊可以單獨調試。

2 用CPLD實現運動檢測

  下面通過實例說明用CPLD實現運動檢測的過程,并給出部分VHDL程序。在這個實例中,模擬視頻信號從CCD攝像頭輸入,經過SAA7113芯片預處理后,輸出數字視頻信號。該信號分作兩路:一路輸入到CPLD進行運動檢測,另一路則輸入到芯片W99682,對信號進行JPEG壓縮等進一步處理。

  示例中用到的CPLD是Lattice公司的LC4128V-75T100C,它具有128個宏單元、7.5ns的延時。SRAM芯片是ISSI公司的63LV1024,其容量為128K×8bit,具有10ns的延時。CPLD檢測到運動后,通過中斷,要求W99682對信號做進一步處理。其系統結構圖如圖1(省略了部分與運動檢測無關的元件)所示。

 

2.1 SAA7113的輸出信號

  SAA7113是Philips公司推出的一款功能強大的視頻信號預處理芯片,最基本的功能是模/數轉換,輸出的數字視頻信號符合ITU601標準。ITU601是長寬比為4:3和16:9的數字電視信號標準,它對數字電視信號的各項參數進行了詳細的描述和規范。在我國,通常采用的都是4:2:2采樣格式、PAL制式、長寬比為4:3的數字電視信號。SAA7113的輸出信號就是指這一格式的信號。這種格式信號的主要特征是:

  (1)有三個正交分量:亮度分量Y、色度分量Cb和Cr。

  (2)25幀/秒的幀率,每幀兩場,每幀掃描625行。

  (3)對于亮度分量Y,每行抽樣864次,對于色度分量Cr和Cb,每行抽樣432次。

  (4)8bit或者10bit的PCM編碼。

  (5)量化:0和255用于同步;1到254表示抽樣結果的PCM碼;對于亮度分量Y,16表示黑色,235表示白色;對于色度分量Cb或者Cr,128表示沒有色度。

  (6)有三個信號用于同步輸出數據:行同步信號SHS(15.6kHz)、場同步信號SVS(50Hz)和象素數據同步信號SPCLK(27MHz)。

  包括消隱期在內,每幀數據掃描625行,每行抽樣864個象素,因此總的分辨率是864×625。一幀數據分作奇偶兩場,從上一幀的624行到本幀的310行是奇場,其中上幀624行到本幀22行是奇場消隱期,從23行到310行是奇場有效行;從本幀311行到623行是偶場,其中311到335行是偶場消隱期,336到623行為偶場有效行。圖2是一幀的示意圖。

 

  對于幀內的每一行,共有864個象素,其中從第0個到第719個為有效象素,共計720個,從720個到863個為消隱期象素。每個象素都抽取Y分量,每兩個象素則抽取一個Cr和一個Cb分量。圖3是幀內一行以及象素抽樣數據排列格式的示意圖。表格第一行是亮度分量Y,第二行是色度分量Cr,第三行是色度分量Cb。

 

2.2 抽樣

  從SAA7113視頻輸出數據格式的介紹可以看到,保存完整的一幀數據(包括消隱期數據在內)需要864×625×2=1.08×106Byte的SRAM,需要1M以上的存儲空間,這顯然是不可取的,必須對幀數據進行抽樣。本文介紹的方法的抽樣規則如下:

  (1)抽取一幀數據的奇場或者偶場。做比較的兩場抽樣數據必須取自相同的場次,或者同為奇場或者同為偶場,否則就沒有可比性。

  (2)對連續的8幀抽取第2幀和第8幀進行比較。被抽樣的兩幀之間必須有一定的時間間隔,間隔太短或者太長都會影響檢測的靈敏度。

  (3)對一場數據抽取有效行中的奇數行,從場同步信號有效邊沿開始對行同步信號計數,直到下一個場同步信號為止。從23行到310行是有效行,共144個奇數行。

  (4)對被抽取的行,取其亮度分量Y。根據圖3中象素數據的排列順序,從象素數據有效開始,偶數的象素數據脈沖同步的是亮度分量Y。

  對于以上的抽樣規則,有必要說明一下。最終的抽樣數據并非全部都是有效數據,其中還包括了一部分消隱期的數據。這樣做是可以理解的,因為運動檢測的結果是根據兩幀被抽樣數據的差值來判定的,雖然消隱期的數據是無效的,但是每次消隱期的數據是相同的,兩次抽樣數據相減結果是零,并不會影響結果的判定。之所以對一場的行進行抽樣,主要是為了減小抽樣數據量,使數據總量不超過128K SRAM的容量。

  如果要保證抽樣數據全部都是有效數據,那么必須利用輸入的象素數據同步脈沖SPCLK、場同步信號SVS和行同步信號SHS對抽樣時刻做嚴格的同步。這需要消耗額外的CPLD資源,而效果卻不一定好。

根據以上規則,實際抽樣的數據量為:864×144=124416Byte,需要的SRAM容量為128K。

2.3 程序

  下面給出實現以上過程的一部分VHDL程序。

  sram_write_control:process(store_field,valid,spclk2,line_counter)

  begin

         writing<=valid and spclk2 and spclk and store_field and line_counter(0);

  end process;

  sram_read_control:process(compare_field,valid,spclk2,line_counter)

  begin

         reading<=valid and compare_field and spclk2 and line_counter(0);

  end process;

  這兩個進程用于控制SRAM的讀寫信號,reading和writing正好和SRAM的讀寫信號反相。Valid變量指示當前輸入的行是否為需要采樣的有效行,spclk是象素數據同步脈沖,spclk2是它的二分頻,用于指示當前輸入數據是否為亮度分量Y。line_counter(0)=1表示奇數行。store_field和compare_field分別指示本場數據是否需要保存或者需要比較。

  update_data_bus:process(store_field,valid,ccd_data)

  begin

         if(store_field=‘1’and valid=‘1’)then

           data_sram<=ccd_data;

         else

    data_sram<=“ZZZZZZZZ”;

         end if;

  end process;

    在抽樣第一幀數據的時候,直接把數字視頻信號輸入到SRAM的數據總線上,寫操作信號由writing控制。其它時候,數據總線上輸出高阻。

  update_data_reg:process(spclk,ccd_data,spclk2,compare_field,

  valid,data_sram)

  begin

         if(spclk'event and spclk=‘0’)then

                if(compare_field=‘1’and valid=‘1’and spclk2=‘1’)then

                      data_sram_reg<=data_sram;

                      if(ccd_data<=threshold)then

                            data_reg1<=“00000000”;

                            data_reg2<=ccd_data+threshold;      

                      elsif(ccd_data>=255-threshold)then

                            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的象素同步脈沖的下跳邊沿是象素數據的有效邊沿,進程在compare_field=1時,一方面把抽樣數據讀入,用寄存器保存用于比較的數據的上限和下限;另一方面從SRAM讀入對應數據存入寄存器data_sram_reg,這兩個操作為比較數據做好準備。threshold是一個閾值,這里取16,當前后兩次抽樣差值超過threshold時就認為這兩個抽樣數據是不等的。在輸入數據接近0或者255的時候,需要做特殊處理,避免整型數溢出,影響比較結果。

  compare_data:process(spclk2,valid,compare_field)

  begin

         if(spclk2'event and spclk2=‘0’)then

                if(compare_field=‘0’)then

                     pixels<=“0000000000”;

                elsif(valid='1')then

                       if(data_sram_reg<=data_reg1 or data_sram_reg>=data_reg2)then

                            pixels<=pixels+1;

                       end if;

                end if;

         end if;

  end process;

  compare_data進程在抽樣的間隔(輸入為色度分量Cr或者Cb時)對前后兩次抽樣的數據進行比較,如果比較結果超過允許值,計數器pixels加1,否則不加。

  motion_detect:process(pixels)

  begin

         if(pixels>max_pixels)then

                int0<=‘1’;

         else

               int0<=‘0’;

         end if;

  end process;

  max_pixels是一個閾值,表示一幀數據中允許出現的不相等抽樣數據的最大數目,當計數器pixels超過max_pixels時,就認為檢測到了物體運動,CPLD將int0輸出管腳置高,向處理器請求中斷。這里max_pixels取600,它可以根據需要設置適當的值。

  當CCD攝像頭前有物體晃動時,CPLD的int0管腳會連續產生高電平脈沖,這說明運動檢測模塊已經正常工作起來,同時另一路視頻信號經過W99682處理后輸送到電視屏幕上,以便觀察運動的場景。如果晃動攝像頭本身,只要微小的晃動就可以看到類似的效果,因此用這種CPLD實現運動檢測是可行的。

  事實上,還可以利用同樣的原理對CMOS攝像頭的輸入信號進行運動檢測。

  當然這種檢測方法本身也有不足之處,最主要的一點是實際檢測到的只是攝像頭前光線亮度的變化,不能智能地判斷引起這種變化的原因,也不能判別運動物體的形狀。另一方面,從實驗結果來看,有時候會出現誤判;當運動物體離攝像頭比較遠時,檢測的靈敏度也會降低,出現漏判。誤判和漏判是一對矛盾,在實際應用中需要根據實際情況反復調試,選出最佳的閾值,減少這兩種情況的發生。

 

參考文獻

1 Recommendation ITU-R BT.601-5. ITU Organization,1995

2 SAA7113H 9-bit Video Input Processor. Philips Semiconductors, 1999

3 馬小斌,金連文,尹俊勛.利用DSP和CPLD增加數據采集的可擴展性.電子技術應用, 2003;29(3)

4 吳繁紅,井新宇.用CPLD/FPGA設計A/D采樣控制器.電子工程師, 2002(2)

5 張華春,雷 宏,孫長瑜.基于CPLD的ADSP21060與SDRAM接口設計.信號處理, 2002(6)

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产亚洲精品激情久久| 一区二区三区四区国产精品| 欧美日韩无遮挡| 欧美刺激午夜性久久久久久久| 欧美在线你懂的| 亚洲欧美日本日韩| 亚洲一区二区免费在线| 亚洲最新合集| 一个色综合av| 中文高清一区| 亚洲视频自拍偷拍| 亚洲深夜激情| 一区二区三区www| 在线综合亚洲| 亚洲午夜小视频| 亚洲一区二区三区精品在线观看| 在线视频精品一区| 亚洲一区二区三区四区中文| 一区二区三区四区五区视频| 亚洲图片激情小说| 亚洲一区在线播放| 午夜精品一区二区三区在线播放 | 国产精品久久久久aaaa樱花| 欧美色欧美亚洲另类二区| 欧美性大战xxxxx久久久| 国产精品成人播放| 国产免费观看久久| 国内精品伊人久久久久av影院| 在线日韩中文| 亚洲六月丁香色婷婷综合久久| 一区电影在线观看| 亚洲综合精品四区| 久久爱www久久做| 亚洲啪啪91| 亚洲天堂第二页| 欧美一区二区三区在| 久久一区二区三区国产精品 | 久久精品亚洲精品国产欧美kt∨| 亚洲国产精品传媒在线观看| 9人人澡人人爽人人精品| 在线视频精品一| 午夜综合激情| 久久青草久久| 欧美乱人伦中文字幕在线| 国产精品激情电影| 狠狠色综合网| 亚洲免费高清视频| 亚洲综合社区| 亚洲欧洲视频在线| 亚洲欧美制服中文字幕| 久久综合九色欧美综合狠狠| 欧美日韩国产免费观看| 国产精品视频xxxx| 在线成人免费观看| 亚洲视频福利| 亚洲第一精品夜夜躁人人躁| 一区二区三区高清视频在线观看| 欧美中文在线观看国产| 欧美大尺度在线观看| 国产精品色婷婷久久58| 精品成人a区在线观看| 一本在线高清不卡dvd| 久久精品色图| 亚洲欧美国产va在线影院| 美女999久久久精品视频| 欧美日韩精品久久久| 国产手机视频一区二区| 亚洲伦伦在线| 亚洲国产日韩精品| 午夜在线视频观看日韩17c| 欧美成人一区二区| 国产午夜精品全部视频在线播放| 亚洲精品欧美极品| 久久av一区二区三区| 亚洲网站视频福利| 久久综合色婷婷| 国产精品免费观看在线| 亚洲国产精品一区二区第四页av | 每日更新成人在线视频| 国产精品青草久久久久福利99| 亚洲黄色免费电影| 久久精品国产精品亚洲综合| 亚洲资源在线观看| 欧美激情第1页| 国模精品一区二区三区色天香 | 羞羞漫画18久久大片| 在线一区免费观看| 麻豆精品91| 国产一区二区久久精品| 在线一区亚洲| av不卡在线观看| 你懂的亚洲视频| 国外成人性视频| 午夜视频久久久久久| 亚洲欧美激情在线视频| 欧美日本三区| 亚洲欧洲一区二区在线观看| 亚洲高清一区二区三区| 久久不射中文字幕| 国产精品一区在线观看| 中文亚洲欧美| 中文亚洲免费| 欧美精品日韩三级| 亚洲高清视频一区| 亚洲国产婷婷香蕉久久久久久| 久久精品在线| 国产嫩草一区二区三区在线观看| 中国成人黄色视屏| 亚洲无线一线二线三线区别av| 欧美激情一区二区久久久| 在线电影欧美日韩一区二区私密| 欧美在线欧美在线| 久久精品30| 国产欧美日韩一区| 香蕉av777xxx色综合一区| 欧美一区二区三区免费观看视频| 国产精品久久久久久av福利软件| 99国产精品99久久久久久| 一区二区三区免费在线观看| 欧美日韩第一区| 亚洲毛片网站| 亚洲天堂av在线免费| 欧美三级在线播放| 亚洲视频在线观看三级| 亚洲欧美网站| 国产日韩综合| 久久精品亚洲乱码伦伦中文 | 国产精品视频内| 亚洲欧美怡红院| 久久久.com| 一区精品在线| 亚洲欧洲日韩在线| 欧美久久九九| 国产精品99久久久久久宅男| 亚洲欧美日韩第一区| 国产欧美日韩视频一区二区| 欧美中文在线字幕| 男女精品网站| 亚洲精品美女在线| 亚洲一区二区三区在线看| 国产精品你懂得| 欧美一区二区精品久久911| 久久久久久自在自线| 一区福利视频| 夜夜嗨一区二区| 国产精品乱子久久久久| 欧美一区二区女人| 牛牛影视久久网| 亚洲最新在线| 久久精品国产久精国产一老狼| 精品999日本| 亚洲少妇在线| 国产精品亚洲一区二区三区在线| 欧美一级黄色录像| 免费亚洲视频| 99视频精品全国免费| 欧美永久精品| 亚洲国产综合在线| 香蕉国产精品偷在线观看不卡| 国产一区清纯| 99热在线精品观看| 国产精品亚洲不卡a| 亚洲第一精品福利| 欧美日韩国语| 先锋影音久久久| 欧美电影在线免费观看网站| 一区二区国产精品| 久久久久综合| 一区二区免费在线视频| 久久久福利视频| 亚洲免费av片| 久久婷婷久久| 亚洲无亚洲人成网站77777 | 亚洲在线视频观看| 牛牛国产精品| 亚洲免费小视频| 欧美黄色视屏| 欧美亚洲一区在线| 欧美日韩三区四区| 久久国产精品久久久久久| 欧美网站在线观看| 亚洲国产精品视频| 国产精品免费视频xxxx| 亚洲国产一区二区在线| 国产精品美女久久久免费| 亚洲人成网站精品片在线观看| 国产美女高潮久久白浆| 99精品99| 狠狠色丁香婷婷综合影院| 亚洲午夜黄色| 亚洲成人影音| 久久国产精品亚洲77777| 日韩一区二区精品视频| 久久蜜桃精品| 中文日韩在线| 欧美国产精品日韩| 性欧美精品高清| 国产精品成人在线| 亚洲精品一区二区三区蜜桃久| 国产欧美一区二区三区国产幕精品|