DSP課程設(shè)計(jì)報(bào)告-人臉識(shí)別_第1頁
DSP課程設(shè)計(jì)報(bào)告-人臉識(shí)別_第2頁
DSP課程設(shè)計(jì)報(bào)告-人臉識(shí)別_第3頁
DSP課程設(shè)計(jì)報(bào)告-人臉識(shí)別_第4頁
DSP課程設(shè)計(jì)報(bào)告-人臉識(shí)別_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、DSP圖像處理與應(yīng)用課程設(shè)計(jì)基于DM642的人臉檢測(cè)與識(shí)別作者 學(xué)號(hào) 學(xué)院 電子信息工程學(xué)院 班級(jí) 電子1102 指導(dǎo)教師 時(shí)間 2013年12月 Contents1介紹22知識(shí)回顧22.1 奇偶場(chǎng)22.2 YUV色彩空間32.3 圖像緩存區(qū)33編程思路44設(shè)計(jì)方法44.1 圖像二值化54.2 人臉范圍的捕捉54.3 人臉識(shí)別算法64.4 名字顯示75實(shí)驗(yàn)結(jié)果96實(shí)驗(yàn)感想117附錄121 介紹隨著社會(huì)的不斷進(jìn)步以及各方面對(duì)于快速有效的自動(dòng)身份驗(yàn)證的迫切要求,生物特征識(shí)別技術(shù)在近幾十年中得到了飛速的發(fā)展。作為人的一種內(nèi)在屬性,并且具有很強(qiáng)的自身穩(wěn)定性及個(gè)體差異性,生物特征成為了自動(dòng)身份驗(yàn)證的最理

2、想依據(jù)。當(dāng)前的生物特征識(shí)別技術(shù)主要包括有:指紋識(shí)別,視網(wǎng)膜識(shí)別,虹膜識(shí)別,步態(tài)識(shí)別,靜脈識(shí)別,人臉識(shí)別等。與其他識(shí)別方法相比,人臉識(shí)別由于具有直接,友好,方便的特點(diǎn),使用者無任何心理障礙,易于為用戶所接受,從而得到了廣泛的研究與應(yīng)用。此次研究報(bào)告,我們以所學(xué)DSP圖像處理技術(shù)相關(guān)知識(shí)為背景,基于DM642芯片來實(shí)現(xiàn)對(duì)人臉的識(shí)別。實(shí)驗(yàn)的預(yù)期效果為,當(dāng)A同學(xué)出現(xiàn)在攝像頭前,屏幕上會(huì)顯示與其對(duì)應(yīng)的名字,當(dāng)B同學(xué)出現(xiàn)在攝像頭前,會(huì)顯示與其對(duì)應(yīng)的名字,而沒有人在攝像頭前會(huì)顯示無字,從而實(shí)現(xiàn)人臉檢測(cè)與識(shí)別。報(bào)告內(nèi)容安排大致如下,首先我們進(jìn)行所用知識(shí)進(jìn)行簡(jiǎn)要的回顧,其次是提出編程思路,緊接著我們對(duì)關(guān)鍵的設(shè)計(jì)

3、程序進(jìn)行詳細(xì)分析與解釋,之后是實(shí)驗(yàn)結(jié)果展示,最后是實(shí)驗(yàn)總結(jié)。2 知識(shí)回顧2.1 奇偶場(chǎng)PAL制式的模擬圖像轉(zhuǎn)換為數(shù)字圖像后包含576行*720列個(gè)像素,一幀圖像分解為奇數(shù)場(chǎng)和偶數(shù)場(chǎng)兩幅圖像 ,分別包含288行*720列個(gè)像素。一個(gè)場(chǎng)由幀中的奇數(shù)行組成,叫做奇場(chǎng),另一個(gè)場(chǎng)由幀中的偶數(shù)行組成,叫做偶場(chǎng)。圖2-1-1 奇偶場(chǎng)示意圖2.2 YUV色彩空間在彩色視頻信號(hào)傳輸中采用的YUV合成的方法。Y 代表亮度信息,U(Cb)代表藍(lán)色色差(就是藍(lán)色信號(hào)與亮度信號(hào)之間的差值),V(Cr)代表紅色色差。YCbCr是YUV的一個(gè)特例。Y是亮度值信號(hào),Cb、Cr是色差信號(hào)。圖像處理與傳輸中,只傳輸和存儲(chǔ)Y和Cb

