H.264 中的相關問題

幀內解碼時,在解碼端,首先通過當前宏塊左邊、上邊已經解碼完成的宏塊使用當前宏塊的預測模式(預測模式計算過程請參見我的論文《H.264數字視頻差錯控制技術的研究》,在群FTP“本群原創資料”目錄中)得到當前宏塊的像素預測值。然后通過對碼流進行解碼得到當前宏塊的像素殘差。最后將殘差和預測值加在一起就得到重構的像素值。如果當前宏塊的左邊或者右邊的宏塊不存在(即當前宏塊為圖像邊界上的宏塊),那么其預測值全部為128

幀間解碼時,在解碼端,首先對碼流進行解碼得到當前宏塊的參考幀,然后通過當前宏塊周圍宏塊計算運動矢量預測值(具體方法見畢厚杰書99頁,標準中也有,但我一時不知道在什么地方了)。然后通過對碼流進行解碼得到當前宏塊的運動矢量殘差。將運動矢量殘差與運動矢量預測值相加得到實際的運動矢量。然后通過對碼流進行解碼得到當前宏塊的像素殘差(如果當前宏塊有像素殘差的話)。然后通過參考幀與上面計算得到的MV計算出當前宏塊的像素預測值。再將像素預測值與像素殘差相加就得到當前宏塊的重構。

說明:

1、以上過程為 JM86 的解碼過程。并不一定所有代碼都按照這個流程;????

2、上面說的運動矢量預測值的計算過程實際是以4*4塊為單位,參考幀也是針對4*4塊做的。這里寫成宏塊主要是方便大家理解。

RDO

Rate-Distortion Optimization 是視頻編碼中最優選擇mode的一種方法。比如h.264里好多mode 8x8 16x16 I4x4 I16 在給定的條件下,哪個是最好的?

Distortion 是指選用candidate mode產生的失真,rate是用這個mode需要的rate.他們換算成RDCost = Distortion + lamda * rate. 兩個mode誰的rdcost 低就選誰,其中的數學原理是條件極值轉非條件極值。

JM 里用的RDO是比較經典的方法。最早是Gary J.Sullivan做的 參見 IEEE Signal Processing Magazine 1998 Nov.? "Rate-Distortion Optimization for video compression" rdo的經典。 h264里的rdo還可參考CSVT H.264 special issue.

H.264里面當前幀屬于哪個slice的決定形式是多種多樣的,對于JM中的碼流中,一般一幀圖象就認為是一個slice,那么如果當前幀是一個I幀,那么它就屬于一個I slice.這時整個frame的為一個slice.但是具體我們用什么樣的方式來進行slice type的決策呢,這也是一個問題。我們看一下T264里面是如何處理這個問題的。

T264,如果我們設定了,USE_SCENEDETECT的話,當前的slice種類是由當前幀的幀號與設定的idrframe,iframebframe相關的,如果frame_no%idrframe==0的話,那么說明當前幀是屬于一個IDR slice的,如果frame_no%iframe==0的話,該幀屬于一個I slice.如果上面的情況不滿足那么是屬于P sliceB slice.由于碼流中只有如下幾種類型:0) I P P P ..... I P P P? 1) I B P B P.....B P B P?? 2) I B B P B B P.....B B P I B B P,所以如果frame_no%(bframe+1)==0的話,就屬于P slice,如果不是的話屬于B slice.

如果沒有使用USE_SCENEDETECT的話,是用MeAnalysis來決定當前屬于什么slice的。這種形式是動態式地決定是不是要加入一個I slice。決定流程如下:如果我們達到了我們在config里面設定的iframe interval的話,當前幀就是一個I slice.我們設定一個INTRA_THRESHOLD,對幀中的每一個宏塊進行預測,來計算sad.這個過程因為計算量比較大,所以使用了簡化算法,首先用前一幀的mv做預測值,計算sad,如果這個值大于我們設定的SEARCH_THRESHOLD的話,說明上一幀的mv已不適合做當前幀的預測,我們會使用一個簡化的diamond search來簡單地找一下當前宏塊的mv,進行sad計算。整個幀的sad計算結束之后,我們與INTRA_THRESHOLD進行比較,如果sad大的話,這一幀為I slice中的一幀,如果小的話,我們認為它是一個PB幀。對于當前幀是P還是B幀還是用上面的方法進行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455255.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455255.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455255.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

