本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,尤其涉及一種圖像編解碼方法及裝置。
背景技術(shù):
視頻作為多媒體的主要承載煤質(zhì),視頻的分辨率已由標(biāo)清往高清、超高清的方向發(fā)展。目前,典型的高清分辨率有1280x720、1980x1080等,超高清4K有4096×2160、3840x2160等。目前,超高清4K廣泛應(yīng)用于與圖像或視頻有關(guān)的各個領(lǐng)域,而更高的8K也開始進(jìn)入試用階段。
視頻的廣泛傳播分發(fā)依賴于有效的視頻編碼技術(shù)。目前使用的視頻編碼標(biāo)準(zhǔn)有第二代視頻編碼標(biāo)準(zhǔn)H.264和第三代視頻編碼標(biāo)準(zhǔn)H.265,當(dāng)前絕大多數(shù)終端的播放器解碼器芯片均支持H.264。
另外,多核已成為當(dāng)前CPU的主流方向,因此,多核的應(yīng)用使得并行計算成為很多實時應(yīng)用的首選解決方案之一,而對于視頻編碼而言,并行編碼也是實時編碼的很重要的技術(shù)。例如x264等開源H264編碼器一般采用幀級并行,但是視頻的時域相關(guān)性會使相鄰幀之間有強(qiáng)的參考依賴,導(dǎo)致幀級并行性大受限制,當(dāng)視頻的分辨率過大或者過小,并行性能都不理想。對Intel-i7等多核CPU(基于x264)編碼不同分辨率視頻的編碼速度和CPU利用率對比發(fā)現(xiàn),對于4K編碼,由于幀級依賴性、分像素參考幀緩存過大、IO讀寫量大等因素,導(dǎo)致CPU利用率低,編碼速度慢,遠(yuǎn)遠(yuǎn)達(dá)不到實時性要求;而1080p(一種視頻顯示格式)卻可以輕易實現(xiàn)實時編碼,當(dāng)核數(shù)足夠時,多路1080p也可以進(jìn)程級并行且均可實時編碼,但簡單的核數(shù)增加并不能實現(xiàn)4K實時編轉(zhuǎn)碼。對這個問題,目前提供的解決方案為:把高分辨率源視頻切成多個小分辨率視頻分別并行編碼,最后再在解碼端把這些切分的部分視頻拼接起來,得到目標(biāo)分辨率視頻。
然而,上述解決方案雖然可以大幅度提升并行編碼能力,但是對于圖像劃分邊界會存在明顯的邊界效應(yīng),尤其是各個分塊時間因為完全獨立編碼,很可能同一時刻這些分塊視頻幀的幀類型、編碼量化參數(shù)、碼率、參考隊列和參考幀等都差異很大時,劃分邊界不連續(xù)效應(yīng)會更加明顯,這顯然會大大降低視頻主觀質(zhì)量。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種圖像編解碼方法及裝置,用以解決現(xiàn)有技術(shù)中的編解碼方法會存在明顯的邊界效應(yīng)、視頻質(zhì)量較差的問題,其技術(shù)問題如下:
一種圖像編碼方法,應(yīng)用于編碼端,所述方法包括:
對第一圖像按預(yù)設(shè)采樣比例和采樣方法進(jìn)行下采樣,獲得第二圖像,所述第一圖像為待編碼的高分辨率圖像或高分辨率視頻幀,或者,為對所述高分辨率圖像或所述高分辨率視頻幀進(jìn)行至少一次下采樣獲得的低分辨率圖像或低分辨視頻幀;
對所述第二圖像進(jìn)行編碼,獲得第二圖像碼流,并將所述第二圖像碼流發(fā)送至解碼端;
按預(yù)設(shè)的處理規(guī)則對所述第二圖像進(jìn)行處理,獲得與所述第一圖像具有相同分辨率的第三圖像;
將所述第三圖像與所述第一圖像作差,獲得第一差分圖像;
基于預(yù)設(shè)的偏移值將所述第一差分圖像的像素值調(diào)整到預(yù)設(shè)范圍內(nèi),獲得第二差分圖像;
對所述第二差分圖像按預(yù)設(shè)編碼方式進(jìn)行編碼,獲得第二差分圖像碼流,并將所述第二差分圖像碼流發(fā)送至所述解碼端,以便所述解碼端基于所述第二圖像碼流和所述第二差分圖像碼流重構(gòu)出所述第一圖像。
其中,所述按預(yù)設(shè)的處理規(guī)則對所述第二圖像進(jìn)行處理,獲得與所述第一圖像具有相同分辨率的第三圖像,包括:
對所述第二圖像按所述預(yù)設(shè)的采樣比例和采樣方法進(jìn)行上采樣,獲得與所述第一圖像具有相同分辨率的第三圖像;
或者,
對所述第二圖像進(jìn)行重構(gòu),獲得第二重構(gòu)圖像;
對所述第二重構(gòu)圖像按所述預(yù)設(shè)的采樣比例和采樣方法進(jìn)行上采樣,獲得與所述第一圖像具有相同分辨率的第三圖像。
其中,所述對所述第二差分圖像按預(yù)設(shè)編碼方式進(jìn)行編碼,獲得第二差分圖像碼流,包括:
對所述第二差分圖像進(jìn)行全圖像內(nèi)編碼,獲得一路差分圖像碼流;
或者,
將所述第二差分圖像劃分為多個分塊,獲得多個差分圖像分塊,
對所述多個差分圖像分塊分別進(jìn)行編碼,獲得多路差分圖像碼流。
所述方法還包括:
在對所述第二圖像進(jìn)行編碼時,存儲所述第二圖像的編碼參數(shù);
則,對所述第二差分圖像按預(yù)設(shè)方式的編碼方式進(jìn)行編碼,具體為:
通過所述第二圖像的編碼參數(shù)輔助確定所述第二差分圖像的編碼參數(shù),并基于所述第二差分圖像的編碼參數(shù)對所述第二差分圖像進(jìn)行編碼。
其中,所述對所述第二差分圖像按預(yù)設(shè)方式的編碼方式進(jìn)行編碼,包括:
當(dāng)所述第二差分圖像中的至少一個通道分量的值小于設(shè)定閾值時,對除所述至少一個通道分量之外的其它通道分量進(jìn)行編碼。
一種圖像解碼方法,應(yīng)用于解碼端,所述方法包括:
接收第二圖像碼流和第二差分圖像碼流;
對所述第二圖像碼流和第二差分圖像碼流進(jìn)行解碼,獲得第二圖像和第二差分圖像;
對所述第二圖像按預(yù)設(shè)采樣比例和采樣方法進(jìn)行上采樣,獲得第三圖像;
基于預(yù)先設(shè)定的偏移值調(diào)整所述第二差分圖像中像素的值,獲得第一差分圖像;
將所述第一差分圖像與所述第三圖像作和,獲得第一圖像。
其中,所述對所述第二差分圖像碼流進(jìn)行解碼,獲得所述第二差分圖像,包括:
當(dāng)所述第二差分圖像碼流為多路差分圖像碼流時,對所述第二差分圖像碼流進(jìn)行解碼,獲得多個差分圖像分塊;
將所述多個差分圖像分塊進(jìn)行拼接,獲得所述第二差分圖像。
其中,所述第二圖像碼流和所述第二差分圖像碼流攜帶有指示接收的碼流為第二圖像碼流還是為差分圖像碼流的碼流屬性信息,以及所述接收的碼流對應(yīng)分塊的索引信息;
則所述對所述第二圖像碼流和第二差分圖像碼流進(jìn)行解碼,獲得第二圖像和第二差分圖像,具體為:
依據(jù)所述碼流屬性信息,以及碼流對應(yīng)分塊的索引信息對所述第二圖像碼流和所述第二差分圖像碼流進(jìn)行解碼。
一種圖像編碼裝置,所述裝置包括:下采樣模塊、第一編碼模塊、處理模塊、第一計算模塊、第一調(diào)整模塊和第二編碼模塊;
所述下采樣模塊,用于對第一圖像按預(yù)設(shè)采樣比例和采樣方法進(jìn)行下采樣,獲得第二圖像,所述第一圖像為待編碼的高分辨率圖像或高分辨率視頻幀,或者,為對所述高分辨率圖像或所述高分辨率視頻幀進(jìn)行至少一次下采樣獲得的低分辨率圖像或低分辨視頻幀;
所述第一編碼模塊,用于對所述第二圖像進(jìn)行編碼,獲得第二圖像碼流,并將所述第二圖像碼流發(fā)送至解碼端;
所述處理模塊,用于按預(yù)設(shè)的處理規(guī)則對所述第二圖像進(jìn)行處理,獲得與所述第一圖像具有相同分辨率的第三圖像;
所述第一計算模塊,用于將所述第三圖像與所述第一圖像作差,獲得第一差分圖像;
所述第一調(diào)整模塊,用于基于預(yù)設(shè)的偏移值將所述第一差分圖像中的像素值調(diào)整到預(yù)設(shè)范圍內(nèi),獲得第二差分圖像;
所述第二編碼模塊,用于對所述第二差分圖像按預(yù)設(shè)編碼方式進(jìn)行編碼,獲得第二差分圖像碼流,并將所述第二差分圖像碼流發(fā)送至所述解碼端,以便所述解碼端基于所述第二圖像碼流和所述第二差分圖像碼流重構(gòu)出所述第一圖像。
其中,所述處理模塊包括:第一上采樣子模塊;
或者,包括重構(gòu)子模塊和第二上采樣模塊;
所述第一上采樣子模塊,用于對所述第二圖像按所述預(yù)設(shè)的采樣比例和采樣方法進(jìn)行上采樣,獲得與所述第一圖像具有相同分辨率的第三圖像;
所述重構(gòu)子模塊,用于對所述第二圖像進(jìn)行重構(gòu),獲得第二重構(gòu)圖像;
所述第二上采樣子模塊,用于對所述第二重構(gòu)圖像按所述預(yù)設(shè)的采樣比例和采樣方法進(jìn)行上采樣,獲得與所述第一圖像具有相同分辨率的第三圖像。
其中,所述第二編碼模塊,包括第一編碼子模塊;
或者,包括分塊子模塊和第二編碼子模塊;
所述第一編碼子模塊,用于對所述第二差分圖像進(jìn)行全圖像內(nèi)編碼,獲得一路差分圖像碼流;
所述分塊子模塊,用于將所述第二差分圖像劃分為多個分塊,獲得多個差分圖像分塊,
所述第二編碼子模塊,用于對所述多個差分圖像分塊分別進(jìn)行編碼,獲得多路差分圖像碼流。
所述裝置還包括:存儲模塊;
所述存儲模塊,用于在所述第一編碼模塊對所述第二圖像進(jìn)行編碼時,存儲所述第二圖像的編碼參數(shù);
則,所述第二編碼模塊,具體用于通過所述第二圖像的編碼參數(shù)輔助確定所述第二差分圖像的編碼參數(shù),并基于所述第二差分圖像的編碼參數(shù)對所述第二差分圖像進(jìn)行編碼。
其中,所述第二編碼模塊,具體用于當(dāng)所述第二差分圖像中的至少一個通道分量的值小于設(shè)定閾值時,對除所述至少一個通道分量之外的其它通道分量進(jìn)行編碼。
一種圖像解碼裝置,所述裝置包括:接收模塊、解碼模塊、上采樣模塊、第二調(diào)整模塊和第二計算模塊;
所述接收模塊,用于接收第二圖像碼流和第二差分圖像碼流;
所述解碼模塊,用于對所述第二圖像碼流和第二差分圖像碼流進(jìn)行解碼,獲得第二圖像和第二差分圖像;
所述上采樣模塊,用于對所述第二圖像按預(yù)設(shè)采樣比例和采樣方法進(jìn)行上采樣,獲得第三圖像;
所述第二調(diào)整模塊,用于基于預(yù)先設(shè)定的偏移值調(diào)整所述第二差分圖像中像素的值,獲得第一差分圖像;
所述第二計算模塊,用于將所述第一差分圖像與所述第三圖像作和,獲得第一圖像。
其中,所述解碼模塊,包括:解碼子模塊和拼接子模塊;
所述解碼子模塊,用于當(dāng)所述第二差分圖像碼流為多路差分圖像碼流時,對所述第二差分圖像碼流進(jìn)行解碼,獲得多個差分圖像分塊;
所述拼接子模塊,用于將所述多個差分圖像分塊進(jìn)行拼接,獲得所述第二差分圖像。
其中,所述第二圖像碼流和所述第二差分圖像碼流攜帶有指示接收的碼流為第二圖像碼流還是為差分圖像碼流的碼流屬性信息,以及所述接收的碼流對應(yīng)分塊的索引信息;
則所述解碼模塊,具體用于依據(jù)所述碼流屬性信息,以及碼流對應(yīng)分塊的索引信息對所述第二圖像碼流和所述第二差分圖像碼流進(jìn)行解碼
上述技術(shù)方案具有如下有益效果:
本發(fā)明提供圖像編解碼方法及裝置,首先對第一圖像(待編碼圖像或者視頻幀)按預(yù)設(shè)采樣比例和采樣方法進(jìn)行下采樣,獲得第二圖像,然后對第二圖像進(jìn)行編碼,獲得第二圖像碼流,接著按預(yù)設(shè)的處理規(guī)則對第二圖像進(jìn)行處理,獲得與第一圖像具有相同分辨率的第三圖像,進(jìn)而將第三圖像與第一圖像作差獲得第一差分圖像,為了保證第一差分圖像中像素值為正,基于預(yù)設(shè)的偏移值調(diào)整第一差分圖像,獲得第二差分圖像,最后對第二差分圖像進(jìn)行編碼,獲得第二差分圖像碼流,第二圖像碼流與第二差分圖像碼流發(fā)送至解碼端,解碼端基于第二圖像碼流和第二差分圖像碼流進(jìn)行解碼并重構(gòu)出第一圖像。對于本發(fā)明實施例提供的編解碼方法,由于圖像的上下采樣不會帶來明顯的邊界效應(yīng),只會導(dǎo)致圖像變得有些模糊,但是由于差分圖像的大部分像素值往往很小,將其累加到上采樣后的圖像,能夠填補(bǔ)因上下采樣丟失的細(xì)節(jié),而不會引入明顯的劃分邊界效應(yīng),圖像/視頻主觀質(zhì)量較好。并且,本發(fā)明還可實現(xiàn)向下多級低分辨率兼容,這對互聯(lián)網(wǎng)網(wǎng)站等需要同時提供多種端的分辨率碼流的應(yīng)用而言,大大減少存儲和傳輸帶寬,減少了很多低分辨率圖像/視頻重復(fù)編解碼的計算。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的圖像編碼方法的流程示意圖;
圖2為本發(fā)明實施例提供的圖像解碼方法的流程示意圖;;
圖3為本發(fā)明實施例提供的圖像編碼方法的一具體實例的實現(xiàn)方式的流程示意圖;
圖4為本發(fā)明實施例提供的與圖3示出的圖像編碼方法對應(yīng)的圖像解碼方法流程示意圖;
圖5為本發(fā)明實施例提供的圖像編碼裝置的結(jié)構(gòu)示意圖;
圖6為本發(fā)明實施例提供的圖像解碼裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實施例提供了一種圖像編碼方法,應(yīng)用于編碼端,請參閱圖1,示出了該圖像編碼方法的流程示意圖,可以包括:
步驟S101:對第一圖像按預(yù)設(shè)采樣比例和采樣方法進(jìn)行下采樣,獲得第二圖像。
其中,第一圖像為待編碼的高分辨率圖像或高分辨率視頻幀,或者,為對高分辨率圖像或高分辨率視頻幀進(jìn)行至少一次下采樣獲得的低分辨率圖像或低分辨視頻幀。
以高分辨率視頻幀為例,本發(fā)明實施例提供的圖像編碼方法可直接應(yīng)用于高分辨率視頻幀,還可應(yīng)用于高分辨率視頻幀下采樣后的第一級低分辨率視頻幀,也可應(yīng)用于第一級低分辨率視頻幀下采樣后的第二級低分辨率視頻幀,以此類推,本發(fā)明實施例可實現(xiàn)圖像或視頻的多級編解碼。
步驟S102:對第二圖像進(jìn)行編碼,獲得第二圖像碼流,并將第二圖像碼流發(fā)送至解碼端。
步驟S103:按預(yù)設(shè)的處理規(guī)則對第二圖像進(jìn)行處理,獲得與第一圖像具有相同分辨率的第三圖像。
其中,按預(yù)設(shè)的處理規(guī)則對第二圖像進(jìn)行處理,獲得與第一圖像具有相同分辨率的第三圖像的實現(xiàn)方式有多種。
在一種可能的實現(xiàn)方式中,先對第二圖像進(jìn)行重構(gòu),獲得第二重構(gòu)圖像,然后對第二重構(gòu)圖像按預(yù)設(shè)的采樣比例和采樣方法進(jìn)行上采樣,獲得與第一圖像具有相同分辨率的第三圖像。
在另一種可能的實現(xiàn)方式中,可對第二圖像按預(yù)設(shè)的采樣比例和采樣方法進(jìn)行上采樣,獲得與第一圖像具有相同分辨率的第三圖像。
步驟S104:將第三圖像與第一圖像作差,獲得第一差分圖像。
步驟S105:基于預(yù)設(shè)的偏移值將第一差分圖像中的像素值調(diào)整到預(yù)設(shè)范圍內(nèi),獲得第二差分圖像。
步驟S106:對第二差分圖像按預(yù)設(shè)編碼方式進(jìn)行編碼,獲得第二差分圖像碼流,并將第二差分圖像碼流發(fā)送至解碼端,以便解碼端基于第二圖像碼流和第二差分圖像碼流重構(gòu)出第一圖像。
編碼端進(jìn)行編碼后,將第二圖像碼流以及第二差分圖像碼流發(fā)送至對應(yīng)的解碼端進(jìn)行解碼。請參閱圖2,示出了與上述圖像編碼方法對應(yīng)的圖像解碼方法的流程示意圖,該方法可以包括:
步驟S201:接收第二圖像碼流和第二差分圖像碼流。
步驟S202:對第二圖像碼流和第二差分圖像碼流進(jìn)行解碼,獲得第二圖像和第二差分圖像。
步驟S203:對第二圖像按預(yù)設(shè)采樣比例和采樣方法進(jìn)行上采樣,獲得第三圖像。
步驟S204:基于預(yù)先設(shè)定的偏移值調(diào)整第二差分圖像中像素的值,獲得第一差分圖像。
步驟S205:將第一差分圖像與第三圖像作和,獲得第一圖像。
該第一圖像即為還原出的源高分辨率圖像,或者,為對源高分辨率圖像進(jìn)行至少一次下采樣獲得的低分辨率圖像。
本發(fā)明實施例提供的圖像編、解碼方法,首先對第一圖像(待編碼圖像或者視頻幀)按預(yù)設(shè)采樣比例和采樣方法進(jìn)行下采樣,獲得第二圖像,然后對第二圖像進(jìn)行編碼,獲得第二圖像碼流,接著按預(yù)設(shè)的處理規(guī)則對第二圖像進(jìn)行處理,獲得與第一圖像具有相同分辨率的第三圖像,進(jìn)而將第三圖像與第一圖像作差獲得第一差分圖像,為了保證第一差分圖像中像素值為正,基于預(yù)設(shè)的偏移值調(diào)整第一差分圖像,獲得第二差分圖像,最后對第二差分圖像進(jìn)行編碼,獲得第二差分圖像碼流,第二圖像碼流與第二差分圖像碼流發(fā)送至解碼端,解碼端基于第二圖像碼流和第二差分圖像碼流進(jìn)行解碼并重構(gòu)出第一圖像。對于本發(fā)明實施例提供的編解碼方法,由于圖像的上下采樣不會帶來明顯的邊界效應(yīng),只會導(dǎo)致圖像變得有些模糊,但是由于差分圖像的大部分像素值往往很小,將其累加到上采樣后的圖像,能夠填補(bǔ)因上下采樣丟失的細(xì)節(jié),而不會引入明顯的劃分邊界效應(yīng),圖像/視頻主觀質(zhì)量較好。并且,本發(fā)明實施例還可實現(xiàn)向下多級低分辨率兼容,這對互聯(lián)網(wǎng)網(wǎng)站等需要同時提供多種端的分辨率碼流的應(yīng)用而言,大大減少存儲和傳輸帶寬,減少了很多低分辨率圖像/視頻重復(fù)編解碼的計算。
下面以對第一圖像為目標(biāo)視頻中的任一視頻幀,且該視頻幀為高分辨率視頻幀為例,給出本發(fā)明實施例提供的圖像編碼方法的一具體實現(xiàn)過程,請參閱圖3,示出了圖像編碼方法的流程示意圖,該方法可以包括:
步驟S301:按預(yù)設(shè)的采樣比例和采樣方法對第一高分辨率視頻幀進(jìn)行下采樣,獲得低分辨率視頻幀,該低分辨率視頻幀的分辨率。
其中,第一高分辨率視頻幀對源高分辨率視頻幀。假設(shè)第一高分辨率視頻幀的分辨率為WxH,預(yù)設(shè)的采樣間隔為pxq,則可獲得分辨率為(W/p)x(H/q)的低分辨視頻幀。
在本實施例中,對第一高分辨率視頻幀進(jìn)行下采樣的方法有多種,在一種可能的實現(xiàn)方式中,可采用最鄰近法重采樣法(Nearest Neighbour Resampling)對第一高分辨率視頻幀進(jìn)行下采樣,在另一種可能的實現(xiàn)方式中,可采用雙線性/兩次線性重采樣法(Bilinear Resampling)對第一高分辨率視頻幀進(jìn)行下采樣。
步驟S302:對低分辨率視頻幀進(jìn)行編碼,獲得低分辨率碼流,并對低分辨率視頻幀進(jìn)行重構(gòu),獲得低分辨率重構(gòu)幀,將低分辨率碼流發(fā)送至解碼端。
在一種可能的實現(xiàn)方式中,可對低分辨率視頻幀進(jìn)行H264編碼。
可選的,在對低分辨率視頻幀進(jìn)行編碼時,可同時保存編碼參數(shù),如幀類型、每個分塊的參考幀隊列、參考幀以及運(yùn)動矢量等,示例性的,保存lowres_stat={pic_type,reflist,refidx,mv},這些參數(shù)可以用于輔助接下來的差分視頻幀的編碼,以提高編碼速度。
另外,在一種可選的實現(xiàn)方式中,在向解碼端發(fā)送低分辨率碼流時,可在低分辨碼流中增加碼流輔助信息,該碼流輔助信息中包括用于指示對源高分辨率視頻幀進(jìn)行下采樣所采用的采樣方法的指示信息,當(dāng)解碼端接收到低分辨率碼流時,可從碼流輔助信息中獲得下采樣方法,以便選擇同樣的下采樣方法對視頻幀進(jìn)行處理。
步驟S303:按預(yù)設(shè)的采樣比例和采樣方法對低分辨率重構(gòu)幀進(jìn)行上采樣得到與第一高分辨率視頻幀具有相同分辨率的第二高分辨率視頻幀。
在本實施例中,采用與上述下采樣相同的采樣比例pxq對低分辨率重構(gòu)幀進(jìn)行上采樣得到與第一高分辨率視頻幀具有相同分辨率的第二高分辨率視頻幀。
需要說明的是,本實施例先對低分辨率視頻幀進(jìn)行重構(gòu),獲得低分辨率重構(gòu)幀,再對低分辨率重構(gòu)幀進(jìn)行下采樣,獲得與第一高分辨率視頻幀具有相同分辨率的第二高分辨率視頻幀,這個過程會導(dǎo)致一幀的延遲,如果不希望有幀延遲,可以直接進(jìn)行下采樣,即直接對低分辨率視頻幀進(jìn)行下采樣,獲得與第一高分辨率視頻幀具有相同分辨率的第二高分辨率視頻幀。這兩種方式各有特點,第一種方式處理速度稍慢,但視頻幀質(zhì)量較好,第二種處理速度較快,但會使視頻幀的質(zhì)量有些許損失。實際應(yīng)用時,可基于具體需求進(jìn)行選取。
步驟S304:將第二高分辨率視頻幀與第一高分辨率視頻幀作差,獲得第一差分視頻幀。
步驟S305:基于預(yù)設(shè)的偏移值將差分視頻幀中的像素值調(diào)整到預(yù)設(shè)范圍內(nèi),獲得第二差分視頻幀。
其中,第二差分視頻幀與第一高分辨率視頻幀具有相同的分辨率。
需要說明的是,考慮到將第二高分辨率視頻幀與第一高分辨率視頻幀作差,獲得的第一差分視頻幀中,像素的值有正有負(fù),為了保證第一差分視頻幀中像素的值為正數(shù),預(yù)先設(shè)定偏移值offset,基于設(shè)定的偏移值offset對差分視頻幀中像素值進(jìn)行兩步處理:第一步,將第一差分視頻幀中像素的值限幅到[-offset,+offset],然后將限幅后獲得的像素值加上偏移值offset,對第一差分視頻幀中的像素進(jìn)行上述處理便得到了新的差分視頻幀,即上述的第二差分視頻幀,第二差分視頻幀中各個像素值均在區(qū)間[0,2*offset]內(nèi)。通常情況下,0<offset<128,優(yōu)選的,offset取16~64之間的值。
示例性的,第二高分辨率視頻幀中的兩個像素值分別是100和120,第一高分辨率視頻幀中對應(yīng)的兩個像素的值分別為120和110,在將第二高分辨率視頻幀與第一高分辨率視頻幀作差時,得到差值-20和10,假設(shè)偏移值offset設(shè)定為16,那么先將差值-20和10調(diào)整到[-16,16]范圍內(nèi),即得到-16和10,通常不希望圖像的像素值存在負(fù)數(shù),然后將差值-16和10均加上offset(即加上16),這樣得到了新的差值0和26,由此可見,第二差分圖像中各個像素的范圍肯定在區(qū)間[0,32]內(nèi)。
步驟S306:對第二差分視頻幀按預(yù)設(shè)的編碼方式進(jìn)行編碼,獲得第二差分視頻碼流,并將第二差分視頻碼流發(fā)送至解碼端,以便解碼端基于第二視頻碼流和第二差分視頻碼流重構(gòu)出第一視頻幀。
對第二差分視頻幀進(jìn)行編碼的實現(xiàn)方式有多種,在一種可能的實現(xiàn)方式中,可對第二差分視頻幀進(jìn)行全幀內(nèi)編碼,獲得一路差分視頻碼流。在另一種可能的實現(xiàn)方式中,可將第二差分圖像劃分為mxn個分塊,獲得mxn個差分圖像分塊,對mxn個差分圖像分塊分別進(jìn)行編碼,獲得mxn路差分視頻碼流。考慮的第二種編碼方式的編碼性能更高,優(yōu)選第二種編碼方式對第二差分視頻幀進(jìn)行編碼。
在采用上述第二種編碼方式進(jìn)行編碼時,可采用兩種編碼方式對各個分塊進(jìn)行編碼。在一種可能的方式中,對各個分塊進(jìn)行整體編碼,在另一種可能的實現(xiàn)方式中,可將各個分塊進(jìn)一步劃分為多個子塊,對每個分塊而言,對該分塊中的各個子塊進(jìn)行編碼。實際應(yīng)用時,可比較兩種編碼方式,從中選取編碼性能較高的編碼方式進(jìn)行編碼。在本實施例中,考慮到第二差分視頻幀中像素的值一般較小且波動值也較小,選取第一種編碼方式(即對各個分塊進(jìn)行整體編碼)即可。
需要說明的是,對于目標(biāo)視頻幀中的每個第一高分辨率視頻幀,均可獲得第二差分視頻幀,進(jìn)行編碼時,可對各個第二差分視頻幀進(jìn)行并行編碼,以提高編碼速度。
可選的,在一種可能實現(xiàn)方式中,在獲得第二差分視頻幀之后,為了降低碼率,可對第二差分視頻幀進(jìn)行濾波處理,然后將濾波處理后獲得的差分視頻幀按上述編碼方式進(jìn)行編碼??蛇x的,在另一種可能的實現(xiàn)方式中,在獲得第二差分視頻幀之后,考慮到第二差分視頻幀的數(shù)據(jù)量通常較小,可對其進(jìn)行無損壓縮,無損壓縮的方式有多種,例如zip、rar等,然后,對無損壓縮后的差分視頻幀按上述編碼方式進(jìn)行編碼。
另外,為了提高編碼速度,在進(jìn)行分塊編碼時,可利用上述步驟中保存的編碼參數(shù)輔助確定各個分塊對應(yīng)的幀類型、參考幀選擇以及初始運(yùn)動搜索點。這樣雖然會導(dǎo)致第二差分視頻幀的編碼比低分辨率視頻圖像的編碼延遲一幀,但是在絕大部分實時應(yīng)用中,一幀的延時是完全可以接受的。
同時,考慮到在第二差分視頻幀中的某個通道分量的值往往較小,為了進(jìn)一步降低碼率和編轉(zhuǎn)碼復(fù)雜度,當(dāng)?shù)诙罘忠曨l幀中至少一個通道分量的值小于設(shè)定閾值時,對除至少一個通道分量之外的其它通道分量進(jìn)行編碼。示例性的,第二差分視頻幀為YUV格式,當(dāng)?shù)诙罘忠曨l幀的色度UV分量值全為0時,只對亮度Y這一個通道分量進(jìn)行編碼,以進(jìn)一步降低碼率和編轉(zhuǎn)碼復(fù)雜度。
經(jīng)由上述步驟可知,經(jīng)編碼可獲得一路低分辨率視頻碼流以及mxn路差分視頻碼流(或者一路差分視頻碼流)。其中,低分辨率視頻碼流和差分視頻碼流可通過視頻流數(shù)據(jù)包的形式發(fā)送至解碼端,視頻流數(shù)據(jù)包可以但不限定為NAL包或者PES包。
為了保證解碼端在接收到低分辨率視頻碼流以及差分視頻碼流時,能夠成功解碼,在一種可能的實現(xiàn)方式中,可在向解碼端發(fā)送的視頻流數(shù)據(jù)包中攜帶碼流輔助信息,碼流輔助信息包括用于指示碼流屬性的指示信息(如碼流為低分辨率視頻碼流還是差分視頻碼流),以及,碼流對應(yīng)分塊的索引信息(例如,第二差分視頻劃分為mxn個分塊,該碼流對應(yīng)的分塊為第i塊)。
在另一種可能實現(xiàn)方式中,可通過對視頻流數(shù)據(jù)包的命名來指示碼流屬性,以及碼流對應(yīng)分塊的索引信息。示例性的,對視頻流數(shù)據(jù)包的名稱加后綴名_lowres以指示接收的碼流是低分辨率碼流,對視頻流數(shù)據(jù)包的名稱加后綴_mxn_i以指示接收的碼流為差分視頻碼流,且將第二差分視頻幀分成mxn塊,該碼流是與第i個分塊對應(yīng)的碼流。
在再一種可能的實現(xiàn)方式中,可針對編碼端和解碼端預(yù)先約定分塊劃分方式、視頻流數(shù)據(jù)包的發(fā)送次序。例如,預(yù)先約定對第二差分視頻幀按照2x2等分劃分,依次發(fā)送各個分塊的碼流。需要說明的是,如果預(yù)先進(jìn)行了約定等分的分塊方式,但不想按預(yù)先約定的分塊方式進(jìn)行分塊,則可以在碼流輔助信息或者碼流的Meta信息中說明各個分塊的分辨率和位置,如果是等分方式分塊,則只需要說明位置信息即可。示例性的,預(yù)先約定按2x2進(jìn)行等分劃分,而想按不等分的分塊方式進(jìn)行劃分或者想按4x4等分劃分,則在按不等分的分塊方式進(jìn)行劃分時,在碼流輔助信息或者碼流的Meta信息中說明各個分塊的分辨率和位置,在按4x4等分劃分時,在碼流輔助信息或者碼流的Meta信息中說明各個分塊的位置。這些信息以及差分視頻幀分塊的拼接將由播放器或者渲染器來進(jìn)行處理和最終合成,而不需要修改編碼器和解碼器。
編碼端編碼得到的低分辨率視頻碼流以及第二差分視頻碼流發(fā)送至解碼端進(jìn)行解碼。請參閱圖4,示出了與上述實施例提供的視頻編碼方法對應(yīng)的視頻解碼方法,該方法可以包括:
步驟S401:接收低分辨率視頻碼流和第二差分視頻碼流。
步驟S402:對分辨率視頻碼流進(jìn)行解碼獲得低分辨率視頻幀,并對第二差分視頻碼流進(jìn)行解碼,獲得各個差分圖像塊。
步驟S403:對低分辨率視頻幀按預(yù)設(shè)采樣比例和采樣方法進(jìn)行上采樣,獲得第二高分辨率視頻幀,并對各個差分圖像塊進(jìn)行拼接,獲得第二差分視頻幀。
需要說明的是,本實施例假設(shè)編碼端對第二差分視頻幀采用的編碼方式為分塊編碼,因此,對第二差分視頻碼流進(jìn)行解碼后,獲得是各個差分圖像塊,為了還原第二差分視頻幀,需要將各個差分圖像塊進(jìn)行拼接。如果編碼端對第二差分視頻幀采用的編碼方式為全幀內(nèi)編碼,則對第二差分視頻碼流解碼獲得的即是第二差分視頻幀。
可選的,為了減少差分圖像塊拼接的邊界效應(yīng),可對差分圖像的拼接邊界處進(jìn)行適當(dāng)?shù)钠交瑸V波等處理。
步驟S404:基于預(yù)先設(shè)定的偏移值調(diào)整第二差分視頻幀中像素的值,獲得第一差分視頻幀。
具體的,將第二差分視頻幀中各個像素的值減去偏移offset,獲得第一差分視頻幀。
步驟S405:將第一差分視頻幀與第二高分辨率視頻幀作和,獲得第一高分辨率視頻幀。
在獲得第一差分視頻幀之后,將其與第二高分辨率視頻幀相加,即可重構(gòu)出第一高分辨率視頻幀,即源高分辨率視頻幀。
需要說明的是,如果終端設(shè)備因為解碼能力帶寬等原因,只能播放低分辨率視頻,則刻直接單獨獲取和解碼低分辨率碼流即可。
需要說明的是,上述的編解碼方法僅是一示例,其針對的是源高分辨率視頻幀,對該源高分辨率視頻幀進(jìn)行一次下采樣,還可進(jìn)行多層次下采樣,每一層都分別提取差分視頻幀,從而可以實現(xiàn)向下多級低分辨率兼容,這對互聯(lián)網(wǎng)視頻網(wǎng)站等需要同時提供多種端的分辨率碼流的應(yīng)用而言,能夠大大減少存儲和傳輸帶寬。示例性的,3840x2160的視頻幀,下采樣可以得到一個1920x1080的低分辨率視頻幀和它對應(yīng)的差分視頻幀,對于該1920x1080的低分辨率視頻,還可進(jìn)一步下采樣得到一個960x540的第二級低分辨率視頻和它所對應(yīng)的第二級差分視頻幀,對于960x540的第二級低分辨率視頻幀,還可進(jìn)一步下采樣得到一個480x270的第三級低分辨率視頻幀和它所對應(yīng)的第三級差分視頻幀,以此類推。各級的編解碼方法均類似,其具體過程可參見上述實施例,在此不作贅述。
本發(fā)明實施例提供的編、解碼方法,首先對第一高分辨率視頻幀即源高分辨率視頻幀按預(yù)設(shè)采樣比例進(jìn)行下采樣,獲得低分辨率視頻幀,然后對低分辨率視頻幀進(jìn)行編碼,獲得低分辨率視頻碼流,接著按預(yù)設(shè)的處理規(guī)則對低分辨率進(jìn)行處理,獲得與第一高分辨率視頻幀具有相同分辨率的第二高分辨率視頻幀,進(jìn)而將第二高分辨率視頻幀與第一高分辨率視頻幀作差獲得第一差分視頻幀,為了保證第一差分視頻幀中像素值為正,基于預(yù)設(shè)的偏移值調(diào)整第一差分視頻幀,獲得第二差分視頻幀,最后對第二差分視頻幀進(jìn)行編碼,獲得第二差分視頻碼流,低分辨率視頻碼流與第二差分視頻碼流發(fā)送至解碼端,解碼端基于第二視頻碼流和第二差分視頻碼流進(jìn)行解碼并重構(gòu)出源高分辨率視頻幀。對于本發(fā)明實施例提供的編解碼方法,由于視頻幀的上下采樣不會帶來明顯的邊界效應(yīng),只會導(dǎo)致圖像變得有些模糊,但是由于差分視頻幀的大部分像素值往往很小,將其累加到上采樣后的圖像,能夠填補(bǔ)因上下采樣丟失的細(xì)節(jié),而不會引入明顯的劃分邊界效應(yīng),視頻主觀質(zhì)量較好,同時,本發(fā)明實施例提供的編解碼方法大大的擴(kuò)展了高分辨率視頻編碼的并行度,提高編碼速度,可用于實時應(yīng)用場景。并且,本發(fā)明實施例還可實現(xiàn)向下多級低分辨率兼容,這對互聯(lián)網(wǎng)網(wǎng)站等需要同時提供多種端的分辨率碼流的應(yīng)用而言,大大減少存儲和傳輸帶寬,減少了很多低分辨率視頻重復(fù)編解碼的計算。
另外,在對差分視頻幀進(jìn)行編碼時,可利用對應(yīng)的低分辨率視頻幀編碼信息輔助編碼,提高了差分視頻幀的編碼速度;只對Y分量一個通道進(jìn)行編碼,而不需對YUV三個分量通道進(jìn)行編碼,減少計算量和碼率;兼容已有的編解碼器,不需要語法層額外修改,適用于各種視頻圖像編碼標(biāo)準(zhǔn)。
與上述方法相對應(yīng),本發(fā)明實施例還提供了一種圖像編碼裝置,請參閱圖5,示出了該編碼裝置的結(jié)構(gòu)示意圖,該裝置包括:下采樣模塊501、第一編碼模塊502、處理模塊503、第一計算模塊504、第一調(diào)整模塊505和第二編碼模塊506;
下采樣模塊501,用于對第一圖像按預(yù)設(shè)采樣比例和采樣方法進(jìn)行下采樣,獲得第二圖像,其中,第一圖像為待編碼的高分辨率圖像或高分辨率視頻幀,或者,為對高分辨率圖像或高分辨率視頻幀進(jìn)行至少一次下采樣獲得的低分辨率圖像或低分辨視頻幀。
第一編碼模塊502,用于對下采樣模塊501采樣后的第二圖像進(jìn)行編碼,獲得第二圖像碼流,并將第二圖像碼流發(fā)送至解碼端。
處理模塊503,用于按預(yù)設(shè)的處理規(guī)則對下采樣模塊501采樣后的第二圖像進(jìn)行處理,獲得與第一圖像具有相同分辨率的第三圖像。
第一計算模塊504,用于將處理模塊503處理后的第三圖像與第一圖像作差,獲得第一差分圖像。
第一調(diào)整模塊505,用于基于預(yù)設(shè)的偏移值將第一計算模塊504計算得到的第一差分圖像中的像素值調(diào)整到預(yù)設(shè)范圍內(nèi),獲得第二差分圖像。
第二編碼模塊506,用于對第一調(diào)整模塊505調(diào)整后獲得的第二差分圖像按預(yù)設(shè)編碼方式進(jìn)行編碼,獲得第二差分圖像碼流,并將第二差分圖像碼流發(fā)送至解碼端,以便解碼端基于第二圖像碼流和第二差分圖像碼流重構(gòu)出第一圖像。
請參閱圖6,示出了與上述實施例提供的圖像編碼裝置對應(yīng)的圖像解碼裝置的結(jié)構(gòu)示意圖,可以包括:接收模塊601、解碼模塊602、上采樣模塊603、第二調(diào)整模塊604和第二計算模塊605。其中:
接收模塊601,用于接收第二圖像碼流和第二差分圖像碼流。
解碼模塊602,用于對接收模塊601接收的第二圖像碼流和第二差分圖像碼流進(jìn)行解碼,獲得第二圖像和第二差分圖像。
上采樣模塊603,用于對解碼模塊602解碼得到的第二圖像按預(yù)設(shè)采樣比例和采樣方法進(jìn)行上采樣,獲得第三圖像。
第二調(diào)整模塊604,用于基于預(yù)先設(shè)定的偏移值調(diào)整第二差分圖像中像素的值,獲得第一差分圖像。
第二計算模塊605,用于將第二調(diào)整模塊604調(diào)整得到的第一差分圖像與第三圖像作和,獲得第一圖像。
對于本發(fā)明實施例提供的圖像編、解碼裝置,由于圖像的上下采樣不會帶來明顯的邊界效應(yīng),只會導(dǎo)致圖像變得有些模糊,但是由于差分圖像的大部分像素值往往很小,將其累加到上采樣后的圖像,能夠填補(bǔ)因上下采樣丟失的細(xì)節(jié),而不會引入明顯的劃分邊界效應(yīng),圖像/視頻主觀質(zhì)量較好。并且,本發(fā)明實施例還可實現(xiàn)向下多級低分辨率兼容,這對互聯(lián)網(wǎng)網(wǎng)站等需要同時提供多種端的分辨率碼流的應(yīng)用而言,大大減少存儲和傳輸帶寬,減少了很多低分辨率圖像/視頻重復(fù)編解碼的計算。
上述實施例提供的圖像編碼裝置中的處理模塊的實現(xiàn)方式有多種,在一種可能的實現(xiàn)方式中,上述實施例提供的圖像編碼裝置中的處理模塊包括:第一上采樣子模塊。第一上采樣子模塊,用于對第二圖像按預(yù)設(shè)的采樣比例和采樣方法進(jìn)行上采樣,獲得與第一圖像具有相同分辨率的第三圖像。
在另一種可能的實現(xiàn)方式中,處理模塊可以包括重構(gòu)子模塊和第二上采樣模塊。其中,重構(gòu)子模塊,用于對第二圖像進(jìn)行重構(gòu),獲得第二重構(gòu)圖像;第二上采樣子模塊,用于對重構(gòu)子模塊重構(gòu)出的第二重構(gòu)圖像按預(yù)設(shè)的采樣比例和采樣方法進(jìn)行上采樣,獲得與第一圖像具有相同分辨率的第三圖像。
上述實施例提供的圖像編碼裝置中的第二編碼模塊的實現(xiàn)方式有多種,在一種可能的實現(xiàn)方式中,第二編碼模塊可以包括第一編碼子模塊。第一編碼子模塊,用于對第二差分圖像進(jìn)行全圖像內(nèi)編碼,獲得一路差分圖像碼流。
在另一種可能的實現(xiàn)方式中,第二編碼模塊,可以包括分塊子模塊和第二編碼子模塊。其中,分塊子模塊,用于將第二差分圖像劃分為多個分塊,獲得多個差分圖像分塊;第二編碼子模塊,用于對分塊子模塊分塊后的多個差分圖像分塊分別進(jìn)行編碼,獲得多路差分圖像碼流。
上述實施例提供的圖像編碼裝置還可以包括:存儲模塊。存儲模塊,用于在第一編碼模塊對第二圖像進(jìn)行編碼時,存儲第二圖像的編碼參數(shù)。
則,第二編碼模塊,具體用于通過第二圖像的編碼參數(shù)輔助確定第二差分圖像的編碼參數(shù),并基于第二差分圖像的編碼參數(shù)對第二差分圖像進(jìn)行編碼。
在上述實施例中,第二編碼模塊,具體用于當(dāng)?shù)诙罘謭D像中的至少一個通道分量的值小于設(shè)定閾值時,對除所述至少一個通道分量之外的其它通道分量進(jìn)行編碼。
上述實施例提供的圖像解碼裝置中,解碼模塊可以包括:解碼子模塊和拼接子模塊。其中,解碼子模塊,用于當(dāng)?shù)诙罘謭D像碼流為多路差分圖像碼流時,對第二差分圖像碼流進(jìn)行解碼,獲得多個差分圖像分塊;拼接子模塊,用于將多個差分圖像分塊進(jìn)行拼接,獲得第二差分圖像。
在上述實施例中,第二圖像碼流和第二差分圖像碼流攜帶有指示接收的碼流為第二圖像碼流還是為差分圖像碼流的碼流屬性信息,以及接收的碼流對應(yīng)分塊的索引信息。則解碼模塊,具體用于依據(jù)碼流屬性信息,以及碼流對應(yīng)分塊的索引信息對第二圖像碼流和第二差分圖像碼流進(jìn)行解碼。
本說明書中各個實施例采用遞進(jìn)的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的方法、裝置和設(shè)備,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。