2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  本科畢業(yè)設(shè)計(jì)(論文)</p><p><b>  ( 屆)</b></p><p>  論文題目 嵌入式立體圖像編碼中的碼率控制算法研究</p><p> ?。ㄓ⑽模?On Rate-control Algorithm For Embedded</p><p>  Stereo Imag

2、e Coding </p><p>  所在學(xué)院 電子信息學(xué)院 </p><p>  專業(yè)班級(jí) 電子信息工程 </p><p>  學(xué)生姓名 學(xué)號(hào) </p><p>  指導(dǎo)教師 職稱

3、 </p><p>  完成日期 年 月 日</p><p><b>  摘 要</b></p><p>  圖像編碼的主要目的是減少圖像的多余信息。立體圖像的編碼,簡(jiǎn)單講就是利用人的兩只眼睛在看圖片時(shí)的視覺差別,對(duì)同一張圖片分兩個(gè)視角進(jìn)行編碼。最后使通過兩個(gè)視角編碼的圖像合成一張圖像,即成為立

4、體圖像。立體圖像序列中的兩張圖片存在著相當(dāng)大的冗余,利用視差估計(jì)的方法編碼立體圖像,可以使一幅立體圖像編碼的效率大大提高。</p><p>  碼率控制是圖像編碼中的關(guān)鍵技術(shù)。在研究了H.264視頻編碼標(biāo)準(zhǔn)中的碼率控制技術(shù)后,本文利用了H.264中的幀層及宏塊層中的碼率控制技術(shù),對(duì)立體圖像編碼時(shí)的碼率進(jìn)行合理的控制。在碼率控制算法中采用了簡(jiǎn)化的MAD預(yù)測(cè)算法,并且使用了基于左圖的宏塊MAD匹配方式計(jì)算右圖的宏塊量

5、化參數(shù),使得編碼效率更高。最后本文采用了質(zhì)量可分級(jí)編碼方式產(chǎn)生具有可分級(jí)特性的嵌入式碼流。</p><p>  本文在理論分析的基礎(chǔ)上,采用了一幅灰度圖像對(duì)碼率控制算法進(jìn)行仿真。實(shí)驗(yàn)結(jié)果表明,在編碼圖像時(shí),使用碼率控制器相對(duì)于不使用碼率控制器產(chǎn)生的圖像實(shí)際比特?cái)?shù)更加接近目標(biāo)比特?cái)?shù)。并且,使用加入碼率控制器的編碼器對(duì)圖像進(jìn)行編碼,能夠使實(shí)際比特?cái)?shù)隨目標(biāo)比特?cái)?shù)的變動(dòng)而做相應(yīng)的改變。</p><p&

6、gt;  關(guān)鍵詞:立體圖像;H.264;碼率控制;精細(xì)可分級(jí);宏塊</p><p><b>  Abstract</b></p><p>  The basic principles of image coding is to reduce redundant information of the image. Simply speaking, the encodin

7、g of stereo image is to use the visual difference between the two eyes to see pictures to be encoded on the same picture in two perspectives. Finally, the image synthesis of an image encoded through two perspectives, nam

8、ely a stereo image. The two pictures of the stereo image in the sequence there is considerable redundancy, disparity estimation method of encoding stereo image can ma</p><p>  Rate control is a key technolog

9、y in image coding. After researching the rate control in H.264 video coding standard, textual algorithm use the frame layer and macroblock layer rate control technology on the stereo image coding to control the bit rate

10、reasonably. Using simplified macroblock MAD prediction method and MAD matching for right picture quantification parameter, textual algorithm make the coding more efficient.</p><p>  On the basis of theoretic

11、al analysis, this text use a gray value stereo image to simulation the rate control algorithm. The experimental results show that, as opposed to not use the bit rate controller, the image coder uses the rate controler ma

12、ke the bit rate closer to the target bit. And using the rate controller, the coder enable the actual number of bits corresponding change with changes in the target number of bits.</p><p>  Key Words: stereo

13、image; H.264; rate control; fine granular scalability; macroblock</p><p><b>  目 錄</b></p><p>  1 緒論- 1 -</p><p>  1.1 數(shù)字圖像及編碼標(biāo)準(zhǔn)- 1 -</p><p>  1.2 立體圖像-

14、1 -</p><p>  1.2.1 立體圖像概念- 1 -</p><p>  1.2.2 立體圖像編碼- 2 -</p><p>  1.3 碼率控制技術(shù)- 3 -</p><p>  1.3.1 碼率及碼率控制方式- 3 -</p><p>  1.3.2 經(jīng)典碼率控制技術(shù)- 3 -</p>

15、;<p>  1.3.3 碼率控制技術(shù)中的改進(jìn)方案- 4 -</p><p>  1.3.4 碼率控制技術(shù)總結(jié)及展望- 5 -</p><p>  2 H.264標(biāo)準(zhǔn)中的碼率控制技術(shù)- 7 -</p><p>  2.1 H.264碼率控制算法歷史- 7 -</p><p>  2.2 碼率控制基本原理- 7 -<

16、;/p><p>  2.2.1 CBR與VBR- 7 -</p><p>  2.2.2 熵編碼- 8 -</p><p>  2.2.3 碼率控制實(shí)質(zhì)- 9 -</p><p>  2.3 H.264中碼率控制技術(shù)分析- 9 -</p><p>  2.3.1 H.264碼率控制算法特點(diǎn)- 9 -</p&

17、gt;<p>  2.3.2 幀層碼率控制- 10 -</p><p>  2.3.3 基本單元層碼率控制- 10 -</p><p>  2.3.4 宏塊級(jí)碼率控制- 11 -</p><p>  3 嵌入式立體圖像編碼中的碼率控制算法- 12 -</p><p>  3.1 編碼流程- 12 -</p>

18、<p>  3.2 編碼器與碼率控制器- 13 -</p><p>  3.3 精細(xì)可分級(jí)嵌入式碼流- 15 -</p><p>  3.4 碼率控制基本步驟- 16 -</p><p>  3.5 碼率控制流程圖- 17 -</p><p>  3.6 碼率控制程序設(shè)計(jì)- 18 -</p><p&

19、gt;  3.6.1 編碼器- 18 -</p><p>  3.6.2 量化調(diào)整子函數(shù)- 22 -</p><p>  3.6.3 量化參數(shù)轉(zhuǎn)為量化步長(zhǎng)子函數(shù)- 22 -</p><p>  3.6.4 左圖宏塊MAD計(jì)算子函數(shù)- 23 -</p><p>  3.6.5 右圖宏塊MAD預(yù)測(cè)子函數(shù)- 24 -</p>

20、<p>  3.6.6 右圖宏塊MAD宏塊匹配取量化參數(shù)子函數(shù)- 24 -</p><p>  4 實(shí)驗(yàn)結(jié)果- 26 -</p><p>  致 謝- 28 -</p><p>  參考文獻(xiàn)- 29 -</p><p>  附錄一 科研論文- 31 -</p><p><b>  1

21、 緒論</b></p><p>  1.1 數(shù)字圖像及編碼標(biāo)準(zhǔn)</p><p>  數(shù)字圖像首次的出現(xiàn)是在報(bào)紙業(yè)。早在20世紀(jì)20年代,科學(xué)家利用Bartlane電纜圖片傳輸系統(tǒng),把大西洋兩邊傳送一幅圖片的時(shí)間從一個(gè)多星期減少到了3個(gè)小時(shí),為了用電纜傳輸圖片,首先要進(jìn)行圖像編碼[1]。</p><p>  目前主要的編碼標(biāo)準(zhǔn)有MPEG-1,MPEG-2,