4、、Cr值,而且Cb和Cr的分辨率可以比Y低。這就減少了表示圖像的數(shù)據(jù)量。在本圖像處理實(shí)驗(yàn)中采用YCbCr211的格式。各色彩分量之間相關(guān)性小,適于進(jìn)行處理操作。色差信號(hào)常做2:1 抽樣處理以節(jié)省帶寬。對(duì)于每2個(gè)像素,Y 用2 個(gè)字節(jié), Cb(藍(lán)色色差)取相同的值,用一個(gè)字節(jié),Cr (紅色色差)取相同的值,用一個(gè)字節(jié),平均每個(gè)像素2個(gè)字節(jié)。2.3 圖像緩存區(qū)圖像緩沖區(qū)包括圖像采集緩沖區(qū)、圖像臨時(shí)緩沖區(qū)和圖像顯示緩沖區(qū)。每個(gè)緩沖區(qū)包括圖像亮度緩沖區(qū)Y、圖像色度緩沖區(qū)Cb、圖像色度緩沖區(qū)Cr。其中色度緩沖區(qū)的大小是亮度緩沖區(qū)的一半,每個(gè)像素對(duì)應(yīng)的Y(亮度)、Cb、Cr(色度)值在緩沖區(qū)中位置序號(hào)如下

5、。像素亮度值在Y(亮度)緩沖區(qū)中的序號(hào)=緩沖區(qū)的起始地址+所在行號(hào)*每行的像素?cái)?shù)+像素的列位置。像素色度值在Cb、Cr(色度)緩沖區(qū)中的序號(hào)=緩沖區(qū)的起始地址+所在行號(hào)*每行的像素?cái)?shù)/2+像素的列位置/2。3 編程思路圖3-1 編程思路首先我們對(duì)屏幕中的圖像進(jìn)行二值化,把符合人膚色的像素點(diǎn)設(shè)置為白色,把背景設(shè)置為黑色。然后我們進(jìn)行人臉范圍的捕捉,找出白色區(qū)域的左邊界begX,右邊界endX,上邊界begY,下邊界endY,然后根據(jù)找出的邊界畫出邊框。最后我們利用某種算法實(shí)現(xiàn)人臉的識(shí)別,我們主要有兩個(gè)編程思路,第一種是求出矩形框中白色區(qū)域所占的比例來實(shí)現(xiàn)人臉的識(shí)別,另一種是通過分析臉的上邊界與下

6、邊界之間的長(zhǎng)度來實(shí)現(xiàn)人臉識(shí)別。識(shí)別完成后,根據(jù)識(shí)別的結(jié)果在屏幕上顯示識(shí)別出來的人的名字,從而實(shí)現(xiàn)人臉識(shí)別。4 設(shè)計(jì)方法本部分,我們對(duì)此次設(shè)計(jì)的關(guān)鍵程序進(jìn)行分析與解釋,主程序詳見附錄。4.1 圖像二值化程序如下,根據(jù)膚色的色差范圍把圖形二值化。根據(jù)經(jīng)驗(yàn),我們把當(dāng)像素點(diǎn)的藍(lán)色色差Cb大于77小于177并且紅色色差Cr大于133小于156時(shí),將此像素點(diǎn)視為膚色的顏色。因此我們把亮度設(shè)置為白色(0xff),不在膚色色差范圍內(nèi)的我們把亮度設(shè)置為黑色。由于色差Cb和Cr每?jī)蓚€(gè)像素點(diǎn)只占用一個(gè)字節(jié),而亮度Y每一個(gè)像素占用一個(gè)字節(jié),因此在本程序中我們只設(shè)置了一個(gè)i值,對(duì)于奇場(chǎng)來說,總像素點(diǎn)有720*288個(gè),

