專利名稱:Avs視頻解碼的錯誤檢測與掩蓋方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種視頻解碼的處理方法,尤其是涉及一種AVS (Audio Video Coding Standard,音視頻編解碼標(biāo)準(zhǔn))視頻解碼的錯誤檢測與掩蓋方法。
背景技術(shù):
AVS (Audio Video Coding Standard,音視頻編解碼標(biāo)準(zhǔn))是我國自主制定的音視頻編 解標(biāo)準(zhǔn),可以廣泛應(yīng)用于各種音視頻場合,支持衛(wèi)星廣播、地面廣播、有線電視、IP(Internet Protocol,網(wǎng)際協(xié)議)網(wǎng)絡(luò)等傳輸協(xié)議。在網(wǎng)絡(luò)信道上(如ATM (Asynchronous Transfer Mode,異步傳輸模式),PSTN (Public Switched Telephone Network,公共開關(guān)電 話網(wǎng)絡(luò)),Internet等)傳輸AVS壓縮碼流過程中,往往存在低于10%的數(shù)據(jù)丟失或者 誤碼。由于AVS采用了可變長碼編碼(VLC, Variable Length Codes),當(dāng)出現(xiàn)誤碼時, 很可能將錯誤擴散到整幅圖像及其后續(xù)解碼圖像中,從而導(dǎo)致圖像出現(xiàn)明顯失真。因此, 如何檢測錯誤和減少由錯誤引起的圖像失真成了一個迫切需要解決的問題?,F(xiàn)有的錯誤檢測與掩蓋方法主要針對的是H.26x、 MPEG (Moving Pictures Experts Group,動態(tài)圖像專家組)-2、 MPEG-4等國際標(biāo)準(zhǔn)。在錯誤檢測方法上,主要有語法/ 語義檢測方法和相關(guān)性檢測方法,但這些方法的計算復(fù)雜度較高,可能引起解碼器的中 斷延遲較長,如電子測量與儀器學(xué)報(2003 (2): 7-12)公開的MPEG-2視頻圖像錯誤 分析與檢測方法,該方法主要采用了五步檢測法對錯誤進(jìn)行分析和檢測,取得了較為理 想的檢測效果,但該方法在錯誤檢測過程中占用的時間較長,非常不利于應(yīng)用在實時的 解碼器中。在錯誤掩蓋方法上,主要是利用視頻圖像時間和空間上的相關(guān)性來恢復(fù)已損 壞的圖像,主要方法有基于空域的錯誤掩蓋方法、基于時域的錯誤掩蓋方法和基于變 換域(DCT (Discrete cosine Transform,離散余弦變換))的錯誤掩蓋方法,這些方法在 一定程度上掩蓋了錯誤,但應(yīng)用這些方法恢復(fù)的圖像質(zhì)量仍然不高,且其適應(yīng)環(huán)境受限, 局限性大。而針對AVS視頻解碼的錯誤掩蓋和恢復(fù),只采用了簡單的條帶劃分機制,該方法 在錯誤很少或者錯誤不明顯的情況下還能恢復(fù),但是如果錯誤發(fā)生在多處,則該方法解 碼的圖像效果就會比較差,不利于實際應(yīng)用。同時,該方法的容錯性能大大低于其他國 際標(biāo)準(zhǔn)(如MPEG-4、 AVC (Advanced Video coding,高等視頻編碼)/H.264)中采用的 數(shù)據(jù)分割、復(fù)雜的FMO (Flexible Macroblock Ordering,靈活的宏塊排序)/ASO (ArbitrarySlice Ordering,任意條帶排序)等宏塊、條帶組織機制、強制Intra塊刷新編碼等容錯 方法。發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題是提供一種能夠準(zhǔn)確定位發(fā)生錯誤的宏塊,并對出錯的 圖像具有顯著的恢復(fù)效果,同時不中斷解碼器,不影響解碼器的實時解碼速度的AVS 視頻解碼的錯誤檢測與掩蓋方法。本發(fā)明解決上述技術(shù)問題所采用的技術(shù)方案為 一種AVS視頻解碼的錯誤檢測與 掩蓋方法,AVS視頻幀包括I幀、P幀和B幀,AVS視頻基本流包括視頻序列層、圖像 層、條帶層、宏塊層和塊層,所述的視頻序列層、所述的圖像層和所述的條帶層均設(shè)置 有同步碼,所述的條帶層包括由多個宏塊行組成的一個條帶,所述的宏塊行包括多個由 多個塊組成的宏塊,在所述的AVS視頻基本流中,所述的I幀、所述的P幀及所述的B 幀三者的圖像層的條帶數(shù)和條帶位置相同,該方法包括以下步驟(1) 、利用公知的語法/語義錯誤檢測方法,根據(jù)設(shè)定的檢測條件對基本流中己解碼 的部分進(jìn)行錯誤檢測,如果檢測到錯誤,則確定發(fā)生錯誤的宏塊,并繼續(xù)執(zhí)行;如果未 檢測到錯誤,則對基本流中未解碼的部分進(jìn)行解碼處理,并對基本流中已解碼的部分重 新進(jìn)行錯誤檢測;(2) 、定義預(yù)測錯誤宏塊為步驟(1)中的發(fā)生錯誤的宏塊的前一宏塊,同時定義 預(yù)測錯誤宏塊的內(nèi)部相關(guān)性及預(yù)測錯誤宏塊與其相鄰宏塊之間的外部相關(guān)性,根據(jù)內(nèi)部 相關(guān)性和外部相關(guān)性對預(yù)測錯誤宏塊所處的條帶從預(yù)測錯誤宏塊開始向前檢測,并根據(jù) 設(shè)定的一個以上的門限值確定基本流中已解碼的部分發(fā)生錯誤的全部宏塊,同時定義發(fā) 生錯誤的全部宏塊中的最前宏塊為當(dāng)前出錯宏塊,當(dāng)前出錯宏塊所處的幀為當(dāng)前出錯 幀;(3) 、判斷當(dāng)前出錯幀是否為I幀,如果是,則根據(jù)由當(dāng)前出錯宏塊的相鄰宏塊的 預(yù)測模式計算得到的當(dāng)前出錯宏塊的預(yù)測模式,對當(dāng)前出錯宏塊進(jìn)行空域插值或?qū)⑶耙?幀同一位置上的宏塊直接復(fù)制覆蓋當(dāng)前出錯宏塊,并執(zhí)行步驟(4);如果不是,則繼續(xù) 判斷當(dāng)前出錯幀是否為P幀或B幀,如果是P幀,則當(dāng)當(dāng)前出錯P幀為鏡頭邊緣時, 根據(jù)由當(dāng)前出錯宏塊的相鄰宏塊的預(yù)測模式計算得到的當(dāng)前出錯宏塊的預(yù)測模式,對當(dāng)前出錯宏塊進(jìn)行空域插值,并執(zhí)行步驟(4);當(dāng)當(dāng)前出錯P幀不為鏡頭邊緣時,對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊釆用p跳過編碼模式進(jìn)行錯誤掩蓋,并執(zhí)行步驟(4);如果是B幀,則對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間 的所有宏塊采用B跳過編碼模式進(jìn)行錯誤掩蓋,并執(zhí)行步驟(4);(4) 、判斷基本流是否解碼完畢,如果不是,則返回執(zhí)行步驟(1),如果是,則結(jié)束。所述的步驟(3)包括以下具體步驟 (3a)、判斷當(dāng)前出錯幀是否為I幀,如果是,則通過與當(dāng)前出錯宏塊相鄰的相鄰宏 塊的預(yù)測模式計算當(dāng)前出錯宏塊的預(yù)測模式PredC2 , PredC2-Mz"(Prefi^p…,Pred^,…,Pre汲s),其中,PrerfA^ 、 PredA^ 、 Preci^表示相鄰宏塊的預(yù)測模式,當(dāng)只存在 一 個相鄰宏塊或不存在相鄰宏塊時, PreJC2 = /w/ra —8x8—DC,其中,/",ra — 8x8一ZX:表示當(dāng)前出錯宏塊的幀內(nèi)預(yù)測模式,并繼續(xù)執(zhí)行;否則,確定當(dāng)前出錯幀為P幀或B幀,并執(zhí)行步驟(3c);(3b)、判斷當(dāng)前出錯I幀是否為AVS視頻的第1幀,如果是,則根據(jù)步驟(3a) 得到的預(yù)測模式Prec/C2對當(dāng)前出錯宏塊進(jìn)行空域插值,并執(zhí)行所述的步驟(4);否則, 判斷前一幀同一位置上的宏塊是否為大運動宏塊,如果該宏塊是大運動宏塊,則根據(jù)步 驟(3a)得到的預(yù)測模式PredC2對當(dāng)前出錯宏塊進(jìn)行空域插值,如果該宏塊不是大運 動宏塊,則將前一幀同一位置上的宏塊直接復(fù)制覆蓋當(dāng)前出錯宏塊,并執(zhí)行所述的步驟 (4)。(3c)、判斷當(dāng)前出錯幀是否為P幀,如果是,則定義當(dāng)前出錯P幀中已解碼的宏 塊中編碼模式為幀內(nèi)編碼的宏塊數(shù)/"fraCow/^為7^raCbwW = Z7^ra_a^ ,其中,/加ra —Co《的值為0或1 ,當(dāng)/"加_0^, = 0時,表示第f個宏塊的編碼模式是幀間編碼;當(dāng)/加^_0^=1時,表示第/個宏塊的編碼模式是幀內(nèi)編碼;i 為當(dāng)前出錯P幀中已解碼的宏塊的個數(shù),繼續(xù)執(zhí)行;否則,執(zhí)行步驟(3e);(3d)、當(dāng)MraC做加〉^時,表示當(dāng)前出錯P幀為鏡頭邊緣,并采用與出錯幀為I幀且為AVS視頻第1幀時相同的方法處理,并執(zhí)行所述的步驟(4);當(dāng)MraCo"W〈^時,則對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊采用P跳過編碼模式 進(jìn)行錯誤掩蓋,并執(zhí)行所述的步驟(4);(3e)、對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊采用B跳過編 碼模式進(jìn)行錯誤掩蓋,并執(zhí)行所述的步驟(4)。所述的步驟(1)中的所述的設(shè)定的檢測條件包括無效碼值、無效VLC值、運動矢 量是否超出圖像外界、量化信息是否越界、無效的DC (Direct Current,直流)系數(shù)、 DCT (Discrete cosine Transform,離散余弦變換)系數(shù)是否越界、DCT系數(shù)個數(shù)是否超 出64個以及條帶層的第一個宏塊是否在宏塊行的首地址。所述的步驟(2)包括以下具體步驟①定義預(yù)測錯誤宏塊的內(nèi)部相關(guān)性」/Z)(C1)為<formula>formula see original document page 9</formula>其中,Cl表示預(yù)測錯Wx(M-l) + Mx(iV-1)誤宏塊,/(x,力為預(yù)測錯誤宏塊中位置為(;c,力的像素的像素值,W為預(yù)測錯誤宏塊在 垂直方向的塊的數(shù)量,M為預(yù)測錯誤宏塊在水平方向的塊的數(shù)量;②定義預(yù)測錯誤宏塊與與其相鄰的一個相鄰宏塊之間的外部相關(guān)性v4/DB(Cl:Z》<formula>formula see original document page 9</formula> ,,其中,Cl表示預(yù)測錯誤宏塊,x,表示與預(yù)測錯誤宏塊相鄰的一個相鄰宏塊,/^"為預(yù)測錯誤宏塊的內(nèi)部邊界的第/+1個像素的像素值,是預(yù)測錯誤宏塊的外部邊界的第/ +1個像素的像素值,尺為預(yù)測錯誤宏塊的邊界長度;(D根據(jù)步驟②得到預(yù)測錯誤宏塊與所有相鄰宏塊之間的外部相關(guān)性J/Z^(C1),sD扁(C1: A)<formula>formula see original document page 9</formula>其中,s為與預(yù)測錯誤宏塊相鄰的相鄰宏塊的個數(shù),y為下標(biāo);④根據(jù)得到的內(nèi)部相關(guān)性和外部相關(guān)性對預(yù)測錯誤宏塊所處的條帶從預(yù)測錯誤宏塊開始向前檢測,并判斷^/zxci)是否大于設(shè)定的第一門限值r巧,z/z^(ci)是否大于設(shè)定的第二門限值77/2,如果^/i)(Cl)〉77/,且^K)5(C1)〉77^,則確定基本流中發(fā)生錯誤的全部宏塊,同時定義發(fā)生錯誤的全部宏塊中的最前宏塊為當(dāng)前出錯宏塊,當(dāng)前出錯 宏塊所處的幀為當(dāng)前出錯幀。所述的第一 門限值77/,和所述的第二門限值7772均為可變值。 所述的第一門限值77/, = 16 ,所述的第二門限值nf2 = 26 。所述的大運動宏塊的判斷方法為定義待判斷的宏塊的運動矢量為(M^,M^), 當(dāng)MKx>77/mv或MF少〉77/^時,確定該宏塊為大運動宏塊;當(dāng)MFx<r/fmv且^><7^^時,確定該宏塊為小運動宏塊;其中,77/^為運動矢量門限值,其值為8。 所述的相鄰宏塊包括左邊宏塊和上邊宏塊。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于通過語法/語義錯誤檢測和相關(guān)性檢測,能夠準(zhǔn) 確的檢測出發(fā)生錯誤的宏塊,并通過利用前一正確解碼幀的條帶結(jié)構(gòu)來控制當(dāng)前出錯幀 進(jìn)行錯誤掩蓋,保證了圖像的高質(zhì)量恢復(fù),同時避免了錯誤向下一個條帶傳遞;本方法 中對出錯宏塊處理的時間與正常解析宏塊所處幀的碼流所需的時間相當(dāng),使得在應(yīng)用本 方法時不中斷解碼器,不影響解碼器的實時解碼速度;與現(xiàn)有的五步檢測法相比,本發(fā) 明方法的檢測速度較五步檢測法快2-3倍;與現(xiàn)有的掩蓋法相比,在同等情況下,雖然 圖像恢復(fù)的效果差不多,但運算復(fù)雜度明顯降低,運算速度較現(xiàn)有的掩蓋法快1-1.5倍; 與AVS視頻標(biāo)準(zhǔn)自帶的條帶掩蓋算法相比,容錯效果是其3-4倍;此外,該方法適合于大
多數(shù)的實際視頻處理應(yīng)用場合,尤其對發(fā)生錯誤的但變化較為平緩的圖像具有很好的恢 復(fù)效果。
圖1為AVS視頻基本流的組成結(jié)構(gòu)示意圖2為本發(fā)明方法的流程圖3為當(dāng)前宏塊的邊界像素示意圖4為確定發(fā)生錯誤的宏塊的過程示意圖5為發(fā)生錯誤的宏塊的終止位置示意圖6為當(dāng)前宏塊與相鄰宏塊之間的關(guān)系示意圖7a為foreman序列的第7幀原圖像;
圖7b為對圖8a的原圖像進(jìn)行10%的隨機加錯后的錯誤圖像; 圖7c為對圖8b的錯誤圖像進(jìn)行錯誤掩蓋后的圖像; 圖8a為akiyo序列的第7幀原圖像;
圖8b為對圖9a的原圖像進(jìn)行10%的隨機加錯后的錯誤圖像; 圖8c為對圖9b的錯誤圖像進(jìn)行錯誤掩蓋后的圖像;
圖9為foreman序列的原圖像、錯誤圖像及掩蓋錯誤后的圖像的前10幀的每一幀 的平均峰值信噪比的比較示意圖10為akiyo序列的原圖像、錯誤圖像及掩蓋錯誤后的圖像的前10幀的每一幀的 平均峰值信噪比的比較示意圖。
具體實施方式
以下結(jié)合附圖實施例對本發(fā)明作進(jìn)一步詳細(xì)描述。
一種AVS視頻解碼的錯誤檢測與掩蓋方法,AVS視頻幀包括I幀、P幀和B幀, AVS視頻基本流如圖l所示,其包括視頻序列層、圖像層、條帶層、宏塊層和塊層,塊 層中包含有編碼該塊所需的全部DCT系數(shù),宏塊層(宏塊行)包括多個宏塊,每個宏 塊包括多個塊,條帶層(一個條帶)中包含有數(shù)據(jù)頭和多個宏塊行,圖像層中包含有數(shù) 據(jù)頭和多個條帶,條帶必須從宏塊行的第一個宏塊開始,視頻序列層中包含有數(shù)據(jù)頭和 圖像,視頻序列層、圖像層和條帶層均設(shè)置有同步碼,當(dāng)條帶層中的某一宏塊發(fā)生錯誤 時可通過重定位至下一個同步碼有效的避免錯誤的傳遞;在AVS視頻基本流中I幀、P 幀及B幀三者的圖像層的條帶數(shù)和條帶位置相同,該方法如圖2所示包括以下步驟-
(1) 、利用公知的語法/語義錯誤檢測方法,根據(jù)設(shè)定的檢測條件對基本流中已解碼 的部分進(jìn)行錯誤檢測,如果檢測到錯誤,則確定發(fā)生錯誤的宏塊,并繼續(xù)執(zhí)行;如果未 檢測到錯誤,則對基本流中未解碼的部分進(jìn)行解碼處理,并對基本流中已解碼的部分(原 己解碼的部分與剛解碼的部分)重新進(jìn)行錯誤檢測;本實施例中設(shè)定的檢測條件包括無 效碼值(如條帶的起始碼等)、無效VLC值(CBP (code block pattern,宏塊編碼模板), MVD (Motion Vector Difference,運動矢量差),TCOEF (Transform Coefficient,轉(zhuǎn)換系 數(shù))等)、運動矢量是否超出圖像外界、量化信息是否越界、無效的DC系數(shù)、DCT系 數(shù)是否越界、DCT系數(shù)個數(shù)是否超出64個以及條帶層的第一個宏塊是否在某宏塊行的 首地址等;
(2) 、定義預(yù)測錯誤宏塊為步驟(1)中的發(fā)生錯誤的宏塊的前一宏塊,同時定義 預(yù)測錯誤宏塊的內(nèi)部相關(guān)性AID (Average Inter-sample Difference)及預(yù)測錯誤宏塊與其 相鄰宏塊之間的外部相關(guān)性AIDB (Average Inter-sample Difference across Boundary),根 據(jù)內(nèi)部相關(guān)性和外部相關(guān)性對預(yù)測錯誤宏塊所處的條帶從預(yù)測錯誤宏塊開始向前檢測, 并根據(jù)設(shè)定的一個以上的門限值確定基本流中已解碼的部分發(fā)生錯誤的全部宏塊,如圖 4所示;同時定義發(fā)生錯誤的全部宏塊中的最前宏塊為當(dāng)前出錯宏塊,當(dāng)前出錯宏塊所 處的幀為當(dāng)前出錯幀;
由于AVS視頻編碼采用的是VLC,并且宏塊層和塊層沒有設(shè)置同步碼,故當(dāng)某一 段基本流發(fā)生錯誤時,從該錯誤點開始到下一條帶的起始位置為止這一段數(shù)據(jù)將被全部 損壞,此時,解碼器沒有必要再解碼這些錯誤的數(shù)據(jù),而通過以下步驟對錯誤進(jìn)行掩蓋 恢復(fù),避免錯誤繼續(xù)向下一個條帶傳遞,如圖5所示;
(3) 、判斷當(dāng)前出錯幀是否為I幀,如果是,則根據(jù)由當(dāng)前出錯宏塊的相鄰宏塊的 預(yù)測模式計算得到的當(dāng)前出錯宏塊的預(yù)測模式對當(dāng)前出錯宏塊進(jìn)行空域插值或?qū)⑶耙?幀同一位置上的宏塊直接復(fù)制覆蓋當(dāng)前出錯宏塊,并執(zhí)行步驟(4);如果不是,則繼續(xù) 判斷當(dāng)前出錯幀是否為P幀或B幀,如果是P幀,則當(dāng)當(dāng)前出錯P幀為鏡頭邊緣時, 根據(jù)由當(dāng)前出錯宏塊的相鄰宏塊的預(yù)測模式計算得到的當(dāng)前出錯宏塊的預(yù)測模式對當(dāng)前出錯宏塊進(jìn)行空域插值,并執(zhí)行步驟(4);當(dāng)當(dāng)前出錯P幀不為鏡頭邊緣時,對當(dāng)前 出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊采用P跳過編碼模式進(jìn)行錯誤掩 蓋,并執(zhí)行步驟(4);如果是B幀,則對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間 的所有宏塊采用B跳過編碼模式進(jìn)行錯誤掩蓋,并執(zhí)行步驟(4);
本實施例中相鄰宏塊包括左邊宏塊和上邊宏塊; 其具體步驟如下
(3a)、判斷當(dāng)前出錯幀是否為I幀,如果是,則當(dāng)與當(dāng)前出錯宏塊相鄰的左邊宏塊 《和上邊宏塊義2都存在時(如圖6所示),通過左邊宏塊X,的預(yù)測模式Pr^^,和上邊
宏塊X2的預(yù)測模式Prec^r2計算當(dāng)前出錯宏塊的預(yù)測模式Pre《/C2 ,
Pr"/C2:M"(Pre必,,Pre必》,當(dāng)只存在一個相鄰宏塊(只存在左邊宏塊Z,或上邊宏
塊%2 )或不存在相鄰宏塊(左邊宏塊X,和上邊宏塊義2都不存在)時,
Pr^/C2 = /nrra —8x8 —£>C,其中,/Wra_8x8—ZX7表示當(dāng)前8X8出錯宏塊的幀內(nèi)預(yù)測 模式,并繼續(xù)執(zhí)行;否則,確定當(dāng)前出錯幀為P幀或B幀,并執(zhí)行步驟(3c);
本實施例中為了增加預(yù)測的準(zhǔn)確性,當(dāng)上邊宏塊%2屬于上一個條帶時,也認(rèn)為它
存在;
(3b)、判斷當(dāng)前出錯I幀是否為AVS視頻的第1幀,如果是,則根據(jù)步驟Ga) 得到的預(yù)測模式PredC2對當(dāng)前出錯宏塊進(jìn)行空域插值,并執(zhí)行步驟(4);否則,判斷 前一幀同一位置上的宏塊是否為大運動宏塊,如果該宏塊是大運動宏塊,則根據(jù)步驟 (3a)得到的預(yù)測模式Prec/C2對當(dāng)前出錯宏塊進(jìn)行空域插值,如果該宏塊不是大運動 宏塊,則將前一幀同一位置上的宏塊直接復(fù)制覆蓋當(dāng)前出錯宏塊,并執(zhí)行步驟(4);
定義待判斷的宏塊的運動矢量為(M^c,M^),當(dāng)MF;o777^或MF;^777^時,確
定該宏塊為大運動宏塊;當(dāng)MFx〈77^^且M^〈77f^時,確定該宏塊為小運動宏塊;
其中,7W^為運動矢量門限值,其值為8; AVS視頻標(biāo)準(zhǔn)釆用1/4精度預(yù)測,因此,可
以認(rèn)為當(dāng)某宏塊運動超過2個像素時,即77/^=8時,該宏塊為大運動宏塊;
(3c)、判斷當(dāng)前出錯幀是否為P幀,如果是,則定義當(dāng)前出錯P幀中已解碼的宏
塊中編碼模式為幀內(nèi)編碼的宏塊數(shù)/"^raCow^為/WmCow加-Z/加ra —Co《,其中, /Wra_Coof,的值為0或1 ,當(dāng)/w/ra_Co《=0時,表示第/個宏塊的編碼模式是幀間編碼;—Co《-l時,表示第f個宏塊的編碼模式是幀內(nèi)編碼;及為當(dāng)前出錯P幀中己解
碼的宏塊的個數(shù),繼續(xù)執(zhí)行;否則,執(zhí)行步驟(3e);
(3d)、當(dāng)/加raCow"r〉^時,表示當(dāng)前出錯P幀為鏡頭邊緣,并采用與出錯幀為
I幀且為AVS視頻流的第一幀時相同的方法處理,并執(zhí)行步驟(4);當(dāng)/WraCowW〈^
時,則對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊采用P跳過編碼模式 進(jìn)行錯誤掩蓋,并執(zhí)行步驟(4);
(3e)、對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊的編碼模式采 用B跳過編碼模式進(jìn)行錯誤掩蓋,并執(zhí)行步驟(4)。
(4)、判斷基本流是否解碼完畢,如果不是,返回執(zhí)行步驟(1),如果是,則結(jié)束。
上述步驟中跳過模式是指當(dāng)前宏塊的前、后向運動矢量都是由后向參考圖像相應(yīng)位 置塊的運動矢量導(dǎo)出,無需傳輸運動矢量,當(dāng)前宏塊塊的運動補償?shù)臍埐钜簿鶠榱悖?該模式下宏塊只需要傳輸模式信號,而不需要傳輸運動矢量、補償殘差等附加信息,可 以節(jié)省運動矢量的編碼開銷。
上述步驟(2)包括以下具體步驟
① 定義預(yù)領(lǐng)!l錯誤宏塊的內(nèi)部相關(guān)性 J/D(C1)為
S E 1/"力—/(x -1,力l+Z Z 1/"力-^—"I
J/D(C1) = ^^--,其中,Cl表示預(yù)測錯
7Vx(M-l) + Mx(iV-l)
誤宏塊,/(x,力為預(yù)測錯誤宏塊中位置為Oc,力的像素的像素值,7V為預(yù)測錯誤宏塊在
垂直方向的塊的數(shù)量,M為預(yù)測錯誤宏塊在水平方向的塊的數(shù)量;
② 定義預(yù)測錯誤宏塊與與其相鄰的一個相鄰宏塊之間的外部相關(guān)性X/DS(C1:Z》
《
,其中,Cl表示預(yù)測錯誤宏塊,^j表示與預(yù)測錯
誤宏塊相鄰的一個相鄰宏塊,A'"為預(yù)測錯誤宏塊的內(nèi)部邊界的第"i個像素的像素值, ^°"'是預(yù)測錯誤宏塊的外部邊界的第/+1個像素的像素值,《為預(yù)測錯誤宏塊的邊界長
度;預(yù)測錯誤宏塊的內(nèi)部邊界和外部邊界像素如圖3所示;
③根據(jù)步驟②得到預(yù)測錯誤宏塊與所有相鄰宏塊之間的外部相關(guān)性ATOB(C1),^ras(ci)-^-,其中,s為與預(yù)測錯誤宏塊相鄰的相鄰宏塊的個數(shù),y為
下標(biāo);本實施例中預(yù)測錯誤宏塊的相鄰宏塊包括左邊宏塊^和上邊宏塊S,則它們之間
瞎部相關(guān)性為,軍)=扁(C,扁,;
④根據(jù)得到的內(nèi)部相關(guān)性和外部相關(guān)性對預(yù)測錯誤宏塊所處的條帶從預(yù)測錯誤宏
塊開始向前檢測,并判斷^/D(Cl)是否大于設(shè)定的第一門限值7T^, J/Z^(C1)是否大于
設(shè)定的第二門限值7^2,如果^ZD(C1)〉77^且X/I^(C1)〉77^,則確定基本流中發(fā)生錯
誤的全部宏塊,同時定義發(fā)生錯誤的全部宏塊中的最前宏塊為當(dāng)前出錯宏塊,當(dāng)前出錯 宏塊所處的幀為當(dāng)前出錯幀;第一門限值77/,和第二門限值77^均為可變值,通過對經(jīng)
典碼流序列foreman和akiyo進(jìn)行壓縮實驗,實驗時參數(shù)設(shè)置為每條帶包含4個宏塊 行,參考幀數(shù)目為2幀,帶B幀,其余為默認(rèn)參數(shù),然后對壓縮后的碼流按不同比率進(jìn)
行隨機錯誤千擾并進(jìn)行錯誤檢測。檢測結(jié)果表明,當(dāng)?shù)谝婚T限值77/,設(shè)定為16,第二門
限值77/2設(shè)定為26時,檢測的結(jié)果是比較理想的。
下面以利用本發(fā)明方法對經(jīng)典序列foreman的第7幀(如圖7a所示)和akiyo的第 7幀(如圖8a所示)進(jìn)行處理為例評價本發(fā)明方法,這兩幅圖像的大小均為352X288。 首先用AVS視頻參考編碼器rm52f對foreman和akiyo序列進(jìn)行壓縮,參數(shù)設(shè)置為每 個條帶包含4個宏塊,參考幀數(shù)目為2幀,帶B幀,其余參數(shù)默認(rèn);然后對壓縮后的碼 流模擬在Internet傳輸?shù)那闆r,對碼流按不同比率進(jìn)行隨機錯誤干擾,錯誤類型包括單 比特、多比特誤碼和數(shù)據(jù)丟失,本例中對兩序列分別進(jìn)行10%的隨機加錯后,分別如圖 7b和圖8b所示;最后采用基于PNX1500 DSP的實時解碼器對錯誤碼流進(jìn)行檢測和掩 蓋,對掩蓋處理后的foreman圖像和akiyo圖像分別如圖7c和圖8c所示。
分別計算foreman序列的原圖像、錯誤圖像和掩蓋錯誤后的圖像的每一幀的 PSNRavr (平均峰值信噪比),圖9給出了 foreman在10%的誤碼下前10幀圖像的每一 幀的PSNRavr(平均峰值信噪比);分別計算akiyo序列的原圖像、錯誤圖像和掩蓋錯誤 后的圖像的每一幀的PSNRavr (平均峰值信噪比),圖10給出了 akiyo在10%的誤碼下 前10幀圖像的每一幀的PSNRavr;從圖9和圖10中可以看出本發(fā)明方法對錯誤的且變 化比較平緩的圖像具有很好的恢復(fù)效果,與未進(jìn)行掩蓋錯誤前(錯誤圖像)相比,掩蓋 錯誤后平均每幀圖像約提高4-6dB。
權(quán)利要求
1、一種AVS視頻解碼的錯誤檢測與掩蓋方法,AVS視頻幀包括I幀、P幀和B幀,AVS視頻基本流包括視頻序列層、圖像層、條帶層、宏塊層和塊層,所述的視頻序列層、所述的圖像層和所述的條帶層均設(shè)置有同步碼,所述的條帶層包括由多個宏塊行組成的一個條帶,所述的宏塊行包括多個由多個塊組成的宏塊,在所述的AVS視頻基本流中,所述的I幀、所述的P幀及所述的B幀三者的圖像層的條帶數(shù)和條帶位置相同,其特征在于該方法包括以下步驟(1)、利用公知的語法/語義錯誤檢測方法,根據(jù)設(shè)定的檢測條件對基本流中已解碼的部分進(jìn)行錯誤檢測,如果檢測到錯誤,則確定發(fā)生錯誤的宏塊,并繼續(xù)執(zhí)行;如果未檢測到錯誤,則對基本流中未解碼的部分進(jìn)行解碼處理,并對基本流中已解碼的部分重新進(jìn)行錯誤檢測;(2)、定義預(yù)測錯誤宏塊為步驟(1)中的發(fā)生錯誤的宏塊的前一宏塊,同時定義預(yù)測錯誤宏塊的內(nèi)部相關(guān)性及預(yù)測錯誤宏塊與其相鄰宏塊之間的外部相關(guān)性,根據(jù)內(nèi)部相關(guān)性和外部相關(guān)性對預(yù)測錯誤宏塊所處的條帶從預(yù)測錯誤宏塊開始向前檢測,并根據(jù)設(shè)定的一個以上的門限值確定基本流中已解碼的部分發(fā)生錯誤的全部宏塊,同時定義發(fā)生錯誤的全部宏塊中的最前宏塊為當(dāng)前出錯宏塊,當(dāng)前出錯宏塊所處的幀為當(dāng)前出錯幀;(3)、判斷當(dāng)前出錯幀是否為I幀,如果是,則根據(jù)由當(dāng)前出錯宏塊的相鄰宏塊的預(yù)測模式計算得到的當(dāng)前出錯宏塊的預(yù)測模式,對當(dāng)前出錯宏塊進(jìn)行空域插值或?qū)⑶耙粠晃恢蒙系暮陦K直接復(fù)制覆蓋當(dāng)前出錯宏塊,并執(zhí)行步驟(4);如果不是,則繼續(xù)判斷當(dāng)前出錯幀是否為P幀或B幀,如果是P幀,則當(dāng)當(dāng)前出錯P幀為鏡頭邊緣時,根據(jù)由當(dāng)前出錯宏塊的相鄰宏塊的預(yù)測模式計算得到的當(dāng)前出錯宏塊的預(yù)測模式,對當(dāng)前出錯宏塊進(jìn)行空域插值,并執(zhí)行步驟(4);當(dāng)當(dāng)前出錯P幀不為鏡頭邊緣時,對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊采用P跳過編碼模式進(jìn)行錯誤掩蓋,并執(zhí)行步驟(4);如果是B幀,則對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊采用B跳過編碼模式進(jìn)行錯誤掩蓋,并執(zhí)行步驟(4);(4)、判斷基本流是否解碼完畢,如果不是,則返回執(zhí)行步驟(1),如果是,則結(jié)束。
2、 根據(jù)權(quán)利要求1所述的AVS視頻解碼的錯誤檢測與掩蓋方法,其特征在于所述 的步驟(3)包括以下具體步驟Ga)、判斷當(dāng)前出錯幀是否為I幀,如果是,則通過與當(dāng)前出錯宏塊相鄰的相鄰宏 塊的預(yù)測模式計算當(dāng)前出錯宏塊的預(yù)測模式Pr"/C2 ,Prec/C2-M/"(Prea^,…,PreW乂,…,PreflL^),其中,Pre化,、Pre必乂 、 PreaL^表示相鄰宏塊的預(yù)測模式,當(dāng)只存在 一 個相鄰宏塊或不存在相鄰宏塊時, Pr^/C2 = /"fra —8x8 —DC,其中,/Wra — 8x8 — DC表示當(dāng)前出錯宏塊的幀內(nèi)預(yù)測模式,并繼續(xù)執(zhí)行;否則,確定當(dāng)前出錯幀為P幀或B幀,并執(zhí)行步驟(3c);(3b)、判斷當(dāng)前出錯I幀是否為AVS視頻的第1幀,如果是,則根據(jù)步驟Ga) 得到的預(yù)測模式PredC2對當(dāng)前出錯宏塊進(jìn)行空域插值,并執(zhí)行所述的步驟(4);否則, 判斷前一幀同一位置上的宏塊是否為大運動宏塊,如果該宏塊是大運動宏塊,則根據(jù)步 驟(3a)得到的預(yù)測模式PredC2對當(dāng)前出錯宏塊進(jìn)行空域插值,如果該宏塊不是大運 動宏塊,則將前一幀同一位置上的宏塊直接復(fù)制覆蓋當(dāng)前出錯宏塊,并執(zhí)行所述的步驟 (4)。(3c)、判斷當(dāng)前出錯幀是否為P幀,如果是,則定義當(dāng)前出錯P幀中已解碼的宏 塊中編碼模式為幀內(nèi)編碼的宏塊數(shù)/WraO wW為/WraCmmf = Z/w/ra —,其中,/Wra —Co《的值為0或1,當(dāng)/加ra —Co《=0時,表示第^個宏塊的編碼模式是幀間編碼;當(dāng)Mra —0^=1時,表示第f個宏塊的編碼模式是幀內(nèi)編碼;及為當(dāng)前出錯P幀中已解碼的宏塊的個數(shù),繼續(xù)執(zhí)行;否則,執(zhí)行步驟(3e);(3d)、當(dāng)/加raCmm""^時,表示當(dāng)前出錯P幀為鏡頭邊緣,并采用與出錯幀為I幀且為AVS視頻第1幀時相同的方法處理,并執(zhí)行所述的步驟(4);當(dāng)/"/raCo"w/時,則對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊采用P跳過編碼模式 進(jìn)行錯誤掩蓋,并執(zhí)行所述的步驟(4);Ge)、對當(dāng)前出錯宏塊與下一個條帶開始處的宏塊之間的所有宏塊采用B跳過編 碼模式進(jìn)行錯誤掩蓋,并執(zhí)行所述的步驟(4)。
3、 根據(jù)權(quán)利要求1或2所述的AVS視頻解碼的錯誤檢測與掩蓋方法,其特征在于 所述的步驟(1)中的所述的設(shè)定的檢測條件包括無效碼值、無效VLC值、運動矢量是 否超出圖像外界,量化信息是否越界,無效的DC系數(shù)、DCT系數(shù)是否越界,DCT系 數(shù)個數(shù)是否超出64個以及條帶層的第一個宏塊是否在宏塊行的首地址。
4、 根據(jù)權(quán)利要求1或2所述的AVS視頻解碼的錯誤檢測與掩蓋方法,其特征在于 所述的步驟(2)包括以下具體步驟①定義預(yù)測錯誤宏塊的內(nèi)部相關(guān)性X/D(C1)為<formula>formula see original document page 4</formula>^^--,其中,ci表示預(yù)測錯Wx(M-1) + Mx(iV-l)誤宏塊,/(x,力為預(yù)測錯誤宏塊中位置為(x,力的像素的像素值,iV為預(yù)測錯誤宏塊在垂直方向的塊的數(shù)量,M為預(yù)測錯誤宏塊在水平方向的塊的數(shù)量;②定義預(yù)測錯誤宏塊與與其相鄰的一個相鄰宏塊之間的外部相關(guān)性^(/"5(Cl:義》<formula>formula see original document page 4</formula>,其中,Cl表示預(yù)測錯誤宏塊,^^.表示與預(yù)測錯誤宏塊相鄰的一個相鄰宏塊,A'"為預(yù)測錯誤宏塊的內(nèi)部邊界的第"l個像素的像素值, />廣是預(yù)測錯誤宏塊的外部邊界的第/ + 1個像素的像素值,K為預(yù)測錯誤宏塊的邊界長 度;③ 根據(jù)步驟②得到預(yù)測錯誤宏塊與所有相鄰宏塊之間的外部相關(guān)性^ffi必(Cl),<formula>formula see original document page 4</formula>其中,S為與預(yù)測錯誤宏塊相鄰的相鄰宏塊的個數(shù),_/為下標(biāo);④ 根據(jù)得到的內(nèi)部相關(guān)性和外部相關(guān)性對預(yù)測錯誤宏塊所處的條帶從預(yù)測錯誤宏 塊開始向前檢測,并判斷乂/D(Cl)是否大于設(shè)定的第一門限值77/,, 乂/D5(Cl)是否大于設(shè)定的第二門限值7^2,如果J/D(Cl)〉77/,且^/Z)5(C1)〉77^,則確定基本流中發(fā)生錯誤的全部宏塊,同時定義發(fā)生錯誤的全部宏塊中的最前宏塊為當(dāng)前出錯宏塊,當(dāng)前出錯 宏塊所處的幀為當(dāng)前出錯幀。
5、 根據(jù)權(quán)利要求4所述的AVS視頻解碼的錯誤檢測與掩蓋方法,其特征在于所述的第一門限值77/,和所述的第二門限值77/2均為可變值。
6、 根據(jù)權(quán)利要求5所述的AVS視頻解碼的錯誤檢測與掩蓋方法,其特征在于所述 的第一門限值77/, =16 ,所述的第二門限值7772 =26 。
7、 根據(jù)權(quán)利要求6所述的AVS視頻解碼的錯誤檢測與掩蓋方法,其特征在于所述 的大運動宏塊的判斷方法為定義待判斷的宏塊的運動矢量為(M^,MK;;),當(dāng)MVx>THmv或MVy>THmv時,確定該宏塊為大運動宏塊;當(dāng)MVx<THmv或MVy<THmv時,確定該宏塊為小運動宏塊;其中,THmv為運動矢量門限值,其值為8。
8、根據(jù)權(quán)利要求6所述的AVS視頻解碼的錯誤檢測與掩蓋方法,其特征在于所述 的相鄰宏塊包括左邊宏塊和上邊宏塊。
全文摘要
本發(fā)明公開了一種AVS視頻解碼的錯誤檢測與掩蓋方法,該方法通過語法/語義錯誤檢測和相關(guān)性檢測,能夠準(zhǔn)確的檢測出發(fā)生錯誤的宏塊,并通過利用前一正確解碼幀的條帶結(jié)構(gòu)來控制當(dāng)前出錯幀進(jìn)行錯誤掩蓋,保證了圖像的高質(zhì)量恢復(fù),同時避免了錯誤向下一個條帶傳遞;本方法中對出錯宏塊處理的時間與正常解析宏塊所處幀的碼流所需的時間相當(dāng),使得在應(yīng)用本方法時不中斷解碼器,不影響解碼器的實時解碼速度;與現(xiàn)有的五步檢測法相比,本發(fā)明方法的檢測速度較五步檢測法快2-3倍;與現(xiàn)有的掩蓋法相比,在同等情況下,雖然圖像恢復(fù)的效果差不多,但運算復(fù)雜度明顯降低,運算速度較現(xiàn)有技術(shù)快1-1.5倍;與AVS視頻標(biāo)準(zhǔn)自帶的條帶掩蓋算法相比,容錯效果是其3-4倍。
文檔編號H04N7/64GK101304538SQ20081006355
公開日2008年11月12日 申請日期2008年6月19日 優(yōu)先權(quán)日2008年6月19日
發(fā)明者楊文勇, 亮 謝, 鄭從卓, 晁 黃 申請人:寧波中科集成電路設(shè)計中心有限公司