22、MPEG-4,H.261,H.263,H.264等。(一)MPEG-1標(biāo)準(zhǔn)是有損壓縮,1992年成為國(guó)際標(biāo)準(zhǔn)。MPEG-1使用了DCT變換、量化等技術(shù)。傳輸率為1.5Mbits/sec,但是MPEG-1的壓縮比還不夠大且清晰度不夠高。(二)MPEG-2是在MPEG-1基礎(chǔ)上發(fā)展起來的,現(xiàn)在廣泛應(yīng)用在數(shù)字電視機(jī)機(jī)頂盒中,傳輸速率在3-10Mbit/秒。MPEG-2優(yōu)于以前的標(biāo)準(zhǔn)的地方是減少了圖像在信道內(nèi)傳輸?shù)念l帶。(三)MPEG-4在19

23、99年發(fā)布,在2000年成為國(guó)際標(biāo)準(zhǔn)。MPEG-4主要應(yīng)用于無線通信、電視電話、電子游戲等領(lǐng)域。(四)H.263標(biāo)準(zhǔn)是為適應(yīng)低碼率通信而設(shè)計(jì)出來的,主要用在電視會(huì)議等業(yè)務(wù)上。(五)H.264是最新、最有前途的視頻壓縮標(biāo)準(zhǔn),在2003年成為國(guó)際標(biāo)準(zhǔn)。H.264采用混合編碼結(jié)構(gòu),很好的提高了壓縮比。H.264有產(chǎn)生碼率低,圖像質(zhì)量高等優(yōu)點(diǎn)。H.264比H.263約一半的碼率,但是在碼率控制方面比其他標(biāo)準(zhǔn)困難。</p><

24、p><b>  1.2 立體圖像</b></p><p>  1.2.1 立體圖像概念</p><p>  簡(jiǎn)單講,立體圖像就是利用了人的兩只眼睛在看圖片時(shí)的視覺差別和光的折射原理,使兩張相同的圖像在同一平面內(nèi)產(chǎn)生立體感,即成為立體圖像。</p><p>  形成立體圖像的一種方法是視差立體法。人們?cè)谌粘I钪锌吹绞挛锒际蔷哂辛Ⅲw感的,因

25、為人兩眼之間的距離使得兩只眼睛在看同一事物時(shí)的角度有所差別,正式這種差別,使同一事物在人腦意識(shí)中形成了立體感。因此要想得到立體圖像,就要從兩個(gè)不同的角度取同一圖像,然后在同一平面合成一幅立體圖像。</p><p>  如圖1-1所示,立體圖像的特點(diǎn)是較平面圖像更為形象、逼真,具有真實(shí)的三維立體感,給人身與畫中的視覺享受。</p><p>  圖1-1 立體圖像</p>&l

26、t;p>  1.2.2 立體圖像編碼</p><p>  圖像編碼的基本原理是減少圖像的多余信息或是利用人眼的視覺特性進(jìn)行編碼。早在20世紀(jì)80年代,許多學(xué)者就提出利用同一張圖片的兩張圖片編碼形成立體圖像,每張圖片都當(dāng)做平面圖片進(jìn)行編碼。這樣的編碼方式完全將兩張圖片獨(dú)立開來,沒有考慮到兩張圖片之間固有的聯(lián)系,因此編碼數(shù)據(jù)量比較大,編碼的效率也不高。</p><p>  到了90年代,

27、一些學(xué)者發(fā)現(xiàn)了立體圖像序列中的兩張圖片存在著相當(dāng)大的冗余,利用計(jì)算機(jī)消除這些冗余,可以使一幅立體圖像編碼的效率大大提高。編碼流程如圖1-2所示。首先,對(duì)左圖進(jìn)行單獨(dú)的編碼,然后對(duì)右圖選用一定大小的塊進(jìn)行分割,再利用均方誤差準(zhǔn)則(MSE)或絕對(duì)差準(zhǔn)則(MAE)在左圖中選出最合適的塊,然后編碼兩個(gè)塊之間的視差矢量和立體殘差圖像。也可以這么理解,首先對(duì)原圖像進(jìn)行視差估計(jì),然后得到右圖像基于左圖像的預(yù)測(cè)圖像,然后是對(duì)右圖像減去這個(gè)預(yù)測(cè)圖像的差值

28、圖像進(jìn)行編碼。通過這樣的編碼方式對(duì)立體圖像編碼,產(chǎn)生的碼率本身就比原來單獨(dú)對(duì)兩張圖像進(jìn)行編碼產(chǎn)生的碼率低,再使用碼率控制器對(duì)編碼數(shù)據(jù)進(jìn)行控制,完全可以使立體圖像的在低碼率帶寬下傳輸。</p><p>  圖1-2 立體圖像編碼的基本方法</p><p>  1.3 碼率控制技術(shù)</p><p>  1.3.1 碼率及碼率控制方式</p><p&

29、gt;  碼率就是數(shù)據(jù)傳輸時(shí),單位時(shí)間傳送的位數(shù),常用的單位是千位每秒(kbps)。簡(jiǎn)單地講,碼率就是單位時(shí)間內(nèi)的取樣率。碼率越高,編碼出來的圖像與原始圖像越接近,圖像的細(xì)節(jié)越豐富。相反,則編碼出來的圖像越粗糙。</p><p>  常用的碼率控制方式有兩種,一種是CBR(固態(tài)碼率)和一種是VBR(動(dòng)態(tài)碼率)。CBR的帶寬和碼率都是固定不變的,而且實(shí)現(xiàn)方式相對(duì)比較簡(jiǎn)單。VBR在碼率控制增強(qiáng)了算法的靈活性,但是這種

30、算法對(duì)碼率控制的準(zhǔn)確性要求很高。</p><p>  1.3.2 經(jīng)典碼率控制技術(shù)</p><p>  在碼率控制算法中經(jīng)典的算法有MPEG-2的TM5,H.263的TMN8以及MPEG-4的VM8以及H.264的JVT系列碼率控制算法[2]四種。</p><p> ?。?)TM5碼率控制算法[3]。TM5算法使用在MPEG-2標(biāo)準(zhǔn)中,該算法總共分為三步:首先對(duì)幀層

31、進(jìn)行目標(biāo)比特分配;接著,進(jìn)行宏塊級(jí)的碼率控制;最后,使用了自適應(yīng)量化。TM5的缺陷是當(dāng)視頻信號(hào)不是典型序列的時(shí)候,幀層比特分配會(huì)有一些偏差,同幀中的編碼質(zhì)量會(huì)有不太均勻的情況。</p><p> ?。?)TMN8碼率控制算法[4]。TMN8算法使用在H.263標(biāo)準(zhǔn)中,該算法總共分為兩步:首先對(duì)幀層分配目標(biāo)比特;其次,在宏塊級(jí)使用自適應(yīng)量化。TMN8的優(yōu)點(diǎn)是估計(jì)出比特?cái)?shù)較為準(zhǔn)確,但是它對(duì)I幀的設(shè)計(jì)太簡(jiǎn)單了。VM8和

