MATLAB實現VVC中的反變換編碼

博主最近期末要交課設,分配的任務是用MATLAB實現VVC中的反變換編碼。自己參照VTM代碼完成了MATLAB的代碼編寫,經過了幾天的調試修改,終於測試通過啦!(超級激動滴!不枉我在實驗室奮戰了幾天!切入正題!正經臉)

VVC中反變換編碼主要包括兩個過程,主變換xITrMxN+兩次一維變換inverseTr(水平或豎直變換)。主變換xITrMxN調用兩次inverseTr變換,實現水平和豎直方向的反向變換,最終實現反變換的編碼輸出。以下將從這兩部分進行詳細說明。

主變換xITrMxN函數

相比HEVC的反變換過程,VVC反變換編碼有以下幾點不同:

  1. 根據幀內幀間變換模式的不同 ,選擇不同的變換種類(DCT2,DCT8 DST7,NUM_TRANS_TYPE,DCT2_EMT),注意默認變換種類爲DCT2(博主剛開始沒注意,導致後面測試的時候出錯有點頭疼);
  2. 多核變換 ,可選的變換種類有:DCT2,DCT8,DST7,NUM_TRANS_T
    YPE,DCT2_EMT;
  3. 處理的輸入塊可不爲方陣 ,例如輸入爲M*N的變換塊,M可不等於N;
  4. 增加了 2x2 64x64的變換系數矩陣,可對輸入維度2或64的變換塊進行操作(DCT2纔有2x2及64x64的變換系數矩陣,其餘變換種類只有4x4 8x8 16x16 32x32的變換系數矩陣) ;

輸入參數爲:bitDepth,iWidth,iHeight,iQCoef,maxLog2TrDynamicRange,ucMode,ucTrIdx。依次爲像素比特深度,反變換輸入矩陣寬度,反變換輸入矩陣高度,反變換輸入矩陣,數據動態範圍,變換模式,變換種類。

輸出參數爲:
iTCoef,err
對應反變換輸出矩陣,代碼出錯。

函數整體思路如下:
在這裏插入圖片描述

水平或豎直變換inverseTr函數

這個函數難點是要理解VVC區別於HEVC進行的高頻調零操作。高頻調零操作是爲了減少運算數據量,加快運算時間。對於一個輸入寬度爲iWidth和高度爲iHeight的變換塊,當高度或寬度大於32時,iskipline=iHeight-32,iskipline2=iWidth-32,進行對應的調零操作。例如輸入變換矩陣爲16*64,將變換塊的第33列至64列置零再進行水平或豎直變換。(注意:只有DCT2纔可能有調零操作,可以思考一下爲什麼哈哈)

先更到這裏啦,代碼因爲還沒答辯就不公佈啦~
有問題可以留言鴨,大家一起探討!!!開開心心準備跨年啦~

發佈了6 篇原創文章 · 獲贊 13 · 訪問量 5949
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章