wenzhixin bootstrap-table 點擊table單元格改變顏色

bootstrap-table用于展示數據非常方便,也需要滿足一些個性化需求。比如點擊窗格(td)標記下顏色,用于目測 代碼如下,轉載請注明 $("table").on(click-row.bs.table, function (e, row, $el) {//el[0] is tr …

tornado學習筆記day01-高并發性能web框架

tornado的安裝 這里我使用的是虛擬環境中的pip安裝,配合清華大學鏡像源安裝的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/simple我的第一個tornado程序 import tornado.web import tornado.ioloopclass IndexHandler(tornado.web.RequestHandler):主頁處理…

python99乘法表while翻譯_Python學習之while練習--九九乘法表

效果如下&#xff1a;實現代碼;m 1n 1while(m<10):while(n<m):print(n,"*",m,"",m*n,end \t)n 1print(\n)n 1m 1解析&#xff1a;這是一個很簡單的while嵌套程序&#xff0c;首先分析九九乘法表是從上往下逐行增加&#xff0c;且第一列乘積為1…

ASP.NET Core 2加入了Razor頁面特性

最近發布的ASP.NET Core 2.0&#xff0c;連同新發布的.NET Core 2和Entity Framework Core 2.0y&#xff0c;一并構成了.NET Core 2.0生態中的三元組。此發布給出了多個新特性和改進&#xff0c;其中包括通用性能的改進、Razor頁面、新的開發模板以及更好的Azure Diagnostics支…

matlab 矩陣拼接

E[a&#xff0c;b]%水平方向上的拼接 E[a &#xff1b;b] %垂直方向上的拼接 轉載于:https://www.cnblogs.com/hsy1941/p/7124083.html

JM8.5中的7種宏塊模式問題 - zhoujunming的專欄 - CSDN博客

JM8.5中的7種宏塊模式問題 收藏 Outline: 1、 CFG文件中有關可變尺寸宏塊模式的相關選項2、 7種宏塊模式對應的數值常量3、 7種宏塊模式被分成宏塊和亞宏塊4、 如何對宏塊和亞宏塊的運動估計&#xff0c;采用一個共同的函數來處理5、 遺留問題1、CFG文件中有關可變尺寸宏塊…

tornado學習筆記day02-進階與提升

整理基礎工程 請看第一天的配置文件目錄,搭建了一個框架的基礎目錄 Application settings debug 作用 可以設置tornado是否工作在調試模式下面,默認為false,即工作在生產模式下 true的特性: 自動重啟: tornado程序會監控源代碼文件,會自動重啟服務器,減少我們手動重啟…

python123測驗2答案八邊形_Python試卷

3、寫一個函數&#xff0c;計算一個給定的日期是該年的第幾天。def getday(self,yNone,mNone,dNone):date datetime(y,m,d)days date.strftime(%j)return days4、寫一個函數&#xff0c;給定N&#xff0c;返回斐波那契數列第N項。def getn_vlaue(self,n):if n<2:return 1e…

java實體類如果不重寫toString方法,會如何?

先認識一下Object Object 類的 toString 方法 返回一個字符串&#xff0c;該字符串由類名&#xff08;對象是該類的一個實例&#xff09;、at 標記符“”和此對象哈希碼的無符號十六進制表示組成。換句話說&#xff0c;該方法返回一個字符串&#xff0c;它的值等于&#xff1a;…

H.264 中很有用的一些概念

Q:PSNR 峰值信噪比 是根據它來取qp是不是&#xff1f; A:不是 和QP沒有直接關系但是QP的選擇會影響到PSNR Q: 如果不用率失真最優化&#xff0c;為什么選擇SATD&#xff0b;deltar&#xff08;mv&#xff0c;mode&#xff09;作為模式選擇的依據&#xff1f;為什么運動估…

tornado學習筆記day03-響應輸出

write: 作用: 將chunk中的數據寫到輸出緩沖區 利用write方法寫json數據 我們自己手動序列化json的那種方式Content-Type 的屬性值為text-html而我們采用write自動序列化方式,我們的content-type 屬性為application/json set_default_headers(): 作用: 在進入HTTP響應方法…

Machine Learning——octave矩陣操作(2)——DAY3

矩陣的數學操作&#xff1a; Assumed: a為一個矩陣&#xff0c;m是一個向量 Log(a)——求每一個元素的對數 Exp(a)——以e為底的指數 1./a——求每個元素的導師 [a,b]max(m)——m是一個向量&#xff0c;a為m當中最大的元素&#xff0c;b為a在m中的排列序號&#xff08;已按從小…

python 多進程并發_python并發編程之多進程

一 multiprocessing模塊介紹python中的多線程無法利用多核優勢&#xff0c;如果想要充分地使用多核CPU的資源(os.cpu_count()查看)&#xff0c;在python中大部分情況需要使用多進程。Python提供了multiprocessing。multiprocessing模塊用來開啟子進程&#xff0c;并在子進程中執…

tornado學習筆記day04-執行順序

響應輸出 -> write 原型 self.write()函數 源碼中是這樣定義的 def write(self, chunk: Union[str, bytes, dict]) -> None:作用 將chunk數據寫到緩沖區 刷新緩沖區的四種方式 程序中斷手動刷新緩沖區滿了遇到\n 當你寫了一個print之后,不是直接就顯示在黑屏中斷…

字符串中文判斷

2019獨角獸企業重金招聘Python工程師標準>>> 1、判斷字符串是否全是中文或含有中文 <?php header(Content-type:text/html; charsetutf-8); $str 你好; if(preg_match(/^[\x{4e00}-\x{9fa5}]$/u, $str)>0){ echo 全是中文; …

angular使用動態組件后屬性值_Angular動態加載組件

引言有時候需要根據URL來渲染不同組件&#xff0c;我所指的是在同一個URL地址中根據參數的變化顯示不同的組件&#xff1b;這是利用Angular動態加載組件完成的&#xff0c;同時也會設法讓這部分動態組件也支持AOT。動態加載組件下面以一個Step組件為示例&#xff0c;完成一個3個…

分治2--取余運算

分治2--取余運算 一、心得 二、題目和分析 題目描述 輸入b&#xff0c;p&#xff0c;k的值&#xff0c;求bp mod k的值。其中b&#xff0c;p&#xff0c;k*k為長整型數。輸入 三個整數&#xff0c;分別為b&#xff0c;p&#xff0c;k的值輸出 bp mod k樣例輸入 2 10 9樣例輸出 …

-mysql-鎖機制分為表級鎖和行級鎖

2019獨角獸企業重金招聘Python工程師標準>>> 聲明&#xff1a;本欄目所使用的素材都是凱哥學堂VIP學員所寫&#xff0c;學員有權匿名&#xff0c;對文章有最終解釋權&#xff1b;凱哥學堂旨在促進VIP學員互相學習的基礎上公開筆記。 mysql鎖機制分為表級鎖和行級鎖 …

tornado學習筆記day05-訪問數據庫

模板## 配置模板路徑 這個在之前我們已經配置好了,可以參考前面的文章 settings {# 就像upfile就沒有,你寫了也白扯template_path: os.path.join(BASE_DIR, "templates"), }渲染并返回給客戶端 使用render()方法 class HomeIndexHandler(RequestHandler):def ge…

pythonelectron桌面開發案例_使用Electron開發基于Node.js的桌面應用

最近小編在查看分享資料時&#xff0c;發現一個可以開發跨平臺桌面應用的框架——NW.js(原名&#xff1a;node-webkit)。正當小編興致勃勃的研究NW.js的時候&#xff0c;最基礎的安裝環節出了問題。無論用npm還是cnpm都無法完整下載所依賴的包(具體原因待考察)。鑒于此&#xf…