32、TM5不一樣的地方是它沒有在宏塊級(jí)使用碼率分配,因此這種算法不能夠用在需要宏塊級(jí)碼率控制的場(chǎng)合。</p><p> ?。?)VM8碼率控制算法[5]。VM8算法使用在MPEG-4標(biāo)準(zhǔn)中。該算法總共分為三步:首先統(tǒng)計(jì)出已經(jīng)編碼好了的幀的平均量化參數(shù);其次,利用線性回歸方法計(jì)算出當(dāng)前幀的模型參數(shù);最后,使用二次R-Q模型估計(jì)出幀的量化參數(shù)。這種算法使用了前幀估計(jì)后幀的方法,在前后幀的差別很大的時(shí)候就會(huì)出現(xiàn)較大誤差,使

33、圖像質(zhì)量下降。</p><p> ?。?)H.264采用JVT2 G012提案[6]中的算法。其步驟為:首先,使用流量阻塞等模型計(jì)算出當(dāng)前幀的目標(biāo)比特?cái)?shù);其次,將剩下的比特?cái)?shù)平均分配給還未編碼的單元;然后,使用前面一幀中MAD值預(yù)測(cè)當(dāng)前幀的MAD值。最后,率失真優(yōu)化。這種算法的不足在于最后兩個(gè)步驟出現(xiàn)了一個(gè)奇怪的循環(huán):在對(duì)當(dāng)前幀的預(yù)測(cè)時(shí)需要的量化系數(shù)在后一步率失真優(yōu)化中才能得到,因此使碼率控制的難度加大。<

34、/p><p>  1.3.3 碼率控制技術(shù)中的改進(jìn)方案</p><p>  針對(duì)碼率控制原有的模型中表現(xiàn)出來的種種不足,許多學(xué)者紛紛提出自己的改進(jìn)方案。目的是為了使實(shí)際碼率更接近目標(biāo)碼率,使圖像質(zhì)量和碼率之間有很好的平衡。</p><p>  一些學(xué)者從幀層復(fù)雜度的角度實(shí)現(xiàn)目標(biāo)比特的分配,進(jìn)而實(shí)現(xiàn)碼率控制的優(yōu)化。這種方法的關(guān)鍵是找到能夠精準(zhǔn)的描述幀的復(fù)雜度的指標(biāo)。因此選

35、取何種指標(biāo)來描述幀的復(fù)雜度是眾多學(xué)者爭(zhēng)論的一個(gè)方面。采用不同的指標(biāo)描述幀的復(fù)雜度,會(huì)影響到分配給幀的目標(biāo)碼率,采用更為合理的指標(biāo)作為幀的復(fù)雜度的描述,可以使目標(biāo)碼率分配更加合理的同時(shí)不會(huì)使圖像質(zhì)量降低。文獻(xiàn)[7]將幀的運(yùn)動(dòng)量大小作為其復(fù)雜度的描述,對(duì)運(yùn)動(dòng)量大的幀分配較多比特,對(duì)運(yùn)動(dòng)量小的幀分配較少比特。文獻(xiàn)[8]用P幀亮度分量的MAD比率和YUV三分量的均值相對(duì)變化的和來表示圖像復(fù)雜度。文獻(xiàn)[9]用P幀亮度分量的MAD比率來表示圖像復(fù)雜

36、度來分配碼率。文獻(xiàn)[10]從緩沖狀況角度引入圖像復(fù)雜度,根據(jù)緩沖區(qū)的狀況確定分配每一幀的目標(biāo)比特?cái)?shù),避免了對(duì)復(fù)雜圖像分配過多的碼率。</p><p>  另有一些學(xué)者結(jié)合幀的復(fù)雜度,從編碼客觀條件如緩沖區(qū)的狀況、帶寬狀況角度對(duì)目標(biāo)碼率進(jìn)行優(yōu)化分配。文獻(xiàn)[11]就是利用各幀的復(fù)雜度和目標(biāo)緩沖區(qū)狀況作為比特分配的參考條件。文獻(xiàn)[12]改變了傳統(tǒng)目標(biāo)緩沖的級(jí)別來設(shè)置平滑PSNR值波動(dòng),然后對(duì)目標(biāo)碼率進(jìn)行分配。文獻(xiàn)[13

37、]定義了信道帶寬寬裕度來表示實(shí)際帶寬和編碼復(fù)雜度的關(guān)系,并且使用這個(gè)量來控制目標(biāo)碼率的分配。這些算法考慮到了編碼時(shí)緩沖區(qū)由于前面幀碼率過高而溢出的情況和信道帶寬的實(shí)時(shí)狀況,及時(shí)對(duì)編碼做出調(diào)整,使碼率控制更加靈活。</p><p>  一些算法是根據(jù)幀的位置不同來實(shí)現(xiàn)碼率控制的優(yōu)化。文獻(xiàn)[14]提出了一種基于P幀所在位置進(jìn)行比特分配的算法。文獻(xiàn)[15]提出了一種針對(duì)幀的空間位置及其復(fù)雜度對(duì)目標(biāo)比特進(jìn)行分配的算法。這

38、些算法的控制精度都很高,并且充分利用了視頻序列的空間相關(guān)性。</p><p>  文獻(xiàn)[16]根據(jù)人眼視覺特性與幀差,并結(jié)合圖像的相對(duì)復(fù)雜度,對(duì)各幀分配比特?cái)?shù)。使用這種算法產(chǎn)生的實(shí)際碼率更加接近目標(biāo)碼率,并且使各幀的峰值信噪比的波動(dòng)減小。</p><p>  從上述的改進(jìn)方案中看,在碼率控制時(shí),如何使實(shí)際碼率和目標(biāo)碼率更加匹配并保證圖像質(zhì)量不發(fā)生明顯變化是眾多學(xué)者在改進(jìn)算法時(shí)所要考慮的問題

39、。從幀的復(fù)雜度考慮,很好的區(qū)分了各幀對(duì)碼率的需求高低,合理的分配了目標(biāo)碼率,但是使用何種幀復(fù)雜度描述方式可以使碼率控制更加精準(zhǔn),效果更加突出,未有學(xué)者能夠給出最終的定論。然而結(jié)合編碼時(shí)的緩沖區(qū)狀態(tài)和帶寬狀況對(duì)碼率控制進(jìn)行調(diào)整,能夠很好的對(duì)編碼外部條件做出反應(yīng),但是上述算法中沒有結(jié)合更多的外部條件使算法的適應(yīng)性更強(qiáng)。</p><p>  1.3.4 碼率控制技術(shù)總結(jié)及展望</p><p> 

40、 從上節(jié)的改進(jìn)方案中看,在碼率控制時(shí),如何使實(shí)際碼率和目標(biāo)碼率更加匹配并保證圖像質(zhì)量不發(fā)生明顯變化是眾多學(xué)者在改進(jìn)算法時(shí)所要考慮的問題。從幀的復(fù)雜度考慮,很好的區(qū)分了各幀對(duì)碼率的需求高低,合理的分配了目標(biāo)碼率,但是使用何種幀復(fù)雜度描述方式可以使碼率控制更加精準(zhǔn),效果更加突出,未有學(xué)者能夠給出最終的定論。然而結(jié)合編碼時(shí)的緩沖區(qū)狀態(tài)和帶寬狀況對(duì)碼率控制進(jìn)行調(diào)整,能夠很好的對(duì)編碼外部條件做出反應(yīng),但是上述算法中沒有結(jié)合更多的外部條件使算法的適

