本文來自Xiph.org的創始人Christopher Montgomery在Mozilla博客上的分享,他也是Mozilla Daala的貢獻者。Christopher Montgomery是多媒體圈的傳奇人物,Xiph.org于2000年推出Ogg Vorbis,2013年加入Mozilla,有興趣的同學可以去Google他的Wiki頁面。本文由LiveVideoStack摘譯,并由專業的多媒體工程師進行審校。時間倉促,如有錯誤請在留言中指出。
AV1是由開放媒體聯盟(AOM)開發的新一代通用視頻編解碼器。該聯盟是使用谷歌的VPx編解碼器,思科的Thor編解碼器和Mozilla的Xiph.Org的Daala編解碼器作為起點來開發新的編解碼器。AV1的性能超越了VP9和HEVC,使得其成為下一代編解碼器。AV1編解碼器擁有開源FOSS許可證,并且永遠是免版稅的。
作為探索AV1及首次應用于產品化編碼器系列文章的第二篇。系列的第一篇則發表于Xiph.org網站,研究了從亮度特征預測色度的技術。今天,我們將介紹約束定向增強濾波器技術。如果你一直想知道為什么要編寫一個編解碼器,那么請正襟危坐,仔細閱讀!
AV1中的濾波操作
實際上,所有的視頻編解碼器都使用增強濾波器來改善主觀輸出質量。
“增強濾波器”是指不需要編碼圖像信息或提高客觀編碼效率,而是使輸出在某種程度上看起來更好的技術。增強濾波器的使用必須非常小心,因為它們往往會丟失一部分信息。因此它們偶爾會被視為欺騙性作弊,以使得輸出質量看起來比實際更好。
但這是不公平的。增強濾波器旨在減輕或消除客觀指標盲目的,但對人眼來說是顯而易見的特定偽像。因此,即使濾波是作弊的一種形式,一個好的視頻編解碼器也需要它可以利用所有的實用有效的作弊手段。
濾波器可分為多個類別。首先,濾波器可以是規范的或非規范的。規范濾波器是編解碼器的必要部分;如果沒有它,就無法正確地解碼視頻。而非規范濾波器則為可選項。
其次,可根據濾波器的應用位置進行劃分。如:在編碼開始之前就應用于輸入的預處理濾波器,在解碼完成之后應用于輸出的后處理濾波器,以及在編碼循環中作為編碼處理的集成部分的環路濾波器。預處理和后處理濾波器通常是非規范的,位于編解碼器之外。根據定義來看,環路濾波器應該是規范的,它也是編解碼器本身的一部分;它們用于編碼優化過程,并應用于存儲的參考幀或幀間編碼。
AV1在編碼循環中使用了三個標準增強濾波器。第一個是去塊效應濾波器,它的功能就是其字面意思:消除編碼塊邊緣明顯的邊界偽影。盡管DCT相對非常適合于壓縮自然圖像中的相鄰像素的空間冗余,但它往往將誤差集中在塊邊緣處。請記住,消除這種塊效應傾向是Daala使用重疊變換的主要原因,但AV1是一種具有硬塊邊緣的更傳統的編解碼器。因此,它需要一個傳統的去塊效應濾波器來平滑塊邊緣的塊斑現象。
傳統的基于DCT塊的編解碼器中塊效應示例。塊邊緣的誤差因形成硬邊緣而特別明顯。更糟糕的是,DCT(以及DCT系列中的其他變換)傾向于將誤差集中在塊邊緣,從而使得問題變得更為復雜。
三個過濾器中的最后一個是環路恢復濾波器。它是由兩個可配置與可開關的濾波器,Wiener濾波器和Self-Guided濾波器組成。兩者均是卷積濾波器,通過構建卷積核以恢復原始輸入圖像的某些質量損失,并且通常用于去噪和/或邊緣增強。對AV1來說,它們是有效的通用去噪濾波器,通過可配置的模糊量來消除DCT 基礎噪聲。
這里,位于二者之間的過濾器,即約束定向增強濾波器(CDEF)是我們感興趣的并將重點介紹的濾波器;與環路恢復濾波器相同的是,它可以消除尖銳邊緣周圍的振鈴和基礎噪聲;但與環路恢復濾波器不同的是,它具有方向性。它可以順著邊緣,而不是像大多數濾波器那樣在所有方向上盲目濾波,這使得CDEF特別神奇;它也是視頻編碼中應用的第一個可實現且有用的方向濾波器。
CDEF漫長而曲折的道路
CDEF的故事并不是一帆風順的;它是漫長的,充滿了回溯、離題和死胡同。
CDEF將多個研究路徑結合在一起,每個路徑都為AV1中最終定稿的約束定向增強濾波器提供了一個想法或靈感。CDEF的“方向性”方面在實施中特別新穎,卻是從幾個不同的地方汲取了想法和靈感。
使用DCT變換或類DCT變換是要使用更少的數字來表示該像素塊。DCT非常擅長壓縮大多數視覺圖像中的能量,也就是說,它傾向于將分散的像素圖案集中至幾個重要的輸出系數中。
但DCT的壓縮效率也有例外。舉兩個最常見的例子,DCT并不能很好地表示方向邊緣或模式。如果我們繪制陡峭的斜邊緣的DCT輸出,會發現輸出系數也形成陡峭的斜邊!轉換后的邊緣是不同的,但它仍然存在,并且通常比它轉換前的更復雜—即壓縮失敗了!
如果有的話,銳利特征是基于DCT的編解碼器的傳統問題,因為它們不能很好地壓縮。在這里,我們看到一個尖銳的邊緣(左)及其DCT變換系數(右)。原始邊緣的能量以定向波紋圖案通過DCT輸出來傳播。
在過去的二十年中,視頻編解碼器研究越來越多地關注本質上帶有方向性的變換,濾波和預測方法,以便更好地表示方向性的邊緣和模式,并糾正DCT的這一基本限制。
經典定向預測器
定向幀內預測是現代視頻編解碼器中使用的最著名的定向技術之一。我們都熟悉H.264和VP9的方向性預測模式,編解碼器會基于已解碼塊周圍的像素來預測方向模式。目的是在變換之前去除(或大大減少)方向性邊緣中包含的能量。通過預測或去除無法壓縮的特征,我們可以提高編解碼器的整體效率。
AVC / H.264中, 4×4塊可使用的9種預測模式圖示:8種方向性預測,加簡單的DC預測。
運動補償,也可以算作一種方向預測。它是在特定方向上移動塊,也是在DCT之前預測消除冗余。塊的匹配是指向性的并在濾波之后完成。和幀內方向預測一樣,當匹配位置不是整像素時,會用到插值濾波器。
定向濾波器
如前面所提到的,視頻編解碼器大量使用濾波操作來消除塊效應和基底噪聲。盡管濾波器是用于二維平面,但濾波器本身往往可分解為水平濾波和垂直濾波兩步。
定向濾波技術嘗試在非水平或垂直的方向上進行濾波。該技術在圖像處理中已經很常見,其中噪聲消除和特殊效果濾波器通常是邊緣和方向感知的。然而,這些定向濾波器通常是基于對定向變換的輸出進行濾波。例如,我之前基于雙樹復數小波變換編寫的圖像去噪濾波器。
在視頻編碼領域我們最感興趣的定向濾波器是沿著一個方向來直接處理像素的,而不是對定向變換的頻域輸出結果進行濾波操作。如果你嘗試設計這樣一個怪異的濾波器,你很快就會遇到第一個關鍵的設計問題:當你的濾波器抽頭位置不再橫平豎直地坐落在網格排列的像素上時,你如何“沿”水平和垂直以外的方向呢?
一種可能是在高質量圖像處理中使用的經典方法:變換濾波器的內核并根據需要對像素空間重新采樣。有人甚至認為這是唯一的“正確”或“完善”的答案。這個方法用于亞像素運動補償和經常使用快速逼近的定向預測,但在沒有適當的重采樣的情況下往往無法取得很好的結果。
也就是說,即使是快速逼近法其代價也很高,因為你原本并不需要這么做。因此如果可能的話,盡量避免重新采樣步驟是值得的。速度方面的代價是視頻編碼中很少使用定向濾波的原因之一。
定向變換
定向變換試圖在其自身變換過程中解決DCT變換的邊緣壓縮問題。
實驗性的定向變換分為兩類。使用固有方向基的變換,例如定向小波。這類變換往往是過采樣/過完備,也就是說,它們產生的輸出數據多于輸入數據—而且通常是多很多。這看起來可能像是違背了初衷:原本你是想減少數據量,而不是增加!但是這些變換仍然能夠聚集能量,并且編碼器仍然選擇一些小的輸出子集進行編碼,因此它與普通的有損DCT編碼沒有什么不同。也就是說,過度完備的變換在內存和計算方面往往代價高昂。因此,它們并未在主流視頻編碼中占據一席之地。
第二類定向變換采用常規的非定向變換,如DCT,并通過改變輸入或輸出來修改它。改變可以是重采樣的形式,矩陣乘法(可以被視為重采樣的特殊形式)或者是改變輸入數據順序的技巧。
顯然,第二種變換是性能最強的,因為速度很快。重新排列數字并不需要數學運算。
使用像素和系數重新排列而非重采樣濾波器在不同方向上實現定向變換的兩個示例。
示例來自于論文An Overview of Directional Transforms in Image Coding,
(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.187.640&rep=rep1&type=pdf) by Xu, Zeng, and Wu。
一些實際的復雜性使得實現變得棘手。重排列以使對角線邊緣[大多數]成為垂直或水平線,使得輸入變為非方形矩陣。從概念上講,這不是問題;二維DCT變換是可分解的,而且因為我們可以獨立地運行行和列變換,所以我們可以簡單地為每個長度的行和列使用不同大小的一維DCT變換,如上圖所示。實際上,這意味著我們需要針對每種可能的列長度進行不同的DCT分解,這使得硬件團隊在實現時非常頭疼。
還有其他方法可以處理重新排列的非方形區域,或者提出重新采樣方案,以保持輸入方形或僅對輸出進行操作。下面提到的大多數定向變換論文討論了各種解決方案。
但是現在,定向變換的故事大多結束了。一旦你解決了方向變換的各種復雜問題并部署了一些實用的東西,出乎意料的原因使得它們在現代編解碼器中并不能應用—即定向變換技術與變塊尺寸技術競爭獲得收益。也就是說,在具有固定的塊大小的編解碼器中,單獨添加定向變換技術可以獲得不錯的性能提升。而單獨添加可變塊尺寸大小技術則可以獲得更好的收益。但聯合使用可變塊尺寸技術和定向變換技術相對單獨采用可變塊大小技術卻沒有任何收益??勺儔K大小技術已經有效地消除了方向變換所利用的同類冗余,至少是我們目前知道的并且已經處理地很成熟的那些冗余。
在Daala研究期間,Nathan Egge和我都進行了廣泛的定向變換實驗。我從輸入和輸出端考慮問題,使用稀疏矩陣乘法將對角線邊緣的輸出轉換為垂直/水平排列。Nathan通過重新排列的輸入對主流定向方法進行了測試。我們得出了相同的結論:額外的復雜度并沒有帶來客觀或主觀的收益。
Daala(以及其他編解碼器)中的定向變換可能是失敗的,但這一研究恰好回答了之前提出的問題:如何在沒有高昂代價的重采樣步驟的情況下快速沿邊緣濾波?答案是:不重新采樣。通過沿最近的整像素移動來估算角度。通過字面或概念上重新排列像素來估算轉換后的內核。這種方法會引入一些混疊,但它很有效,而且速度足夠快。
定向預測器,第2部分:Daala編年史
Daala方面關于CDEF的工作則是嘗試做一些完全不同的事情:常規的,枯燥的,定向的幀內預測。或者至少在Daala編解碼器中變成了常規。
在剛剛開始研究的時候,我寫了Daala的頻域幀內預測方案。這個方案背后的數學是有效的,對此沒有任何的擔憂。然而,一個簡單的實現需要巨大的矩陣乘法,這對于產品化的編解碼器來說太昂貴了。我們希望稀疏化——消除對預測沒有太大貢獻的矩陣元素——這樣就可以將計算代價降低到完整乘法的百分之幾。
稀疏化并未如預期的那樣發揮作用。至少在我們實現的過程中,為使技術變得切實可行,稀疏化丟失了太多的信息。
當然,Daala仍然需要某種形式的幀內預測,Jean-Marc Valin想到了一個方法:一個獨立的在空間域工作的預測編解碼器,然后再映射到頻域Daala編解碼器上。作為一種與Daala編解碼器協同工作但不依賴于Daala編解碼器的共生體,它不受Daala的搭接和頻域要求的限制。這就是Intra Paint。
應用于照片Sydney Harbor的Intra Paint預測算法的示例。視覺輸出方向明確,并且很好地遵循原始圖像中的邊緣和特征,邊緣清晰的同時產生令人愉悅(可能有些奇怪)的結果。
Intra paint的工作方式也很新穎;它僅沿著塊的邊緣編碼一維向量,然后沿所選方向掃描圖案。這就像噴出一系列彩色油漆點,然后在開放區域向不同方向大范圍延伸油漆。
Intra paint很有前景,并且自身會產生了一些非常漂亮的結果,但因效率不足以作為標準的內部預測器。它根本沒有獲得足夠的比特位來編碼它自己的信息。
原始悉尼港照片與Intra Paint結果之間的殘差。盡管Intra Paint的視覺效果令人滿意,但我們發現它不是一個客觀上準確的預測器。原始照片和Intra Paint結果之間的差異相當大,即使是沿著它看起來重現良好的許多邊緣也是如此。
Intra paint的“失敗”再次播下了不同想法的種子;盡管Intra paint對于預測器來說可能不夠客觀精確,但其大部分輸出主觀上看起來都很好。也許paint技術可以用作后處理濾波器器來改善主觀視覺質量?Intra paint很好地遵循尖銳邊緣,因此可能用于消除沿最強邊緣趨于最強的基礎噪聲。這是Daala原始paint-deringing濾波器背后的思路,最終演化為CDEF。
關于方向預測的主題還有一個有趣的提及,盡管它目前也是視頻編碼的死胡同。David Schleef實現了一個有趣的邊緣/方向感知重采樣濾波器,稱為邊緣定向插值(EDI)。其他編解碼器(例如VPx系列和AV1)已經嘗試了下采樣參考幀,傳送下采樣的參考幀以節省編碼比特,然后對參考幀進行上采樣以便以全分辨率使用。我們希望EDI提供的改進的上采樣/插值可以將該技術提高到可用的程度。我們還希望使用EDI作為運動補償中改進的亞像素插值濾波器。遺憾的是,這些想法均尚未實現。
縮小差距,合并思路
在這一點上,我已經描述了完成CDEF所需的所有主要背景,但按時間順序,這個故事涉及到更多長期的摸索。Intra paint產生了原始的Daala paint-dering濾波器,其重新實現了intra-paint算法以執行作為后濾波器的去除操作。事實證明,Paint-dering在生產中使用速度太慢了。
結果是,我們整理了從Intra paint學到的經驗教訓,最后放棄了實驗。Daala引入了Thor的CLPF一段時間,然后Jean-Marc基于Intra paint邊緣方向搜索(速度快且效果很好)和條件替換濾波器(CRF)構建了第二個更快的Daala去振鈴濾波器。CRF在某種程度上受到中值濾波器的啟發,產生類似于雙邊濾波器的結果,但本質上是高度可矢量化的,因此速度更快。
7抽頭線性濾波器vs受約束的替換濾波器的演示,應用于有噪聲的一維信號,其中噪聲旨在模擬量化對原始信號的影響。
最終的Daala去振鈴濾波器使用了兩個一維CRF濾波器,一個沿邊緣方向運行的7抽頭濾波器,以及一個較弱的5抽頭濾波器。兩個濾波器僅對整像素進行操作,不執行重采樣。那時,Daala 的去振鈴過濾器看起來很像我們現在所知的CDEF。
最近我們將Daala作為輸入編解碼器提交給AOM,這個中間濾波器促成了AV1 daala_dering實驗。思科也提交了自己的去振鈴濾波器,即Thor編解碼器中的約束低通濾波器(CLPF)。 有一段時間,兩個去振鈴濾波器共存于AV1實驗代碼庫中,它們可以單獨啟用,甚至可以一起運行。這使得在操作中能注意到在它們的操作中有效的協同作用,以及在濾波器各個階段中的其他相似之處。
因此,我們最終獲得了CDEF:將Cisco的CLPF濾波器和第二版本的Daala去振鈴濾波器合并為一個高性能,方向感知的去振鈴濾波器。
現代CDEF
CDEF濾波器很簡單,與我們之前的濾波器非常相似。它由我們之前使用過的三個部分(定向搜索,約束替換/低通濾波器和整像素抽頭放置)構成??紤]到這一點冗長的背景序言,你幾乎可以看看完成的CDEF并思考,“是嗎?其余部分在哪里?”CDEF是通過使濾波器的細節完全正確而不是僅僅使其變得越來越復雜而獲得的增益的示例。簡單有效才是目的。
方向搜索
CDEF在特定方向上運行,因此有必要確定該方向。使用的搜索算法與intra paint和paint-dering相同,并且有八個可能的方向。
當前CDEF濾波器的八個可能的濾波方向。每個方向塊中的編號行對應于方向搜索中的參數“k”。
我們通過計算輸入塊的“方向”變量來確定濾波器方向,每個方向一個數值,沿著所選方向的線上的所有像素被強制轉換為相同的值。然后我們選擇結果與原始塊最匹配的方向。方法是,對于每個方向d,我們首先找到每條線k中的像素的平均值,然后沿每條線求給定像素值與該線上像素的平均值之間的平方差的和。
選擇與輸入塊最佳匹配的方向d的示例過程。首先,我們確定每個方向的每個操作線k的平均像素值。如上圖所示,每條線k的每個像素設置為該平均值。然后,逐像素按平均預測值減去輸入值,再對殘差求和。選擇具有最低誤差/方差的方向作為最佳方向。
這給出了總平方誤差,最小總平方誤差即是我們選擇的方向。雖然上面的圖例也是如此,但沒有理由將平方誤差轉換為方差;每個方向都考慮相同的像素數,因此兩者都會選擇相同的答案。這就節省額外的除法操作!
這是計算方向誤差直觀,長期的方法。 我們可以將此機械過程簡化為以下等式:
在該等式中,E是誤差,p是像素,x_p是像素的值,k是上面方向圖中的編號行之一,N_(d,k)是方向d的編號行k的基數(像素數)。 這個等式在實踐中可以簡化; 例如,對于每個給定的d,第一項是相同的。最后,CDEF的AV1實現目前需要每像素5.875個加法和1.9375次乘法,并且可以進行深度矢量化,使得計算量小于8×8 DCT變換操作。
濾波器抽頭
CDEF濾波器在整個塊上逐個像素地工作。方向d選擇要使用的特定方向濾波器,每個濾波器由一組濾波器抽頭(即輸入像素位置)和抽頭權重組成。
CDEF從概念上構建了由兩個一維濾波器組成的方向濾波器。主濾波器沿選定的方向運行,就像Daala去環過濾器一樣。二級濾波器以交叉模式運行兩次,與主濾波器成45°角,就像Thor的CLPF一樣。
相對于所選方向d的主要和次要一維濾波器方向性的圖示。主濾波器沿選定的濾波器方向運行,二級濾波器以45°角穿過所選方向。塊中的每個像素都被相同地濾波。
濾波器以通常在像素之間放置理想抽頭位置的角度運行。我們選擇最接近的精確像素位置,注意構建對稱濾波器內核,而不是重新采樣。
濾波器中的每個抽頭也具有固定權重。濾波過程采用每個抽頭的輸入值,應用約束函數,將結果乘以抽頭的固定權重,然后將此輸出值加至被濾波的像素。
主要的和次要的抽頭位置以及濾波器方向的固定權重(w)。對于主要抽頭,偶數強度a = 2,b = 4,而對于奇數強度a = 3,b = 3。過濾后的像素以灰色顯示。
實踐中,主濾波器和二級濾波器并不是單獨運行的,而是組合成一步運行的單個濾波器內核。
約束函數
CDEF使用約束低通濾波器,其中每個濾波器抽頭的值首先用約束函數來處理(公式見下),參數如下:抽頭系數和被濾波的像素的殘差d,濾波器強度S和濾波器阻尼參數D:
約束函數會弱化或者完全排除那些與被濾波像素差異過大的像素。若抽頭系數與中心像素值(由強度參數S定義)的差值落在某一范圍,則被完整考慮;若差值落在強度和阻尼參數之間,則被約束。最終,超出阻尼參數的抽頭系數差值被忽略了。
約束函數的圖示。在兩個圖中,x軸表示中心像素和抽頭像素之間的差值(d),y軸表示約束函數的輸出值。左圖顯示了改變強度(S)的效果。右圖顯示了改變阻尼(D)的效果。
然后將約束函數的輸出值乘以與相對于中心像素的每個抽頭位置相關聯的固定權重。最后,將得到的值(每個抽頭對應一個值)加到中心濾波像素,得到最終的濾波像素值??偨Y為:
引入的(p)和(s)參數分別表示主要和次要抽頭組的值。
還有一些不難理解的實現細節,如四舍五入與修剪函數,都可以在完整的CDEF文件中找到。
結果
CDEF旨在圖像的硬邊緣附近消除或減少基礎噪聲和振鈴效應,同時也不模糊或損壞該邊緣。正如現在AV1中所使用的,效果細微但一致。將來有可能會更加依賴于CDEF。
圖像Fruits的編碼中減少振鈴/基礎噪聲的例子。第一個插圖特寫顯示未經CDEF處理的區域,第二個插圖顯示經CDEF處理后的相同區域。
增強濾波器的數值必須通過主觀測試來確定。更好的客觀指標數字產生的效果也不一定令人震驚,但是推動CDEF的視覺改進大多是在原始客觀測試工具(如PSNR或SSIM)的評估能力之外。
因此,我們進行了多輪主觀測試。首先是在CDEF的開發過程中(當時Daala dering和Thor CLPF仍然是技術競爭對手),然后對合并的CDEF濾波器進行更廣泛的測試。由于CDEF是前幾代編解碼器中從未出現過的新的濾波器,因此測試主要包括啟用了CDEF的AV1和不啟用CDEF的AV1。
對于高延遲配置,CDEF與no CDEF的主觀A-B比較結果。
主觀結果顯示,6個截斷中有3個具有統計學意義(p <.05)。這通常對應于編碼效率5-10%的提升,對于添加到其他成熟編解碼器的單個工具而言,這是一個相當大的獲益。
正如預期的那樣,客觀測試顯示了約1%的適度改進,但客觀測試僅在與主觀結果一致的情況下才有用。主觀測試是金牌標準,且主觀結果清晰明了。
測試還表明,在使用較少的編解碼器“工具”進行編碼時,CDEF的性能會更好;與定向變換一樣,CDEF正在與AV1中其他更復雜的技術競爭來獲得編碼收益。由于CDEF簡單,小巧,快速,因此可以提供未來降低AV1編碼器復雜度的方法。就解碼器復雜度而言,CDEF體現了AV1解碼器復雜度的3%~10%,具體將取決于該編解碼的配置。
-
解碼器
+關注
關注
9文章
1131瀏覽量
40680 -
濾波器
+關注
關注
160文章
7731瀏覽量
177699
原文標題:AV1:下一代視頻標準—約束定向增強濾波器
文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論