7、在此i值的大小為numLines*numPixels/4,即720*144,因此它可以表示奇場(chǎng)中的色差坐標(biāo)。同理偶場(chǎng)。我們通過判斷把tmpYbuffer+i*2和tmpYbuffer+i*2+1的值設(shè)置為白色或者黑色。另外,通過這種定義方法,我們可以在同一個(gè)對(duì)i的循環(huán)中實(shí)現(xiàn)對(duì)奇場(chǎng)和偶場(chǎng)的處理,并不需要在對(duì)列像素再做循環(huán)。for(i=0;i<numLines*numPixels/4;i+) if(*(Uint8 *)(tmpCbbuffer+i)>77) && (*(Uint8 *)(tmpCbbuffer+i)<177) &&(*(Uint8

8、*)(tmpCrbuffer+i)>133)&&(*(Uint8 *)(tmpCrbuffer+i)<156) (*(Uint8 *)(tmpYbuffer+i*2)=0xff; (*(Uint8 *)(tmpYbuffer+i*2+1)=0xff; (*(Uint8 *)(tmpYbuffer+i*2+numLines*numPixels/2)=0xff;(*(Uint8 *)(tmpYbuffer+i*2+1+numLines*numPixels/2)=0xff; else(*(Uint8 *)(tmpYbuffer+i*2)=0x00;(*(Uint8 *)(

9、tmpYbuffer+i*2+1)=0x00;(*(Uint8 *)(tmpYbuffer+i*2+numLines*numPixels/2)=0x00;(*(Uint8 *)(tmpYbuffer+i*2+1+numLines*numPixels/2)=0x00; 4.2 人臉范圍的捕捉如下程序是實(shí)現(xiàn)尋找人臉?biāo)诜秶淖筮吔纭⒂疫吔?、上邊界和下邊界。我們先?duì)行進(jìn)行循環(huán),在對(duì)同一行的列進(jìn)行循環(huán)。根據(jù)像素亮度條件找到膚色區(qū)域的最右邊的點(diǎn)與膚色區(qū)域?qū)挾龋屪钣疫咟c(diǎn)對(duì)應(yīng)的j減去寬度則得到最左邊的點(diǎn)。同上下邊界。理尋找因此將找到最右邊的點(diǎn)將找到的左邊界的值放到begX里面,右邊界的值放到endX里面,

10、上邊界的值放到begY里面,下邊界的值放到endY里面。for (i=15 ;i<numLines/2-18;i+) for (j=10;j<numPixels-10;j+) if (*(Uint8 *)(tmpYbuffer+i*numPixels+j)=0xff) curnum+; if (curnum>pixelnum) pixelnum=curnum; begX=j-pixelnum; endX=j; c=begX; d=endX; curnum=0; pixelnum=0; curnum=0; /計(jì)算Y起點(diǎn)與終點(diǎn) for (j=10;j<numPixels-1

11、0;j+) for (i=15;i<numLines/2-18;i+) if (*(Uint8 *)(tmpYbuffer+i*numPixels+j)=0xff) /黑色 curnum+; if (curnum>pixelnum)pixelnum=curnum; begY=i-pixelnum; endY=i; e=begY; f=endY; curnum=0; 4.3 人臉識(shí)別算法方案一:如下程序是我們實(shí)現(xiàn)人臉識(shí)別的第一種方案,即求出所畫邊框中膚色像素所占的比例,通過該比例實(shí)現(xiàn)不同人之間的識(shí)別。如上,a為人臉在整個(gè)矩形框中所占的像素點(diǎn),b為矩形框的所有像素點(diǎn),g=(double

12、)a/(double)b即為人臉的范圍所占的比例,通過判斷該比例實(shí)現(xiàn)人臉識(shí)別。如上h為1時(shí),顯示“王”字,h為2時(shí),顯示“黃”字,h為3時(shí),顯示“無”字。此方法是個(gè)粗略的識(shí)別方法,因此實(shí)際操作中有一定識(shí)別誤差。/計(jì)算框內(nèi)白像素百分比 b=(d-c)*(f-e); for(j=e;j<f;j+) for(i=c;i<d;i+) if (*(Uint8 *)(tmpYbuffer+i*numPixels+j)=0xff) a+; g=(double)a/(double)b; if(g!=0) if(g<0.25) h=2; else h=1; elseh=3;方案二:如下程序是我

13、們實(shí)現(xiàn)人臉識(shí)別的第二種方案,即找出人臉的上邊界與下邊界之間的距離,即人臉的數(shù)值高度,從而判斷出不同的人,同樣,h為1時(shí),顯示“王”字,h為2時(shí),顯示“黃”字,h為3時(shí),顯示“無”字。這種方法要求人臉固定于屏幕的某個(gè)特定位置。g=f-e;if(g<10)h=3;else if(g>210)h=1;else h=2;4.4 名字顯示如下程序使我們的名字顯示部分,如下通過人臉識(shí)別過程中識(shí)別的h值顯示不同的名字,當(dāng)h為1時(shí),顯示“王”字,h為2時(shí),顯示“黃”字,h為3時(shí),顯示“無”字。本程序,我們定義的字體的大小為32*32,數(shù)組中每一個(gè)八位二進(jìn)制數(shù)值對(duì)應(yīng)八個(gè)像素點(diǎn),每次判斷八位數(shù)值中的一

14、位,當(dāng)其為1時(shí),在屏幕上顯示黑色,為0時(shí)顯示白色。void NAME(int init_lie, int init_hang,int wenzi) unsignedint i=0,j=0, num=0,n=0;/static unsigned int num;unsigned char test_word=0x80,tre_coast=0x00;/while(F16x16num!='0')for(i=init_hang;i<init_hang+32;i+)for(j=init_lie;j<init_lie+32;j+) n=j-init_lie;if(j=init_

15、lie|(n%8=0)if(wenzi=1)tre_coast=wangnum;else if(wenzi=3)tre_coast=WUnum;else if(wenzi=2)tre_coast=huangnum;num+;if(test_word&tre_coast)*(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0x00;else *(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0xff;tre_coast=tre_coast<<1;num=0;for(i=numLines/2+init_han

16、g;i<numLines/2+init_hang+32;i+)for(j=init_lie;j<init_lie+32;j+) n=j-init_lie;if(j=init_lie|(n%8=0)if(wenzi=1)tre_coast=wangnum;else if(wenzi=2)tre_coast=huangnum;else if(wenzi=3)tre_coast=WUnum;num+;tre_coast=tre_coast<<1;if(test_word&tre_coast)*(Uint8 *)(tmpYbuffer + i*numPixels + j

17、) = 0x00;else *(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0xff;5 實(shí)驗(yàn)結(jié)果6 實(shí)驗(yàn)感想為期半個(gè)學(xué)期的DSP課程的學(xué)習(xí)就此告一段落,通過此次結(jié)課設(shè)計(jì),我們利用所學(xué)知識(shí),最終克服困難實(shí)現(xiàn)了??傮w來講,我們收獲頗豐。首先,通過此次結(jié)課設(shè)計(jì),我們又進(jìn)一步掌握利用DSP進(jìn)行圖像處理的方法,了解利用仿真軟件以及實(shí)驗(yàn)箱的對(duì)DSP圖像的相關(guān)設(shè)計(jì)過程,特別是實(shí)驗(yàn)中所實(shí)現(xiàn)的圖像二值化、人臉捕捉,畫邊框,顯示名字等功能,無不體現(xiàn)著課堂中所學(xué)關(guān)于圖像采集、閾值分割以及圖像處理的相關(guān)知識(shí),可以說這次結(jié)課設(shè)計(jì)就是對(duì)這半個(gè)學(xué)期所學(xué)內(nèi)容的很好總結(jié)。其次,此次設(shè)計(jì)我

18、們并非一帆風(fēng)順,我們選擇題目以后,收集了多方面的資料進(jìn)行查閱,并及時(shí)交流討論,通過這個(gè)過程,我們對(duì)所學(xué)知識(shí)有了更加多面的理解。比如關(guān)于奇偶場(chǎng)圖像處理這一塊,上課的時(shí)候雖然老師給過例程,但是通過我們查找的很多資料進(jìn)行參考后有了更加簡(jiǎn)單的算法,可以說這給予了我們的學(xué)習(xí)的動(dòng)力??傊?,結(jié)合著我們的所學(xué)理論知識(shí),我們對(duì)于本次設(shè)計(jì)所用的相關(guān)知識(shí)有了更加深入的理解。當(dāng)然,通過這次研討,我們也存在著遺憾,那就是關(guān)于程序在BIOS上的實(shí)現(xiàn)還沒有完成。我們?cè)?jīng)做過嘗試,因?yàn)榭紤]到BIOS是個(gè)更加底層的系統(tǒng),它更面向硬件,因此處理速度更快。但是,我們卻遇到了諸如不能合適地建立臨時(shí)緩存區(qū)這個(gè)問題,我們也請(qǐng)教過老師,但

19、是由于所學(xué)知識(shí)的局限性以及設(shè)計(jì)截止日期的緊迫性,我們最終還是選擇不在BIOS上實(shí)現(xiàn)了。通過此課程的學(xué)習(xí)我們已經(jīng)對(duì)DSP圖像處理萌生了興趣,在今后的學(xué)習(xí)中我們一定會(huì)在多做嘗試。最后,衷心感謝高海林老師長(zhǎng)達(dá)半個(gè)學(xué)期的實(shí)驗(yàn)講授以及對(duì)本設(shè)計(jì)的指導(dǎo)!7 附錄/*/* Copyright 2004 by SEED Incorporated.*/* All rights reserved. Property of SEED Incorporated.*/* Restricted rights to use, duplicate or disclose this code are*/* granted thr

20、ough contract. */* */*/#include <csl.h>#include <csl_emifa.h>#include <csl_i2c.h>#include <csl_gpio.h>#include <csl_irq.h>#include <csl_chip.h>#include <csl_dat.h>#include "iic.h"#include "vportcap.h"#include "vportdis.h"#includ

21、e "sa7121h.h"#include "TVP51xx.h"#include "seeddm642.h" const unsigned char WU=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xE0,0x0F,0xFF,0xFF,0xF0,0x04,0x03,0x80,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0

22、x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x10,0x00,0x03,0x00,0x38,0x3F,0xFF,0xFF,0xFC,0x30,0x03,0x60,0x00,0x00,0x03,0x60,0x00,0x00,0x07,0x60,0x00,0x00,0x06,0x60,0x00,0x00,0x06,0x60,0x00,0x00,0x0E,0x60,0x00,0x00,0x0C,0x60,0x00,0x00,0x0C,0x60,0x00,0x00,0x18,0x60,0x08,0x00,0x38,0x60,0x08,0x00,0x30,0

23、x60,0x08,0x00,0x60,0x60,0x08,0x00,0xC0,0x60,0x0C,0x03,0x80,0x60,0x1E,0x07,0x00,0x7F,0xFC,0x1C,0x00,0x3F,0xF8,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;/*-黃-*/ const unsigned char huang=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x1C,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0

24、x70,0x0F,0xFF,0xFF,0xF0,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x18,0x7F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFE,0x00,0x01,0x80,0x00,0x01,0x01,0x80,0x80,0x01,0xFF,0xFF,0xC0,0x01,0x81,0x81,0xC0,0x01,0x81,0x81,0x80,0x01,0x81,0x81,0x80,0x01,0x81,0x81,0x80,0x01,0xFF,0xFF,0x80,0x01,0x81,0x81,0

25、x80,0x01,0x81,0x81,0x80,0x01,0x81,0x81,0x80,0x01,0xFF,0xFF,0x80,0x01,0x98,0x01,0x80,0x00,0x3C,0x1C,0x00,0x00,0x78,0x07,0x80,0x00,0xE0,0x03,0xE0,0x03,0x80,0x00,0xF0,0x0E,0x00,0x00,0x70,0x18,0x00,0x00,0x30,0x00,0x00,0x00,0x00, ;/*-王-*/const unsigned char wang=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x

26、00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x70,0x0F,0xFF,0xFF,0xF8,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0xC0,0x07,0xFF,0xFF,0xE0,0x

27、03,0xFF,0xFF,0xE0,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x18,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,;E

28、MIFA_Config Seeddm642ConfigA =0x00052078,/*gblctl EMIFA(B)global control register value */*將CLK6、4、1使能;將MRMODE置1;使能EK2EN,EK2RATE*/0xffffffd3,/*cectl0 CE0 space control register value*/*將CE0空間設(shè)為SDRAM*/0x73a28e01,/*cectl1 CE1 space control register value*/*Read hold: 1 clock;MTYPE : 0000,選擇8位的異步接口Read

29、 strobe :001110;14個(gè)clock寬度TA:2 clock; Read setup 2 clock;Write hold :2 clock; Write strobe: 14 clockWrite setup :7 clock-14c/1c-/ */0x22a28a22, /*cectl2 CE2 space control register value*/0x22a28a42, /*cectl3 CE3 space control register value*/0x57115000, /*sdctl SDRAM control register value*/0x000008

30、1b, /*sdtim SDRAM timing register value*/0x001faf4d, /*sdext SDRAM extension register value*/0x00000002, /*cesec0 CE0 space secondary control register value*/0x00000002, /*cesec1 CE1 space secondary control register value*/0x00000002, /*cesec2 CE2 space secondary control register value*/0x00000073 /

31、*cesec3 CE3 space secondary control register value*/;I2C_Config SEEDDM642IIC_Config = 0, /* master mode, i2coar;采用主模式 */ 0, /* no interrupt, i2cimr;只寫,不讀,采用無中斷方式*/ (20-5), /* scl low time, i2cclkl; */ (20-5), /* scl high time,i2cclkh; */ 1, /* configure later, i2ccnt;*/ 0, /* configure later, i2csar

32、;*/ 0x4ea0, /* master tx mode, */ /* i2c runs free, */ /* 8-bit data + NACK */ /* no repeat mode */ (75-1), /* 4MHz clock, i2cpsc */;CHIP_Config SEEDDM642percfg = CHIP_VP2+CHIP_VP1+CHIP_VP0+CHIP_I2C;I2C_Handle hSeeddm642i2c;int portNumber;extern SA7121H_ConfParams sa7121hPAL45;extern SA7121H_ConfPar

33、ams sa7121hNTSC45;Uint8 vFromat = 0;Uint8 misc_ctrl = 0x6D;Uint8 output_format = 0x47;/ 地址為0 for cvbs port1,選擇復(fù)合信號(hào)做為輸入U(xiǎn)int8 input_sel = 0x00;/*地址為0xf,將Pin27設(shè)置成為CAPEN功能*/Uint8 pin_cfg = 0x02;/*地址為1B*/Uint8 chro_ctrl_2 = 0x14;/*圖像句柄的聲明*/VP_Handle vpHchannel0;VP_Handle vpHchannel1;VP_Handle vpHchannel2

34、;/*確定圖像的參數(shù)*/int numPixels = 720;/每行720個(gè)像素int numLines = 576;/每幀576行(PAL)double a=0;double b=0;int c=0;int d=0;int e=0;int f=0;double g=0;int h=0;void NAME(int init_lie, int init_hang,int wenzi);/*采集與顯示緩沖區(qū)的首址*/Uint32 capYbuffer = 0x80000000;Uint32 capCbbuffer = 0x800675c0;Uint32 capCrbuffer = 0x8009b

35、0a0;Uint32 disYbuffer = 0x80100000;Uint32 disCbbuffer = 0x801675c0; Uint32 disCrbuffer = 0x8019b0a0;Uint32 tmpYbuffer = 0x80200000;Uint32 tmpCbbuffer = 0x802675c0; Uint32 tmpCrbuffer = 0x8029b0a0;/*圖像格式標(biāo)志*/Uint8 NTSCorPAL = 0;extern far void vectors();extern volatile Uint32 capNewFrame;extern volati

36、le Uint32 disNewFrame;/*此程序可將四個(gè)采集口的數(shù)據(jù)經(jīng)過Video Port0送出*/void main()Uint8 addrI2C;int i,j;int pixelnum,curnum;int begX,endX,begY,endY;/*-*/* perform all initializations */*-*/*Initialise CSL,初始化CSL庫*/CSL_init();CHIP_config(&SEEDDM642percfg);/*-*/*EMIFA的初始化,將CE0設(shè)為SDRAM空間,CE1設(shè)為異步空間 注,DM642支持的是EMIFA,而

37、非EMIF*/EMIFA_config(&Seeddm642ConfigA);/*-*/*中斷向量表的初始化*/Point to the IRQ vector table IRQ_setVecs(vectors); IRQ_nmiEnable(); IRQ_globalEnable(); IRQ_map(IRQ_EVT_VINT1, 11); IRQ_map(IRQ_EVT_VINT0, 12); IRQ_reset(IRQ_EVT_VINT1); IRQ_reset(IRQ_EVT_VINT1); /*打開一個(gè)數(shù)據(jù)拷貝的數(shù)據(jù)通路*/ DAT_open(DAT_CHAANY, DAT_

38、PRI_LOW, DAT_OPEN_2D);/*-*/*進(jìn)行IIC的初始化*/hSeeddm642i2c = I2C_open(I2C_PORT0,I2C_OPEN_RESET);I2C_config(hSeeddm642i2c,&SEEDDM642IIC_Config);/*-*/*進(jìn)行TVP5150pbs的初始化*/*選擇TVP5150,設(shè)置第三通路*/GPIO_RSET(GPGC,0x0);/*將GPIO0不鑫狦PINT使用*/GPIO_RSET(GPDIR,0x1);/*將GPIO0做為輸出*/GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為高,選擇IIC1總線,

39、配置第二路,即為U21*/addrI2C = 0xBA >>1; _IIC_write(hSeeddm642i2c, addrI2C,0x00, input_sel); _IIC_write(hSeeddm642i2c, addrI2C,0x03, misc_ctrl); _IIC_write(hSeeddm642i2c, addrI2C,0x0D, output_format); _IIC_write(hSeeddm642i2c, addrI2C,0x0F, pin_cfg); _IIC_write(hSeeddm642i2c, addrI2C,0x1B, chro_ctrl_2

40、); /*回讀當(dāng)前攝像設(shè)備的格式*/ _IIC_read(hSeeddm642i2c, addrI2C,0x8c, &vFromat); vFromat = vFromat & 0xff;switch (vFromat)case TVP51XX_NTSCM:case TVP51XX_NTSC443:NTSCorPAL = 1;/*系統(tǒng)為NTSC的模式*/break;case TVP51XX_PALM:NTSCorPAL = 0;/*系統(tǒng)為PAL的模式*/break;default:NTSCorPAL = 2;/*系統(tǒng)為不支持的模式*/break;if(NTSCorPAL =2)

41、/*系統(tǒng)不支持的模式,重新配置*/for(;) /*-*/*進(jìn)行SAA7121H的初始化*/GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線,配置圖像輸出*/ addrI2C = 0xB8 >>1; /*選擇第0路的I2C的地址*/*將第0路的視頻輸入口的數(shù)據(jù)口設(shè)為高阻狀態(tài), 使能SCLK,將第27腳設(shè)為輸入*/_IIC_write(hSeeddm642i2c, addrI2C,0x03, 0x1);/*配置SAA7121H*/GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線,配置圖像輸出*/*初始化Video P

42、ort0*/*將Vedio Port1設(shè)為encoder輸出*/portNumber = 0;vpHchannel0 = bt656_8bit_ncfd(portNumber);for(i = 0; i < 100000; i +);SEEDDM642_rset(SEEDDM642_WDOGEN,2);addrI2C = 0x88 >>1; for(i =0; i<43; i+)if(NTSCorPAL = 1)_IIC_write(hSeeddm642i2c, addrI2C, (sa7121hNTSCi.regsubaddr), (sa7121hNTSCi.regv

43、ule);else_IIC_write(hSeeddm642i2c, addrI2C, (sa7121hPALi.regsubaddr), (sa7121hPALi.regvule);/*-*/*初始化Video Port1*/*將Vedio Port1設(shè)為采集輸入*/portNumber = 1;vpHchannel1 = bt656_8bit_ncfc(portNumber);bt656_capture_start(vpHchannel1);/*等待第一幀數(shù)據(jù)采集完成*/while(capNewFrame = 0)/*將數(shù)據(jù)存入顯示緩沖區(qū),并清采集完成的標(biāo)志*/capNewFrame =0

44、;/*啟動(dòng)顯示模塊*/bt656_display_start(vpHchannel0);j=0;/*建立顯示的實(shí)時(shí)循環(huán)*/for(;)/*當(dāng)采集區(qū)的數(shù)據(jù)已經(jīng)采集好,而顯示緩沖區(qū)的數(shù)據(jù)已空*/if(capNewFrame = 1)&&(disNewFrame = 1)/*將數(shù)據(jù)裝入顯示緩沖區(qū),并清采集完成的標(biāo)志*/capNewFrame =0;disNewFrame =0;for(i=0;i<numLines;i+)/*傳送Y緩沖區(qū)*/DAT_copy(void *)(capYbuffer + i * numPixels), (void *)(tmpYbuffer + i

45、* numPixels),numPixels);/*傳送Cb緩沖區(qū)*/DAT_copy(void *)(capCbbuffer + i * (numPixels >> 1), (void *)(tmpCbbuffer + i * (numPixels >> 1),numPixels>>1);/*傳送Cr緩沖區(qū)*/DAT_copy(void *)(capCrbuffer + i * (numPixels >> 1), (void *)(tmpCrbuffer + i * (numPixels >> 1),numPixels>>1); /*膚色過濾*/根據(jù) Cb、Cr 值,將tmpYbuffer的Y值分為兩部分for(i=0;i<numLines*numPixels/4;i+)/0x32a00/2 if(*(Uint8 *)(tmpCbbuffer+i)>77) && (*(Uint8 *)(tmpCbbuffer+i)<177) &&(*(Uint8 *)(tmpCrbuffer+i)>133)&&(*(Uint8 *)(tmpCrbuffer+i)<156) (*(Uint8 *)(tmpYbuffer+i*2)=0xff;

溫馨提示

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

評(píng)論

0/150

提交評(píng)論