41、應(yīng)性更強(qiáng)。</p><p>  MPEG-1,MPEG-2,H.264/AVC等視頻編碼標(biāo)準(zhǔn),都只對(duì)最后的碼流的語法語義做了定義,而對(duì)編碼的算法沒有什么要求,因此對(duì)碼率控制的算法的優(yōu)化有很大空間和靈活性?,F(xiàn)今圖像編碼算法比原有的算法在碼率控制上有了很大的提高,但在控制碼率后,對(duì)圖像質(zhì)量的提高并沒有做出優(yōu)化。結(jié)合人體生物特性(人眼視覺特性等)進(jìn)行碼率控制將成為視頻編碼的趨勢(shì)之一,碼率控制的優(yōu)化可以結(jié)合人眼的視覺盲區(qū)

42、,對(duì)一些不影響人的主觀感受的信息進(jìn)行有選擇性的去除或減少碼率。在碼率控制的同時(shí),增強(qiáng)人眼比較敏感的圖像信息,可以使視頻更加的真實(shí),更加迎合人的主觀感受,使觀看者有身臨其境的感覺。</p><p>  2 H.264標(biāo)準(zhǔn)中的碼率控制技術(shù)</p><p>  2.1 H.264碼率控制算法歷史</p><p>  碼率控制在數(shù)字圖像及視頻編碼中具有極其重要的作用,基于碼

43、率控制的無可代替的重要性,各種視頻編碼標(biāo)準(zhǔn)都提出并采用了適合本標(biāo)準(zhǔn)的碼率控制策略。如:H.263標(biāo)準(zhǔn)中的TMN11,MPEG-2標(biāo)準(zhǔn)中的TM5以及MPEG-4中的VM8等。從H.264標(biāo)準(zhǔn)頒布以來,有兩種比較典型的碼率控制算法提案:TM5中的JVT-F086和JVT-G012。</p><p>  JVT-F086算法采用的是二次編碼方式,具有相當(dāng)高的算法復(fù)雜度,并且碼率輸出的控制也有較大的誤差。首先,設(shè)定一個(gè)量

44、化參數(shù)進(jìn)行率失真優(yōu)化,同時(shí)碼率控制器根據(jù)最佳編碼模式估算出宏塊的最佳編碼量化參數(shù),如果這個(gè)量化參數(shù)與預(yù)設(shè)定的量化參數(shù)超過一定大小,就調(diào)整量化參數(shù),再次進(jìn)行率失真優(yōu)化。</p><p>  JVT-G012算法使用了基本單元和線性模型,并借鑒了MPEG-4中的碼率控制模型,提高了碼率控制的準(zhǔn)確性,并且采用了JVT-F086算法更加簡(jiǎn)便的一次編碼方式,極大的降低了編碼的復(fù)雜度,使JVT-G012算法的實(shí)現(xiàn)更為的簡(jiǎn)單,

45、也因此,JVT-G012算法確立了H.264碼率控制算法的基本方法。</p><p>  2.2 碼率控制基本原理</p><p>  2.2.1 CBR與VBR</p><p>  在1.3.1節(jié)提到了碼率控制的兩種基本方式,即CBR(固態(tài)碼率)和VBR(動(dòng)態(tài)碼率)。CBR是一種閉環(huán)碼率控制方式(如圖2-1所示),這種方式的目標(biāo)碼率是不變的,通過對(duì)網(wǎng)絡(luò)帶寬,圖像的

46、復(fù)雜程度等編碼外部條件的時(shí)時(shí)檢測(cè),動(dòng)態(tài)的調(diào)整量化參數(shù)Q使編碼得到的碼率固定不變。VBR是一種開環(huán)碼率控制方式(如圖2-2所示),這種方式的目標(biāo)碼率是時(shí)時(shí)變動(dòng)的,可以更加靈活的適應(yīng)帶寬的變化,并保證圖像質(zhì)量。</p><p>  圖2-1 閉環(huán)碼率控制方式</p><p>  圖2-2 開環(huán)碼率控制方式</p><p><b>  2.2.2 熵編碼&l

47、t;/b></p><p>  熵編碼是視頻編碼過程中的關(guān)鍵技術(shù),是無損編碼方式中的一種,即通過編碼后生成的碼流可以經(jīng)過解碼無失真地恢復(fù)出原來的數(shù)據(jù)。熵編碼算法的實(shí)質(zhì)是:通過對(duì)一幅圖像中的像素值的統(tǒng)計(jì),算出其概率,然后用較短碼字表示概率大的像素值,用較長(zhǎng)碼字表示概率小的像素值,這樣就降低了整個(gè)圖像的總的碼字長(zhǎng)度,減少了圖像的空間冗余,節(jié)省了編碼的碼率,提高了編碼效率。熵編碼的使用使的碼率控制器能夠更為輕易的

48、得到實(shí)際碼率的信息,對(duì)碼率控制效率有了一定的提高。</p><p>  H.264中采用了兩種熵編碼方式:一種是上下文自適應(yīng)變長(zhǎng)編碼方式(CAVLC),另一種是上下文自適應(yīng)二進(jìn)制算術(shù)編碼方式(CABAC)。CABAC算法雖然運(yùn)算的復(fù)雜度比其他算法的要大,但是使用CABAC算法可以有效的適應(yīng)碼率的變化和視頻圖像的內(nèi)容變化,而且編碼的效率比其他算法高。</p><p>  2.2.3 碼率控制

49、實(shí)質(zhì)</p><p>  視頻圖像數(shù)據(jù)的特點(diǎn)是由一系列連續(xù)的圖像構(gòu)成的,這些圖像內(nèi)容的復(fù)雜程度是不同的,對(duì)于復(fù)雜程度不同的圖像使用同一個(gè)量化參數(shù)進(jìn)行編碼,必將使產(chǎn)生的數(shù)據(jù)比特?cái)?shù)隨著圖像內(nèi)容的復(fù)雜程度而變化,也就會(huì)使視頻圖像的PSNR(峰值信噪比,一種評(píng)價(jià)圖像的客觀標(biāo)準(zhǔn))波動(dòng)較大,這必將使圖像數(shù)據(jù)的傳輸和保存帶來很大的麻煩。 </p><p>  碼率控制器就是通過對(duì)圖像復(fù)雜度、產(chǎn)生的比特?cái)?shù)

50、、網(wǎng)絡(luò)帶寬及緩沖區(qū)等編碼環(huán)境的綜合考慮,通過合理的調(diào)配方式,調(diào)整編碼使用的量化參數(shù),從而合理有效的調(diào)節(jié)圖像視頻的實(shí)際碼率,使得視頻圖像的PSNR值的波動(dòng)減小,可以使視頻圖像的數(shù)據(jù)有效的在信道中傳輸。</p><p>  如圖2-3所示,碼率控制器是聯(lián)系緩沖區(qū)狀況和量化之間的一個(gè)反饋,通過對(duì)量化參數(shù)的調(diào)節(jié),從而達(dá)到控制碼率的作用。具體的碼率控制策略,根據(jù)需要達(dá)到效果不同而有差異。</p><p&

51、gt;  圖2-3 碼率控制原理圖</p><p>  2.3 H.264中碼率控制技術(shù)分析</p><p>  2.3.1 H.264碼率控制算法特點(diǎn)</p><p>  H.264碼率控制算法使用的是JVT-G012提案中的三層碼率控制方案,即幀層碼率控制、GOP層碼率控制、宏塊層碼率控制。H.264碼率控制算法還使用了對(duì)MAD的線性模型。MAD線性模型是一種

52、對(duì)MAD通過數(shù)學(xué)公式進(jìn)行估計(jì)預(yù)測(cè)的方式。當(dāng)前處理的幀中的基本單元的MAD通過前面一個(gè)幀的相同位置的MAD通過同一的線性模型進(jìn)行估計(jì)。線性模型由公式(2-1)[17]可見。</p><p><b>  (2-1)</b></p><p>  其中表示當(dāng)前單元的MAD值,表示前一幀相同位置的單元的MAD值。a和b是常數(shù),初始值a規(guī)定為1,b規(guī)定為0。在每個(gè)單元編碼完成后,

53、相應(yīng)的a、b的值也更新一次。</p><p>  2.3.2 幀層碼率控制</p><p>  在視頻編解碼與傳輸中,幀有三種,分別是I幀、P幀、B幀。I幀是關(guān)鍵幀,在編解碼時(shí),使用較小的量化參數(shù)使I幀的信息盡最大可能的保留。B幀是雙向預(yù)測(cè)幀,是跟前后幀有著緊密的聯(lián)系的,在編解碼時(shí),B幀不包含整個(gè)畫面的信息,而是記錄著與前后幀的差別。P幀是只跟前面的P幀或是I幀有關(guān)聯(lián)的幀,記錄了與前面P幀

54、或是I幀的差別,同樣沒有完全整個(gè)畫面的信息。</p><p>  幀層的碼率控制主要涉及到對(duì)I、P、B三種幀的碼率分配和量化??紤]到I幀是關(guān)鍵幀,需要保留全部的信息,所以對(duì)I幀進(jìn)行完全編碼,以達(dá)到圖像信息的完整性。而B幀是雙向預(yù)測(cè)幀,而不被其他幀用來預(yù)測(cè),因此B幀使用比其他幀大的量化參數(shù),但是為了保證前后幀的圖像在視覺上沒有大的變化,前后幀的量化參數(shù)差不能大于2。對(duì)P幀的碼率控制則細(xì)分為基本單元層的碼率控制方式。

55、</p><p>  2.3.3 基本單元層碼率控制</p><p>  基本單元層碼率控制技術(shù)僅在P幀中使用。在這一級(jí)碼率控制之前,先要確定每個(gè)P幀的目標(biāo)碼率,然后通過對(duì)每個(gè)單元層MAD預(yù)測(cè),確定每個(gè)單元層的MAD,然后計(jì)算每個(gè)單元層的目標(biāo)比特,然后利用公式(2-2)二次率失真模型計(jì)算當(dāng)前基本單元的量化參數(shù)。確定量化參數(shù)后,計(jì)算出基本單元層比特,然后更新剩余比特。</p>

56、<p><b> ?。?-2)</b></p><p>  其中x、y是模型中的參數(shù),S表示編碼復(fù)雜度。</p><p>  2.3.4 宏塊級(jí)碼率控制</p><p>  在JVT-G012算法中,沒有采用宏塊級(jí)碼率控制,在同一基本單元中的宏塊使用相同的量化參數(shù),但是不同的宏塊的MAD是不同的,使用了統(tǒng)一的量化參數(shù)必然會(huì)使產(chǎn)生的圖片

57、質(zhì)量下降。因此充分利用宏塊之間的相關(guān)性,可以大大的優(yōu)化宏塊級(jí)的碼率控制。在宏塊級(jí)進(jìn)行碼率控制,首先要預(yù)測(cè)當(dāng)前塊的MAD,如果當(dāng)前塊是首個(gè)宏塊則用公式(2-3),如果當(dāng)前塊是最后一個(gè)塊,則采用公式(2-4),其余宏塊則采用公式(2-5)進(jìn)行預(yù)測(cè)。由宏塊預(yù)測(cè)公式看出,該算法大大降低了算法復(fù)雜度,提高了碼率控制的效率。</p><p> ?。?-3) (2-4)

58、 (2-5)</p><p>  3 嵌入式立體圖像編碼中的碼率控制算法</p><p><b>  3.1 編碼流程</b></p><p>  立體圖像編碼流程如圖3-1所示,一張立體圖像有兩張圖像:左圖和右圖。在編碼前,首先進(jìn)行右圖基于左圖的視差估計(jì),然后得到右圖

59、基于左圖的預(yù)測(cè)圖像,接著是對(duì)右圖減去這個(gè)預(yù)測(cè)圖像得到差值圖像,再對(duì)左圖和差值圖像進(jìn)行編碼,這樣充分利用了左、右圖像的關(guān)聯(lián),去除了編碼冗余,使得編碼效率更高。左圖和差值圖像進(jìn)入編碼器后,首先對(duì)其進(jìn)行分塊(本文算法采用8*8大小的宏塊),每個(gè)宏塊根據(jù)目標(biāo)比特都會(huì)預(yù)先分配得到一個(gè)宏塊的目標(biāo)比特,對(duì)宏塊選用相應(yīng)的量化參數(shù),量化后進(jìn)行熵編碼得到實(shí)際碼率。碼率控制器通過對(duì)宏塊的目標(biāo)比特和實(shí)際比特的計(jì)算,對(duì)編碼時(shí)的量化參數(shù)進(jìn)行調(diào)整,使的目標(biāo)比特的利用

60、率得以提高。針對(duì)差值圖像編碼時(shí),對(duì)其宏塊在左圖中進(jìn)行匹配選取量化參數(shù)的方式,快速確定差值圖像的量化參數(shù),對(duì)其進(jìn)行量化。</p><p>  圖3-1 編碼流程</p><p>  立體圖像編碼中最重要的是視差估計(jì)。視差估計(jì)就是利用一個(gè)點(diǎn)在左圖和右圖中的投影點(diǎn),通過公式(3-1)算出圖像的深度等三維圖像的信息。</p><p><b> ?。?-1)<

61、;/b></p><p>  其中表示左圖中的像素點(diǎn),表示右圖中的像素點(diǎn),表示的是右圖中在該點(diǎn)的視差,當(dāng)取最小值時(shí),即為估計(jì)視差。</p><p>  3.2 編碼器與碼率控制器</p><p>  編碼器在編碼的時(shí)候關(guān)鍵問題是采用多少的量化參數(shù)對(duì)當(dāng)前宏塊進(jìn)行編碼,而碼率控制器的主用作用就是利用目標(biāo)比特和實(shí)際比特對(duì)量化參數(shù)進(jìn)行合理的調(diào)整,使量化更加的準(zhǔn)確,如圖

62、3-2所示。因此,編碼器和碼率控制器緊密相連,并且構(gòu)成了明顯的反饋回路。</p><p>  圖3-2 編碼器與碼率控制器</p><p>  根據(jù)立體圖像編碼的特點(diǎn),在碼率控制時(shí),首先編碼的是左圖,在對(duì)左圖進(jìn)行碼率控制時(shí),目標(biāo)比特采用平均分配的方式,如公式(3-1)。</p><p><b> ?。?-1)</b></p>&

63、lt;p>  其中表示當(dāng)前宏塊的目標(biāo)比特,表示剩余比特,表示剩余宏塊個(gè)數(shù)。每次編完一個(gè)宏塊后,更新剩余比特,如公式(3-2)。</p><p><b>  (3-2)</b></p><p>  其中表示前一個(gè)宏塊的實(shí)際比特。</p><p>  在碼率控制時(shí)利用MAD表示編碼復(fù)雜度,如公式(3-3)。</p><p&

64、gt;<b> ?。?-3)</b></p><p>  其中i的計(jì)數(shù)跟宏塊大小的選取有關(guān)(本文算法選用8*8的塊)。</p><p>  為了能夠很好的利用實(shí)際比特,并保證圖像質(zhì)量,在碼率控制中加了一級(jí)量化參數(shù)調(diào)整。主要根據(jù)前一個(gè)宏塊的實(shí)際比特和前一個(gè)宏塊的目標(biāo)比特的比值,適當(dāng)?shù)恼{(diào)整當(dāng)前宏塊的量化參數(shù)。</p><p><b>  

65、(3-4)</b></p><p><b>  (3-5)</b></p><p>  其中表示的是前一個(gè)宏塊的實(shí)際比特,表示的是前一個(gè)宏塊的目標(biāo)比特。表示的是調(diào)整因子。通過公式(3-4)、公式(3-5)計(jì)算得到的調(diào)整因子,在由公式(3-6)得到當(dāng)前宏塊的量化參數(shù)。</p><p><b> ?。?-6)</b>

66、;</p><p>  在編碼右圖時(shí),當(dāng)前宏塊為右圖首個(gè)宏塊時(shí),采用公式(3-7)預(yù)測(cè)當(dāng)前宏塊的MAD。當(dāng)前宏塊為右圖最后一個(gè)宏塊時(shí),采用公式(3-8)預(yù)測(cè)當(dāng)前塊的MAD。當(dāng)前塊為右圖其余宏塊時(shí),采用公式(3-9)預(yù)測(cè)當(dāng)前宏塊的MAD。</p><p><b>  (3-7)</b></p><p><b> ?。?-8)</b

67、></p><p><b> ?。?-9)</b></p><p>  其中BT為常數(shù)等于0.05,為右圖宏塊的編碼復(fù)雜度,為左圖中的第i個(gè)宏塊的編碼復(fù)雜度。</p><p>  對(duì)右圖使用MAD的預(yù)測(cè)公式,不用像H.264視頻編碼標(biāo)準(zhǔn)中那樣進(jìn)行二次編碼,使的編碼過程更加簡(jiǎn)便。在計(jì)算出了右圖的MAD后,通過搜索在左圖中找到MAD相差最小的

68、塊,使用該塊的量化參數(shù)以提高編碼效率。</p><p>  3.3 精細(xì)可分級(jí)嵌入式碼流</p><p>  如圖3-2所示的編碼方式是利用傳統(tǒng)的編碼方式對(duì)立體圖像進(jìn)行編碼,沒有考慮到帶寬的變化,因此對(duì)時(shí)時(shí)帶寬的適應(yīng)性較差。嵌入式立體圖像編碼后形成的碼率需要適應(yīng)帶寬的時(shí)時(shí)變化,帶寬的變小,會(huì)使傳輸?shù)膱D像數(shù)據(jù)丟失,帶寬的增大,也會(huì)導(dǎo)致不能充分利用帶寬產(chǎn)生高質(zhì)量的圖像。為適應(yīng)帶寬的變動(dòng),及考慮

69、到傳輸時(shí)的數(shù)據(jù)丟失,在有限的帶寬內(nèi)傳輸最佳的數(shù)據(jù),因此在編碼時(shí)對(duì)產(chǎn)生的碼率要進(jìn)行合理的精細(xì)分級(jí)。簡(jiǎn)單講,精細(xì)可分級(jí)嵌入式碼流就是在編碼時(shí)對(duì)圖像數(shù)據(jù)按重要等級(jí)加以區(qū)別,當(dāng)帶寬小的時(shí)候,傳輸重要性小的數(shù)據(jù),這樣即使在發(fā)生數(shù)據(jù)丟失的時(shí)候也可以保證圖像的重要數(shù)據(jù)不丟失,從而在有限的帶寬下使圖像傳輸最優(yōu)化。</p><p>  在編碼中,對(duì)DCT變換后的系數(shù)使用不同的量化參數(shù)進(jìn)行量化,可以得到不同等級(jí)的圖像數(shù)據(jù)。量化參數(shù)越

70、大,得到的圖像越粗糙;量化參數(shù)越小,得到的圖像越精細(xì),這樣的方法被稱為質(zhì)量可分級(jí)。在編碼時(shí),為了適應(yīng)最低碼率并使圖像質(zhì)量有所保證,采用傳統(tǒng)編碼方式編碼形成最低級(jí)(稱為基本層)。為了能夠盡可能的提高圖像質(zhì)量,采用了其余量化參數(shù)對(duì)圖像量化、編碼,產(chǎn)生的圖像數(shù)據(jù)減去基本層的數(shù)據(jù),然后對(duì)這個(gè)差值圖像進(jìn)行量化、編碼并且傳輸,這樣的數(shù)據(jù)級(jí)別較高(稱為增強(qiáng)層)。在接受端,首先可以接受到基本層的數(shù)據(jù),產(chǎn)生一般質(zhì)量的圖像。但是,在帶寬允許的條件下,可以接

71、受到增強(qiáng)層的數(shù)據(jù),使的圖像質(zhì)量可以進(jìn)一步的提高。采用了精細(xì)可分級(jí)編碼方式,使的對(duì)帶寬的適應(yīng)能力增強(qiáng),但是編碼的復(fù)雜度增加了。</p><p>  質(zhì)量可分級(jí)編碼方式[18]如圖3-3所示。在編碼時(shí),碼率控制器采用的是平均分配目標(biāo)比特的方式,所以在質(zhì)量可分級(jí)編碼時(shí),采用的是預(yù)先設(shè)定目標(biāo)比特。首先對(duì)基本層設(shè)定一個(gè)合理的目標(biāo)比特,編碼產(chǎn)生一個(gè)能夠得到一定質(zhì)量的圖像數(shù)據(jù)。然后對(duì)增強(qiáng)層分級(jí)設(shè)定目標(biāo)比特,對(duì)基本層反量化后的系

72、數(shù)和原圖像的DCT系數(shù)的差值進(jìn)行量化編碼,產(chǎn)生增強(qiáng)層的目標(biāo)比特。</p><p>  圖3-3 質(zhì)量分級(jí)編碼</p><p>  3.4 碼率控制基本步驟</p><p> ?、?首先對(duì)左圖編碼,劃分宏塊,設(shè)定首個(gè)宏塊的初始量化參數(shù);</p><p>  ② 用平均分配方式確定首個(gè)宏塊的目標(biāo)比特;</p><p> 

73、?、?對(duì)量化參數(shù)計(jì)算得到量化步長(zhǎng),對(duì)宏塊進(jìn)行量化;</p><p> ?、?對(duì)量化后的宏塊熵編碼,計(jì)算實(shí)際比特;</p><p> ?、?計(jì)算宏塊的編碼復(fù)雜度MAD;</p><p> ?、?根據(jù)宏塊實(shí)際比特和目標(biāo)比特的比值調(diào)整量化參數(shù);</p><p> ?、?跳轉(zhuǎn)至④,直到整個(gè)左圖編碼完成,進(jìn)入右圖編碼;</p><p

74、>  ⑧ 右圖編碼先分塊,再通過公式(3-7)、公式(3-8)、公式(3-9)對(duì)右圖宏塊預(yù)計(jì)MAD;</p><p> ?、?通過右圖預(yù)計(jì)的MAD,在左圖中找到相差最小的MAD塊,得到當(dāng)前塊的Q值;</p><p> ?、?跳轉(zhuǎn)至⑧,知道右圖中的塊全部編碼完成,結(jié)束整個(gè)立體圖像的碼率控制。</p><p>  3.5 碼率控制流程圖</p>&l

75、t;p>  如圖3-4所示為碼率控制流程。</p><p>  圖3-4 碼率控制流程圖</p><p>  3.6 碼率控制程序設(shè)計(jì)</p><p><b>  3.6.1 編碼器</b></p><p>  本文的編碼方法采用的是熵編碼中的霍夫曼編碼,霍夫曼編碼屬于可變長(zhǎng)編碼。首先根據(jù)像素值的概率大小從大到小

76、排列,然后將最小的兩個(gè)概率相加得到一個(gè)新概率,重復(fù)上述步驟,直到得到一個(gè)符號(hào)為止,最后從下到上用1、0兩個(gè)符號(hào)編碼。</p><p><b>  代碼如下:</b></p><p>  #define MAXVALUE 10000 /*某個(gè)灰度值出現(xiàn)的最大值*/</p><p>  #define MAXLEAF 64 /*輸入的最多個(gè)數(shù)*/

77、</p><p>  #define MAXNODE MAXLEAF*2-1 /* 結(jié)點(diǎn)數(shù)的個(gè)數(shù)*/</p><p>  #define MAXBIT 50 /*編碼的最大位數(shù)*/</p><p>  typedef struct node /*結(jié)點(diǎn)類型定義*/</p><p><b>  {</b&g

78、t;</p><p>  char letter;</p><p>  int weight;</p><p>  int parent;</p><p>  int lchild;</p><p>  int rchild;</p><p>  }HNodeType;</p>&

79、lt;p>  typedef struct /*編碼類型定義*/</p><p><b>  {</b></p><p>  char letter;</p><p>  int bit[MAXBIT];</p><p>  int start;</p><p>  }HCodeTyp

80、e;</p><p>  typedef struct /*輸入符號(hào)的類型*/</p><p><b>  {</b></p><p><b>  int num;</b></p><p><b>  }lable;</b></p><p>  //H

81、NodeType HuffNode[] 用于數(shù)據(jù)結(jié)構(gòu)重定向</p><p>  //int n輸入的數(shù)據(jù)長(zhǎng)度</p><p>  //lable a[]輸入的要編碼的數(shù)據(jù)</p><p>  void Huffman(HNodeType HuffNode[],int n,lable a[])</p><p><b>  {<

82、/b></p><p>  int i,j,m1,m2,x1,x2,temp1;</p><p>  //m2是用于存放次小值 x2用于記錄次小值在數(shù)組中的位置</p><p>  //m1是用于存放最小值 x1用于記錄次最小值在數(shù)組中的位置</p><p>  //temp1用于排序</p><p>  

83、for (i=0;i<2*n-1;i++) /*對(duì)結(jié)構(gòu)體里面的數(shù)據(jù)賦予初值*/</p><p><b>  {</b></p><p>  HuffNode[i].letter=0;</p><p>  HuffNode[i].weight=0; // 節(jié)點(diǎn)的值</p><p>  HuffNode[i]

84、.parent=-1; //父節(jié)點(diǎn)的值</p><p>  HuffNode[i].lchild=-1; // 左節(jié)點(diǎn)</p><p>  HuffNode[i].rchild=-1; // 右節(jié)點(diǎn)</p><p><b>  }</b></p><p>  /*對(duì)輸入數(shù)據(jù)按權(quán)值大小進(jìn)行排序*/</p>

85、<p>  for (i=0;i<n-1;i++)</p><p>  for (j=i+1;j<n-1;j++)</p><p>  if (a[j].num>a[i].num)</p><p><b>  {</b></p><p>  temp1=a[i].num;</p>

86、;<p>  a[i].num=a[j].num;</p><p>  a[j].num=temp1;</p><p><b>  }</b></p><p>  //將排序后的值復(fù)制給結(jié)構(gòu)體中的權(quán)值</p><p>  for (i=0;i<n;i++)</p><p>&l

87、t;b>  {</b></p><p>  HuffNode[i].weight=a[i].num;</p><p><b>  }</b></p><p>  for (i=0;i<n-1;i++) /*構(gòu)造huffman樹*/</p><p><b>  {</b

88、></p><p>  m1=m2=MAXVALUE;//最大權(quán)值</p><p>  x1=x2=0; //首先清零</p><p>  for (j=0;j<n+i;j++) //沒增加一次循環(huán)次數(shù)加一</p><p><b>  { </b></p><p>

89、;  if (HuffNode[j].parent==-1&&HuffNode[j].weight<m1)</p><p><b>  {</b></p><p>  m2=m1; x2=x1; </p><p>  m1=HuffNode[j].weight; /*尋找權(quán)值最小的和次小的權(quán)值和位置*/</

90、p><p><b>  x1=j;</b></p><p><b>  }</b></p><p><b>  else if </b></p><p>  (HuffNode[j].parent==-1&&HuffNode[j].weight<m2)<

91、/p><p><b>  {</b></p><p>  m2=HuffNode[j].weight;</p><p><b>  x2=j;</b></p><p><b>  }</b></p><p><b>  }</b><

92、;/p><p>  HuffNode[x1].parent=n+i;// 標(biāo)記掉了下次不被使用是哪個(gè)節(jié)點(diǎn)的N+i</p><p>  HuffNode[x2].parent=n+i; </p><p>  /*最小與次小點(diǎn)進(jìn)行相加放在N+i的位置*/</p><p>  HuffNode[n+i].weight=HuffNode[x1

93、].weight+HuffNode[x2].weight;</p><p>  //記錄該子節(jié)點(diǎn)兩個(gè)求和的節(jié)點(diǎn)的位子 </p><p>  HuffNode[n+i].lchild=x1;</p><p>  HuffNode[n+i].rchild=x2;</p><p><b>  }</b></p

94、><p>  //int n輸入的數(shù)據(jù)長(zhǎng)度</p><p>  //lable a[]輸入的要編碼的數(shù)據(jù)</p><p>  unsigned int HuffmanCode(int n,lable a[])</p><p><b>  {</b></p><p>  HNodeType HuffNo

95、de[MAXNODE]; //數(shù)據(jù)結(jié)構(gòu)重定向 節(jié)點(diǎn)個(gè)數(shù)</p><p>  HCodeType HuffCode[MAXLEAF],cd; // 最多的個(gè)數(shù)30</p><p>  int i,j,c,p;</p><p>  unsigned int k=0;</p><p>  Huffman(HuffNode,n,a); //經(jīng)過

96、以上調(diào)用就可以得到樹圖所有信息保</p><p><b>  存到結(jié)構(gòu)體里面</b></p><p>  for (i=0;i<n;i++)/*按結(jié)點(diǎn)位置進(jìn)行編碼*///總共要對(duì)N個(gè)數(shù)進(jìn)行編碼</p><p><b>  {</b></p><p>  cd.start=n-1; //設(shè)置開

97、始在N-1也就是從后向前</p><p><b>  c=i;</b></p><p>  p=HuffNode[c].parent;</p><p>  while (p!=-1)</p><p><b>  {</b></p><p>  if (HuffNode[p].

98、lchild==c)</p><p>  cd.bit[cd.start]=0;</p><p>  else cd.bit[cd.start]=1;</p><p>  cd.start--;</p><p><b>  c=p;</b></p><p>  p=HuffNode[c].pare

99、nt;</p><p><b>  }</b></p><p>  for (j=cd.start+1;j<n;j++) //儲(chǔ)存編碼</p><p>  HuffCode[i].bit[j]=cd.bit[j]; //將數(shù)據(jù)放入到0節(jié)點(diǎn)所對(duì)應(yīng)的結(jié)</p><p><b>  構(gòu)體數(shù)組中去<

100、/b></p><p>  HuffCode[i].start=cd.start;</p><p><b>  }</b></p><p>  for (i=0;i<n;i++)</p><p><b>  {</b></p><p>  for (j=HuffC

101、ode[i].start+1;j<n;j++)</p><p><b>  {</b></p><p>  k++;//記錄編碼宏塊的比特位</p><p><b>  }</b></p><p><b>  }</b></p><p>  ret

102、urn k;//用來計(jì)算宏塊實(shí)際比特?cái)?shù)</p><p><b>  }</b></p><p>  3.6.2 量化調(diào)整子函數(shù)</p><p>  量化調(diào)整子函數(shù)主要作用是利用前面宏塊量化后產(chǎn)生的比特?cái)?shù)與目標(biāo)比特?cái)?shù)的比值關(guān)系,適當(dāng)?shù)募?xì)調(diào)當(dāng)前編碼宏塊的量化參數(shù),這樣可以充分的利用目標(biāo)比特,能夠使有限的帶寬傳輸更高質(zhì)量的圖像。</p>

103、<p><b>  代碼如下:</b></p><p>  int DQ(float pre_actual_bit,float pre_target_bit,int Q) </p><p>  { </p><p><b>  float a;</b></p>&l

104、t;p>  int adjust_Q;</p><p>  a=pre_actual_bit/pre_target_bit; //根據(jù)公式(3-4)、(3-5)</p><p>  if(0<a<0.8) adjust_Q =0;</p><p>  else if((0.8<=a)&&a

105、mp;(a<=1.0)) adjust_Q=1;</p><p>  else if((1.0<a)&&(a<1.3)) adjust_Q=2;</p><p>  else if(a>=1.3) adjust_Q=3;</p><p>  Q=Q+adjust_Q;

106、//計(jì)算最終Q值</p><p>  return Q; //返回Q值</p><p><b>  } </b></p><p>  3.6.3 量化參數(shù)轉(zhuǎn)為量化步長(zhǎng)子函數(shù)</p><p>  本算法中的量化參數(shù)轉(zhuǎn)為量化步長(zhǎng)是采用H.264標(biāo)準(zhǔn)中的方法。量化參數(shù)是量化步長(zhǎng)的序號(hào),量化參數(shù)Q共52個(gè)取值(0~51),

107、計(jì)算方法是量化參數(shù)Q每增加6,量化步長(zhǎng)就翻一倍。當(dāng)量化參數(shù)選取0時(shí),量化步長(zhǎng)最小,量化后的圖像精細(xì)。當(dāng)量化參數(shù)選取51時(shí),量化步長(zhǎng)最大,量化后的圖像最粗糙。在首個(gè)宏塊的量化參數(shù)選用對(duì)整個(gè)碼率控制環(huán)節(jié)有這相當(dāng)大的影響,因此,在特定的碼率下應(yīng)當(dāng)選用合適的量化參數(shù)初值。</p><p><b>  代碼如下:</b></p><p>  float Q2Qstep(int

108、Q)</p><p><b>  {</b></p><p><b>  int i; </b></p><p>  float Qstep;</p><p>  static const float Q2QSTEP[6] = { 0.625, 0.6875, 0.8125, 0.875, 1.0,

109、 1.125 }; //選用量化步長(zhǎng)初值表</p><p>  Qstep = Q2QSTEP[Q % 6];//計(jì)算選用的量化步長(zhǎng)初值</p><p>  for( i=0; i<(Q/6); i++)//計(jì)算翻倍</p><p>  Qstep *= 2;</p><p>  return Qstep;</p>

110、<p><b>  }</b></p><p>  3.6.4 左圖宏塊MAD計(jì)算子函數(shù)</p><p>  左圖宏塊MAD計(jì)算子函數(shù)的主要功能是,MAD的計(jì)算主要用在左圖宏塊中,計(jì)算如公式(3-3)。</p><p><b>  代碼如下:</b></p><p>  double ca

111、lculate_cur_MAD(unsigned char *hongkuai1,int Q)</p><p><b>  { </b></p><p>  double s=0;</p><p>  int i,j,k=0;</p><p>  for(i=0;i<16;i++)</p><

112、p>  for(j=0;j<16;j++)</p><p><b>  { </b></p><p>  s=s+(unsigned char)(hongkuai[k++]/Q2Qstep(Q));//計(jì)算編碼復(fù)度</p><p><b>  }</b></p><p>  return

113、 s; </p><p><b>  }</b></p><p>  3.6.5 右圖宏塊MAD預(yù)測(cè)子函數(shù)</p><p>  右圖宏塊MAD預(yù)測(cè)子函數(shù)主要利用公式(3-7)、(3-8)、(3-9),爭(zhēng)對(duì)右圖宏塊利用左圖宏塊的MAD值進(jìn)行預(yù)測(cè),分為首個(gè)宏塊、最后一個(gè)宏塊、其余宏塊三種情況。</p><p><b&

114、gt;  代碼如下:</b></p><p>  double estimate_MAD(int hk_R,int hk_C)</p><p><b>  {</b></p><p><b>  int n;</b></p><p>  double MAD0=0;</p>

115、<p>  n=hk_R+hk_C;//n用于判斷第二張圖片中宏塊的位置</p><p>  if(n==0)//右圖首個(gè)宏塊</p><p>  *(MAD1+n)=(1-BT)*(*(MAD+n));//BT為常量</p><p>  else if(n==(hk_Row+hk_Col-2))//右圖最后一個(gè)宏塊</p><p&g

116、t;  *(MAD1+n)=(1-2*BT)*(*(MAD+n))+BT*(*(MAD+(n-1)))+BT*(*(MAD1+(n-1)));</p><p>  else//右圖其余宏塊</p><p>  *(MAD1+n)=(1-3*BT)*(*(MAD+n))+BT*(*(MAD+(n-1)))+BT*(*(MAD+(n+1)))+BT*(*(MAD1+(n-1)));</p

117、><p>  return MAD0; </p><p><b>  }</b></p><p>  3.6.6 右圖宏塊MAD宏塊匹配取量化參數(shù)子函數(shù)</p><p>  右圖宏塊MAD預(yù)測(cè)子函數(shù)的功能是,找到前張圖像中與第二張當(dāng)前塊MAD相差最小的塊,將其Q給當(dāng)前塊。</p><p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論