專利名稱:編解碼坐標內插符關鍵字數據和關鍵值數據的裝置及介質的制作方法
技術領域:
本發明涉及用于編碼和解碼合成圖像的裝置和方法,尤其涉及用于編碼和解碼一種坐標內插符的裝置和方法,該坐標內插符使用每個都包括x、y、z成分的頂點坐標表示在一個基于關鍵幀的圖形動畫中的目標的每個頂點的位置。
背景技術:
三維(3D)動畫技術已經廣泛地采用在3D計算機游戲或虛擬現實計算機應用中。虛擬現實模型語言(VRML)是這種3D動畫技術的一個典型實例。
國際多媒體標準,例如用于場景(BIFS)的MPEG-4和虛擬現實模型語言(VRML),使用一個內插符節點支持基于關鍵幀的3D動畫。在MPEG-4BIFS和VRML中,有各種類型的內插符,包括標量內插符、位置內插符、坐標內插符、定向內插符、法線內插符和色彩內插符,這些內插符以及其功能和特性在表1中示出。
表1
在表1所示的內插符中,坐標內插符被用于表示在基于關鍵幀的動畫中構成3D目標的每一頂點位置上的信息,并且包括關鍵字和關鍵值字段。關鍵字段使用范圍在-∞和∞之間的不連續數字,表示在時間軸上每一關鍵幀的位置。每一個關鍵值字段規定了在由每一關鍵字表示的確定瞬時的構成3D目標的每一個頂點位置上的信息,并且包括三個成分x、y和z。每一個關鍵值字段包括與關鍵字段一樣多的關鍵字值。在這種基于關鍵幀的動畫中,預定的關鍵幀定位在一個時間軸的任意位置,并且由線性內插填充在關鍵幀之間的動畫數據。
由于MPEG-4 BIFS和VRML中采用線性內插,所以要求相當量的關鍵字數據和關鍵值數據來使用線性內插符把一個動畫表現得盡可能地自然和平滑。此外,為了存儲和發送這種自然和平滑的動畫,需要相當大容量的存儲器和可觀的時間。因此,最好是選擇壓縮內插符,以便使得更容易存儲和發送該內插符。
在已經采用在MPEG-4 BIFS中用于編解碼內插符節點的方法之一的預測MF字段編碼(PMFC)中,使用量化器、差分脈碼調制(DPCM)操作器和熵編碼器編碼坐標內插符的關鍵值數據,如圖1所示。參考圖1,量化器和DPCM操作器消除該關鍵值數據的冗余,該DPCM操作器把其操作的結果輸出到熵編碼器。然而,PMFC在對關鍵值數據進行編碼中不是充分有效,因為其只熵編碼從一般DPCM操作獲得的差分數據,并且僅考慮在一個動畫中構成3D目標頂點之間的空間相關性而不考慮在這種頂點之間的時間相關性,在一個基于關鍵幀的動畫中,這種時間相關性是很重要的。
發明內容
為了解決上述和其它問題,本發明的一個方面是提供一個用于編碼坐標內插符的裝置,包括一個關鍵字數據編碼器,其以高效率壓縮動畫關鍵字數據,同時縮減在數據當中的冗余度;和一個關鍵值數據編碼器,其考慮在關鍵值數據之間的時間相關性以及在關鍵值數據之間的空間相關而編碼關鍵值數據。
本發明的另一方面是提供一種用于解碼的裝置,解碼由根據本發明的用于編碼坐標內插符的裝置編碼的一個比特數據流。
本發明的另一方面是提供一種記錄介質,能夠以高壓縮比率提供一個高質量的動畫,其上記錄有由根據本發明的用于編碼坐標內插符的方法和裝置所編碼并且由根據本發明的用于解碼坐標內插符的方法和裝置待解碼的一個比特數據流。
因此,為了實現本發明的上述和其它方面,提供一個用于編碼坐標內插符的裝置,該坐標內插符包括指示在時間軸上的每一關鍵幀的位置的關鍵字數據;以及使用每一個都包括x、y和z成分的頂點的坐標表示在每一關鍵幀中的一個目標的每一頂點的位置的關鍵字數據。該裝置包括一個關鍵字數據編碼器、一個關鍵值數據編碼器和一個標題編碼器。該關鍵字數據編碼器包括一個第一量化器,其使用預定的量化比特量化坐標內插符的關鍵字數據,一個第一DPCM處理器,其產生該量化的關鍵字數據的差分數據,一個DND處理器,其根據在差分數據和在該差分數據當中的一個最大值和一個最小值之間的一個關系對于該差分數據執行一個DND操作,以及一個第一熵編碼器,其熵編碼從該DND處理器輸入的該差分數據。該關鍵值數據編碼器包括一個第二量化器,其使用預定的量化比特量化坐標內插符的關鍵值數據;一個第二DPCM處理器,其通過對于該量化關鍵值數據的每一頂點的成分執行一個預定的DPCM操作而產生基于量化關鍵值數據的每一頂點坐標的時間變化的差分數據和基于量化關鍵值數據的每一頂點坐標的空間變化的差分數據;一個字典編碼器,其產生表示每一頂點的DPCM的差分數據和已經對于該差分數據執行的一個DPCM操作模式的符號以及指示該符號的位置的索引;和一個第二熵編碼器,其熵編碼該符號和該索引。該標題編碼器,編碼為了解碼由該關鍵字數據編碼器和該關鍵值數據編碼器編碼的一個比特數據流所需要的信息。
為了實現本發明的上述以及其它方面,提供有一個用于解碼一個比特數據流的裝置,其中編碼有坐標內插符,該坐標內插符包括指示在一個時間軸上每一關鍵幀的位置的關鍵字數據和使用每一個都包括x、y和z成分的頂點坐標表示在每一關鍵幀中的一個目標的每一頂點的位置的關鍵值數據。該裝置包括一個關鍵字數據解碼器和一個關鍵值數據解碼器。該關鍵字數據解碼器包括一個標題解碼器,其解碼為了解碼來自輸入比特數據流的關鍵字數據和關鍵值數據所需要的標題信息并且輸出該解碼的標題信息;一個第一熵解碼器,其熵解碼該輸入的比特數據流并且輸出解碼的關鍵字數據的差分數據;一個反向DND處理器,其根據由該標題解碼器從該輸入比特數據流讀出的DND階數,通過對于該差分數據執行一個反向DND操作而擴展該熵解碼的關鍵字數據的差分數據的范圍;一個第一反向DPCM處理器,其對于從該反向DND處理器輸入的差分數據執行與從該標題解碼器輸入的DPCM的階數一樣多次的反向DPCM操作,并且輸出量化的關鍵字數據;以及一個第一反向量化器,其反向量化該量化的關鍵字數據并且輸出解碼的關鍵字數據。該關鍵值數據解碼器包括一個第二熵解碼器,其通過熵解碼該輸入的比特數據流而產生將要被字典解碼的數據,包括關鍵值數據的差分數據的符號、指示該符號的位置的索引和一個DPCM操作模式;一個字典解碼器,其根據從該標題解碼器輸入的一個字典解碼模式信息,通過執行一個字典解碼操作而產生關鍵值數據的差分數據;一個第二反向DPCM處理器,其根據該DPCM操作模式,通過恢復從該字典解碼器輸入的關鍵幀之間的差分數據和頂點之間的差分數據而產生量化數據;以及一個第二反向量化器,其通過反向量化該量化的數據而產生恢復的關鍵值數據。
為了實現本發明的上述以及其它方面,提供有一個比特數據流,其中編碼有坐標內插符,該坐標內插符包括指示在一個時間軸上每一關鍵幀的位置的關鍵字數據和使用每一個都包括x、y和z成分的頂點坐標表示在每一關鍵幀中的一個目標的每一頂點的位置的關鍵值數據。該比特數據流包括關鍵字數據編碼/解碼信息,其中編碼有關鍵字數據和為了解碼該關鍵字數據所需要的信息;和關鍵值數據編碼/解碼信息,其中編碼有關鍵值數據和為了解碼該關鍵值數據所需要的信息。該關鍵字數據信息包括反向DND操作信息,包括表示將要對于由熵解碼該比特數據流產生的差分數據執行的反向DND的預定的周期數的反向DND的階數,以便擴展該差分數據的范圍以及使用在反向DND操作的每一周期中的差分數據當中的最大和最小值;第一反向DPCM操作信息,包括將要對于該反向DND的差分數據執行的反向DPCM操作的階數,以便把該反向DND的差分數據轉換成被用于反向DPCM操作的每一周期的關鍵字數據和幀內關鍵字數據;和使用在反向量化中的第一反向量化信息,以便通過反向量化該量化的關鍵字數據而產生恢復的關鍵字數據。該關鍵值數據編碼/解碼信息包括從該比特數據流熵解碼的字典解碼信息,包括關于表示被字典編碼的關鍵值數據的差分數據的符號的信息;第一位置索引,指示該符號的位置;和字典解碼模式,指示將要對于該第一位置索引執行的一個字典解碼方法;第二反向DPCM操作信息,包括指示符號位置的第二位置索引,其被使用在把每一頂點的成分的字典解碼的差分數據轉換成量化關鍵值數據的一個反向DPCM操作中,并且對應于反向DPCM操作模式的組合;以及使用在反向量化中的第二反向量化信息,以便通過反向量化該量化的關鍵值數據而產生恢復的關鍵值數據。
通過參照附圖對優選實施例的詳細描述,本發明的上述目的和優點將變得更為顯見圖1是傳統坐標內插符編碼器和傳統坐標內插符解碼器的框圖;圖2是一個根據本發明一個優選實施例的用于編碼坐標內插符裝置的框圖;圖3A是一個根據本發明一個優選實施例的關鍵字數據編碼器的框圖;圖3B是一個圖3A所示的DND處理器的框圖;圖4A至4G是一個按照本發明一個優選實施例用于編碼關鍵字數據方法的流程圖;圖5是一個表示函數encodeSignedAAC的一個實例的示意圖;圖6A至6J是表示關鍵字數據的示意圖,該關鍵字數據已經經過了一個按照本發明優選實施例的關鍵字數據編碼操作;圖7A是一個根據本發明優選實施例的關鍵值數據編碼器的框圖,而圖7B是一個根據本發明優選實施例的用于編碼坐標內插符的關鍵值數據的一種方法的流程圖;圖8A是一個在根據本發明優選實施例的關鍵值數據編碼器中的DPCM處理器的框圖,而圖8B是一個根據本發明優選實施例的字典編碼器的框圖;圖9A是一個根據本發明優選實施例的量化操作的流程圖,圖9B是一個根據本發明優選實施例的DPCM操作的流程圖,圖9C是一個根據本發明優選實施例的字典編碼操作的流程圖,而圖9D是一個根據本發明優選實施例的熵編碼操作的流程圖;圖10A至10C分別是說明量化的關鍵值數據、DPCM的關鍵值數據和循環量化的關鍵值數據的示意圖;
圖11A是一個說明根據本發明優選實施例的DPCM模式編碼方法的示意圖,圖11B是一個說明根據本發明優選實施例的出現模式編碼方法的示意圖,而圖11C是一個說明根據本發明優選實施例的增量模式編碼方法的示意圖;圖12是一個根據本發明一個優選實施例的用于解碼坐標內插符的裝置的框圖;圖13是一個根據本發明一個優選實施例的關鍵字數據解碼器的框圖;圖14A是一個根據本發明優選實施例的用于解碼關鍵字數據的一種方法的流程圖,而圖14B是圖14A所示步驟S14500的詳細流程圖;圖15A是一個根據本發明優選實施例的用于解碼關鍵值數據的裝置的框圖,而圖15B是根據本發明優選實施例的用于解碼關鍵值數據的一種方法的流程圖;圖16A是一個根據本發明優選實施例的字典解碼器的框圖,而圖16B是一個在根據本發明的一個用于解碼關鍵值數據的裝置中的反向DPCM處理器的框圖;圖17A是一個根據本發明優選實施例的字典解碼方法的流程圖,而圖17B是一個反向DPCM操作的流程圖;圖18A是一個表示比特數據流的結構的示意圖,該比特數據流包括坐標內插符的頂點和其成份數據;圖18B是一個表示程序代碼的實例的示意圖,通過該程序代碼實現使用在根據本發明的一個熵解碼器中的一個函數decodeSignedQuasiAAC();圖19A是一個說明根據本發明優選實施例的一種DPCM模式解碼方法的示意圖,圖19B是一個說明根據本發明優選實施例的出現模式解碼方法的示意圖,而圖19C是一個說明根據本發明優選實施例的增量模式解碼方法的示意圖;以及圖20A至20L是示出SDL程序代碼的實例的示出,通過該SDL程序代碼,實現根據本發明優選實施例的用于對坐標內插符的關鍵字數據和關鍵值數據進行解碼的裝置。
具體實施例方式
下面,將參照表示本發明優選實施例的附圖更詳細地描述根據本發明優選實施例的用于編碼坐標內插符的裝置。
圖2是根據本發明一個優選實施例的用于編碼坐標內插符的裝置的框圖。參考圖2,用于編碼坐標內插符的裝置包括關鍵字數據編碼器300,編碼輸入其中的坐標內插符的關鍵字數據;關鍵值數據編碼器700,編碼輸入其中的坐標內插符的關鍵值數據;和標題編碼器500,編碼為了解碼由關鍵字數據編碼器300編碼的關鍵字數據和由關鍵值數據編碼器700編碼的關鍵值數據所需要的信息。
下面參照圖3A至6J對關鍵字數據編碼器300進行描述。
圖3A是關鍵字數據編碼器300的一個框圖。參考圖3A,關鍵字數據編碼器300包括一個線性關鍵字編碼器310、一個量化器320、一個DPCM處理器330、一個移位器340、一個折疊處理器350、一個DND處理器360和一個熵編碼器370。
線性關鍵字編碼器310識別一個區域,其中該關鍵字數據在一個完整的關鍵字數據范圍中線性地增加,并且編碼該區域。量化器320使用能夠最小化一個量化誤差的量化方法量化輸入其中的關鍵字數據。DPCM處理器330接收量化的關鍵字數據并且產生該量化的關鍵字數據的差分數據。移位器340從所有的差分數據減去具有最高頻率的一個差分數據。折疊處理器350把所有的的差分數據變換到一個正數區域或一個負數區域。DND處理器360通過執行一個分割操作,然后有選擇地對于該差分數據執行一個上分割操作或一個下分割操作,來減小關鍵字數據的差分數據的范圍。熵編碼器370使用函數SignedAAC或UnsignedAAC編碼差分數據,由此在每個比特平面上編碼該差分數據。
下面,參照圖4A和4B描述關鍵字數據編碼器300的操作。圖4A和4B是根據本發明的用于編碼關鍵字數據的方法的流程圖。
當關鍵字數據被輸入到關鍵字數據編碼器300時,例如關鍵字數據的數量和關鍵字數據位數的信息被輸入到標題編碼器500并且隨后被編碼。在步驟S4000中,線性關鍵字編碼器310首先在該輸入的關鍵字數據中尋找一個線性關鍵字區域,即其中以確定的時間間隔出現關鍵幀、關鍵字數據具有相同的差值并且該關鍵字數據線性地關鍵字數據的一個區域,并且編碼該搜索的線性關鍵字區域。
例如3DMax或Maya的著名應用軟件使用在具體的區域之間具有預定的時間間隔的關鍵字來產生基于關鍵字幀的動畫。在此情況中,有可能使用一個線性關鍵字數據區域的開始和結束關鍵字數據以及存在于它們之間的關鍵幀的數目來容易地編碼關鍵字數據。因此,線性預測對于使用一個內插器在一個確定的區域中對關鍵字進行編碼是非常有用的。
下面方程式被用于線性預測。t(i)=tE-tSE-S+tS(0≤i≤E-S,S<E)....(1)]]>其中,tS表示一個局部線性區域開始之處的關鍵字的數據,tE表示表示一個局部線性區域結束之處的關鍵字的數據,S表示tS的一個索引,而E表示tE的一個索引。在從第S關鍵字數據到第E關鍵字數據的一個具體區域中的實際關鍵字數據之間的誤差以及遵循方程式(1)線性預測的關鍵字數據能夠使用下面的方程式計算。ei=t(i)-ti+S=tE-tSE-Si+tS-ti+S....(2)]]>如果使用方程式(2)計算的誤差當中的最大值不大于一個預定的臨界值,則ti能夠被認為是在區域[tS,tE]中或在一個確定誤差范圍之內的共線性的。使用下面方程式(3)確定該最大誤差值ti是否具有具體的區域共線性。Ep=MAXi=0,...(E-S)|ei|=MAXi=0,...(E-S)|tE-tSE-Si+tS-ti+S|...(3)]]>如果Ep≤12nBits+1,]]>ti則與區域[tS,tE]共線性。其中,nBits表示用于編碼的比特的數量。
如果線性關鍵字編碼器310尋找該局部線性區域,則該局部線性關鍵字數據區域的開始和結束關鍵字數據被輸出到一個浮點數轉換器315。包括在該線性關鍵字數據區域中的關鍵字的數目被輸出到標題編碼器500并且被編碼。使用線性編碼有可能顯著地降低需編碼的數據量。
在稍后描述的浮點數轉換器315中,使用浮點數轉換執行對于開始關鍵字數據和結束關鍵字數據的編碼。
浮點數轉換器315把二進制表示的關鍵字數據轉換成十進制關鍵字數據,以便編碼該開始關鍵字數據和結束關鍵字數據。
計算機以32比特的二進制數字存儲浮點數字。如果給出二進制表示的一個浮點數,浮點數轉換器315將把該浮點數轉換成十進制的一個尾數和一個指數,此過程由隨后方程式表示。
例如,一個浮點數12.34能夠通過計算機轉換成一個下面所示的二進制數。01100010101110000101000112100000103]]>1符號2二進制尾數3二進制指數該二進制數能夠遵循方程式(4)轉換成下列所示的十進制數。011234223]]>1符號2十進制尾數3十進制指數為了把十進制中的尾數和指數包括在一個比特數據流中,必須計算為了表示該尾數和該指數所要求的比特數目。具有在-38和38之間的一個值的指數因此能夠連同符號一起使用7比特表示。為了表示該尾數而需要的比特的數量取決于數字的位數。尾數的值和為了表示該尾數而需要的比特的數量以下表示出。
表2
已經尋找并且使用上述處理而轉換的該線性關鍵字數據區域的開始和結束關鍵字數據被遵循圖4C和4D所示的編碼處理編碼,輸出到標題編碼器500,并且存儲在該比特數據流中。
圖4C和4D示出對輸入到浮點數轉換器315的兩個浮點數字進行編碼的一個處理。將參考圖4C和4D描述浮點數轉換器205編碼一個浮點數的方法。
浮點數轉換器315接收原始關鍵字數據的位數Kd、開始關鍵字數據S和結束E,并且在步驟S4040中遵循方程式(4)對它們轉換。
浮點數轉換器315首先編碼S。具體地說,浮點數轉換器315檢驗S的位數是否不同于Kd。如果位數S不同于Kd,則獲得S的位數并且在步驟S4042中輸出到標題編碼器500。浮點數轉換器315使用函數Digit()獲得S的位數。
如果S的位數大于7,則在步驟4043中使用一個預定的比特數量把S輸出到標題編碼器500(在本發明中,按照IEEE標準754的浮點數方式使用32比特),以便在該比特數據流中能夠包括該S的位數。
如果該S的位數不是0并且小于7,則浮點數轉換器3 15在步驟4044中把S的符號輸出到標題編碼器。使用表格2獲得為了編碼S的尾數的絕對值需要的比特數目。隨后,使用在步驟4045中用表格2獲得的比特數目,把S的尾數的絕對值輸出到標題編碼器500。在步驟S4046中,浮點數轉換器315計算S的指數,輸出S的符號到標題編碼器500,并且輸出該指數到標題編碼器500,作為例如6比特的一個預定的數量。這種關鍵字數據轉換使得有可能顯著地降低包括在比特數據流中比特的數量。
如果S的位數是0,則對于該開始關鍵字數據的編碼結束,并且該方法轉到對該結束關鍵字數據E進行轉換的步驟,因為當該S的位數是0時,該對應浮點數也是0,不需要進行編碼。
在對開始關鍵字數據S進行轉換和編碼之后,浮點數轉換器315轉換結束關鍵字數據E。E的轉換幾乎與S的轉換相同。具體地說,在步驟S4047中驗證E的指數是否與S的指數相同。如果E的指數與S的指數相同,則只有表示E的指數與S的指數是相同的一個標記位被輸出到標題編碼器500。如果E的指數與S的指數不相同,則在步驟S4048中以與S的指數輸出到標題編碼器500的同樣方式把E的指數以及該標記位輸出到標題編碼器500。
在不屬于該線性關鍵字區域的輸入關鍵字數據當中的關鍵字數據被輸入到量化器320中,然后根據一個預定的量化比特大小nKeyQBit被量化。
但是,在用一個解碼器解碼該量化的關鍵字數據的情況下,由于在原始關鍵字數據和該量化關鍵字數據之間的誤差的原因,不可能的完全地恢復原始關鍵字數據。因此,本發明的量化器320獲得在輸入關鍵字數據當中的最大值和最小值,并且使用該最大和最小值量化該輸入關鍵字數據。此外本發明的量化器320包括一個量化誤差最小化器325,使得在原始關鍵字數據和其量化的關鍵字數據之間的誤差能夠使用在輸入關鍵字數據當中的該最大和最小值被最小化。
在步驟S4100,量化誤差最小化器325預先使用控制量化范圍的一種方法量化或反向量化該輸入的關鍵字數據,使得能夠最小化該量化誤差。
具體地說,如果用于量化的混合最大值是由Max表示,被控制用于量化的最小值由Min表示,輸入值由Xi表示,用于量化的比特數目由nQuantBit,則使用下面方程式獲得量化輸入值 、反向量化值 和誤差ei。X~i=floor(Xi-MinMax-Min*(2nQuantBit-1)+0.5)...(5)]]>X^i=X~i*(Max-Min)2nQuantBit-1+Min]]>ei=Xi-X^i]]>有兩種減小誤差取和∑ei的方法。一種降低誤差的取和的方法是通過連續控制器Min直到錯誤的取和被最小化。另外一種方法如下。
首先假定Xi=(i+n)Δx+εi,其中Xi表示一個輸入關鍵字數據序列,Δx表示輸入數據的一個基本步驟規模,n是一個任意的整數,而εi表示零平均隨機噪聲。
隨后,當di≡Xi-Xi-1=Δx+(εi-εi-1)時,Δ’x=E[di]并且Min=Max-Δ’x*(2nQuantBit-1).
有可能最小化一個量化誤差的Min同Max被輸入到量化器320,并且被用于關鍵字數據的量化。
量化器320接收最大值Max和能夠最小化量化誤差和的最小值Min,并且在步驟S4200中遵循方程式(6)量化關鍵字數據fKeyi。nQKeyi=floor(fKeyi-fKeyMinfKeyMax-fKeyMin(2nKeyQBit-1)+0.5)...(6)]]>其中,i表示量化后關鍵字數據的一個索引,nQKeyi表示量化關鍵字數據的整數的一個數組,fKeyi表示量化關鍵字數據的浮點數字數組,fKeyMax表示從量化誤差最小化器325輸入的最大值,fKeyMin表示從量化誤差最小化器325輸入的最小值,nKeyQBit表示量化比特的大小。在方程式(6)中,函數floor(v)是一個輸出不大于一個確定的浮點值v的最大整數的函數。
本發明的量化器320可以不使用降低一個量化誤差的算法,這時僅使用輸入關鍵字數據中的最大和最小值fKeyMax和fKeyMin進行量化。
參照圖4E更詳細地描述本發明的量化操作。
量化器320在步驟S4210中接收關鍵字數據,并且在步驟4220中檢測是否從量化誤差最小化器325輸入了最大和最小值MAX和MIN。
如果輸入了MAX和MIN,量化器320在步驟4230中分別把用于量化的最大和最小值fKeyMax和fKeyMin設置為MAX和MIN,并且把這新的最大和最小值fKeyMax和fKeyMin輸出到浮點數轉換器315。該最大和最小值fKeyMax和fKeyMin經過上述浮點數轉換處理而被轉換并且編碼,并且被輸出到標題編碼器500,使得它們能夠被包括在進行解碼中使用的一個關鍵字標題中。
如果沒有從該量化誤差最小化器325輸入的值,則在步驟S4240中,量化器320分別把第一關鍵字數據fKey0和最終關鍵字數據fKeyN-1設置為最小值fKeyMin和最大值fKeyMax。
隨后,量化器320在步驟S4250中檢驗最大值fKeyMax是否小于1但大于0,以及最小值fKeyMin是否大于0。如果最大值fKeyMax不小于1或不大于0,則該最大和最小值fKeyMax和fKeyMin被輸出到浮點數轉換器315,并且經過上述浮點數轉換過程被轉換和編碼。隨后,在步驟S4260中,已經轉換和編碼的最大和最小值fKeyMax和fKeyMin被包括在關鍵字標題中,使得它們可被用于進行解碼。
另一方面,如果最大值fKeyMax小于1并且最小值fKeyMin大于0,則在步驟S4270中檢驗的一個標志,該標志表示最大和最小值fKeyMax和fKeyMin是否將被包括在用于在進行解碼使用的關鍵字標題中。如果該標志被設置而使得最大和最小值fKeyMax和fKeyMin能夠被包括在該關鍵字標題中,則執行步驟S4260,以使最大和最小值fKeyMax和fKeyMin被輸出到標題編碼器500。如果沒有設置該標志,則量化器320將不允許該最大和最小值fKeyMax和fKeyMin包含在該關鍵字標題中。
在該最大和最小值fKeyMax和fKeyMin不被包括在該關鍵字標題中的一個情況中,關鍵字數據編碼器300和一個關鍵字數據解碼器被分別來執行編碼和解碼處理,分別以1和0建立該最大和最小值fKeyMax和fKeyMin。在此情況中,量化器320在步驟S4280中分別以1和0設置該最大和最小值fKeyMax和fKeyMin。對于該關鍵字數據解碼器來說,該最大和最小值fKeyMax和fKeyMin是已經知道的,使得fKeyMax和fKeyMin不需要包括在該關鍵字標題中。
通過將上述處理已經設置的最大和最小值fKeyMax和fKeyMin替代到方程式(6)中,量化器320在步驟S4290中量化該輸入的關鍵字數據,并且把該量化的關鍵字數據輸出到一個DPCM處理器330。
DPCM處理器330接收該量化的關鍵字數據,并且對于該量化的關鍵字數據執行預定的次數的DPCM。隨后,DPCM處理器330輸出DPCM的階數以及每一個周期中獲得的DPCM的幀內關鍵字數據到標題編碼器500,通過該DPCM的階數獲得分散程度中的最小值。在步驟S4300中,DPCM處理器330把由DPCM產生的差分數據輸出到移位器340。
參考圖4F,在步驟S4310中,DPCM處理器330對于輸入的關鍵字數據執行預定次數的DPCM,并且按照DPCM的階數存儲DPCM的周期數目。在本發明的一個優選實施例中,DPCM可以被執行三次。
然后,在步驟S4320中,DPCM處理器330計算DPCM的每一周期的結果的分散程度。這里,分散程度可以由分散角、標準偏差或四分位偏移表示,而在本發明的一個優選實施例中,可以使用四分位偏移。
隨后,DPCM處理器330選擇DPCM的一個周期,通過該DPCM周期能夠獲得在該分散程度中的最小值,并且把該選擇的DPCM階數的結果輸出到移位器340。在步驟S4330中,DPCM的選擇周期、DPCM的每一周期的幀內關鍵字數據以及用于DPCM所需要的信息的其它部分被輸出到標題編碼器500。然而在本發明的一個優選實施例中,如果關鍵字的數目小于5,則DPCM僅執行一次。例如,DPCM的第一周期的執行遵循方程式(7)。Δi=nQKeyi+1-nQKeyi…(7)其中,i表示量化后關鍵字數據的索引,nQKeyi表示整數數組,而Δi表示差分數據。
在步驟S4340中,DPCM處理器330計算為了對DPCM選擇的周期的結果進行編碼所要求的比特數目以及已經由DPCM在一個預定的存儲器中產生的該關鍵字數據的差分數據(nQStep_DPCM)。為了進行編碼所要求的比特數量的計算也可以稍后在選擇將要被編碼的關鍵字數據的隨后步驟中執行,這對本專業技術人員來說是顯然的。
移位器340從來自DPCM處理器330的輸入差分數據當中選擇具有最高頻率的一個差分數據(在下文稱作一個模式)。隨后,在步驟S4400中,移位器340從所有的差分數據減去該模式,以使大部分將要被編碼的數據圍繞0排列并且用于編碼所需要的比特數目能夠被減少。
這種移位操作通過從量化關鍵字數據減去模式nKeyShift進行,由下面方程式表示。
shift(nQKeyi)=nQKeyi-nKeyShift …(8)其中,i表示量化后關鍵字數據的一個索引,nQKeyi表示整數數組,而nKeyShift表示一個模式值。作為移位操作的結果,具有最高頻率的差分數據成為0,使得用于進行編碼所需要的比特數目能夠被顯著地降低。
已經通過該移位操作的關鍵字數據被輸出到折疊處理器350和DND處理器360,并且模式值nKeyShift被輸出到標題編碼器500,以使其被包括在該關鍵字標題中。
在步驟S4500中,折疊處理器350對于移位器340的輸出執行一個折疊操作,并且該折疊操作的結果輸出到DND處理器360。
該折疊操作被用于降低差分數據的范圍,通過把它們集中在正或負數區域中,該差分數據廣泛地散布在一個正數區域和一個負數區域之上。在本實施例中,折疊操作遵循方程式(9)執行,以便把差分數據集中在該正數區域中。
fold(nQKeyi)=2·nQKeyi(if nQKeyi≥0) …(9)=2|nQKeyi|-1(ifnQKeyi<0)其中,i表示量化后關鍵字數據的索引,而nQKeyi表示整數數組。作為折疊操作的結果,正差分數據被轉換成偶數,而負差分數據被轉換成奇數。
折疊處理器350計算為了編碼已經通過該折疊操作的差分數據所需的比特數量并且將其存儲在預定的存儲器nQStep_fold中。在此步驟中,用于編碼的所需比特數量的計算可以稍后在選擇將要被熵編碼的差分數據的一個隨后步驟中執行,像步驟S9300那樣,這對本專業人員來說是顯然的。由折疊處理器350中的折疊操作產生的數據被輸出到DND處理器360。
為了提高熵編碼的效率,在步驟S4600中DND處理器360對于該關鍵字數據執行預定次數的DND操作,因此降低差分數據的范圍。
參考圖3B,DND處理器360包括DND操作器362,對于差分數據執行DND操作;第一差分數據選擇器364,根據用于進行編碼的比特數目選擇將要被熵編碼的差分數據;上移操作器366對于已經通過DND操作的差分數據執行一個上移操作;和第二差分數據選擇器368,在僅通過DND操作的差分數據和已經通過上移位操作的差分數據之間選擇具有較低分散程度的差分數據,并且把所選擇的差分數據輸出到熵編碼器370。
在下面段落中將描述DND操作器362中執行的DND操作。
當該差分數據已經通過在該折疊處理器362中的折疊操作被輸入到DND操作器362中時,它們被分為兩組,具有比另一組差分數據更高范圍的一組差分數據通過一個分割函數被移到該正數區域。該分割函數由下面方程式定義。divide(nQKeyj,nKeyMax)......(10)]]>=nQKeyj-(nKeyMax+1)....(if nQKeyj>nKeyMax2)]]>=nQKeyj......(if nQKeyj≤nKeyMax2)]]>其中,j表示輸入差分數據的一個索引,nQKeyj表示整數的一個數組,而nKeyMax表示在已經通過該折疊操作的差分數據當中的一個最大值。特別地,在大部分差分數據沿著考慮所有的差分數據的整個區域的邊界密集填充情況下,則有可能使用該分割操作顯著地降低所有的差分數據的整個區域。
在該分割操作之后,計算該分散程度,其中用于進行編碼而需要的比特的大小被用作分散的度量,因此能夠選擇用于進行編碼的比特大小的最小值。
DND操作之后,進一步執行不同種類的DND操作,即上分割操作或下分割操作。根據差分數據的一個正范圍的大小和差分數據的一個負范圍的大小確定是否將進一步執行一個上分割操作或一個下分割操作。
如果具有正值的該差分數據范圍大于具有負值的該差分數據的范圍,則執行通過下面方程式定義的一個下分割操作。divide-down(nQKeyj,nKeyMax)........(11)]]>=-2(nKeyMax-nQKeyj+1)+1...(if nQKeyj>nKeyMax2)]]>=nQKeyj.....(if0≤nQKeyj≤nKeyMax2)]]>=2·nQKeyj.......(if nQKeyj<0)]]>另一方面,如果具有正值的差分數據的范圍大于具有負值的差分數據的范圍,則執行由如下方程式定義的一個上分割操作。divide-up(nQKeyj,nKeyMin).......(12)]]>=nQKeyj......(nQKeyj≥0)]]>=2·nQKeyj.....(nKeyMin2≤nQKeyj≤0)]]>=2(nKeyMin-nQKeyj-1)+1...(nQKeyj<nKeyMin2)]]>在方程式(11)和(12)中,j表示量化后關鍵字數據的一個索引,nQKeyj表示整數的一個數組,nKeyMax表示nQKeyj的一個最大值,而nKeyMin表示nQKeyj的最小值。
在下面將參照圖4G描述DND操作器362的操作。
當輸入的關鍵字數據的差分數據是來自折疊處理器350的輸入,則DND操作器362在步驟S4610中獲得在輸入差分數據當中的最大值nKeyMax和最小值nKeyMin。隨后,在步驟S4620中DND操作器362比較該nKeyMax的絕對值與nKeyMin的絕對值。如果nKeyMax不小于nKeyMin的絕對值,則在步驟S4622中DND操作器362把nKeyMax設置為在當前DND操作周期中的一個最大值。
DND操作器362檢測該DND操作的階數是否為1,換句話說,在步驟S4624中檢測DND操作的階數是否為1,并且如果其是1,則在步驟S4630中DND操作器362執行對于該輸入差分數據的一個分割操作,替代方程式(10)中最大值nKeyMax。
然后,DND操作器362在步驟S4640中使用函數getQBit()測量為了編碼已經使用該分割操作被減小的該差分數據范圍所需要的比特的大小。如果在步驟S4650中該DND操作的階數出現是1,則用于進行編碼所需要的比特大小被存為表示為了進行編碼的比特的最小大小的一個值nQBitDND,并且DND操作的階數在步驟S4655中被增加1。
隨后,該DND處理器362再一次執行步驟S4610至S4622。如果在步驟S4624中的DND操作的階數不是1,則該DND操作器252在步驟S4634中執行一個下分割操作,代替方程式(11)中的最大值nKeyMax。在步驟S4640中,DND操作器362計算用于編碼已經通過該下分割操作的該差分數據所需要的比特的數量。如果該數目小于在先前DND操作周期中存儲的該最小值nQBitDND,則在步驟S4658的DND操作之后替代用于編碼所需的比特的最小量。
如果在步驟S4620中該最小值nKeyMin的絕對值出現為大于最大值nKeyMax,則在步驟S4623中把DND操作的當前周期中的最大值更新為一個最小值,然后在步驟S4638中執行上分割操作,替代方程式12中的最小值nKeyMin。然后,DND操作器362在步驟S4640中計算用于編碼已經通過該上分割操作的差分數據的比特的數量。如果該計算的結果是小于已經在步驟S4652中的DND操作的預先周期中存儲的nQBitDND,則在步驟S4658中替代用于DND操作之后進行編碼所需的該最小比特數nQBitDND。
DND處理器362執行預定次數的DND操作,并且該DND操作的執行的數量可以改變。例如在本實施例中,該DND操作被執行7次。DND操作器362輸出nQBitDND和對應于nQBitDND的差分數據到第一差分數據選擇器364。DND操作器362把對應已經產生的差分數據的DND的階數輸出到標題編碼器500,并且使得它們被包括在該比特數據流中。
第一差分數據選擇器364接收已經通過該移位操作的差分數據、已經通過折疊操作的差分數據和已經通過DND操作的差分數據,并且在這三個差分數據當中確定將被熵編碼的差分數據。
參考圖3A,第一差分數據選擇器364選擇該DPCM的結果,并且如果在該DND操作以后的用于進行編碼所需的最小比特數目nQBitDND不小于在步驟S4700中的該DPCM操作之后的用于進行編碼的比特大小nQStep-DPCM,在步驟S4710中對于該DPCM的結果執行一個移位操作。隨后,在步驟S4710中,第一差分數據選擇器364把該移位操作的結果輸出到熵編碼器370,并且使得它們被熵編碼。在此情況下,DND操作的階數被設置在-1,被輸出到標題編碼器500,并且被包括在該關鍵字標題中。
但是,如果在步驟S3720中結果變為該nQBitDND小于nQStep-DPCM并且不小于折疊操作之后的用于進行編碼的比特的大小,則第一差分數據選擇器364把已經通過該折疊操作的該差分數據輸出到熵編碼器370,并且使得它們在步驟S4730中被熵編碼,其中DND操作的階數被設置在0,輸出到標題編碼器500,并且因此被包括在該關鍵字標題中。
如果在DND操作之后用于編碼該差分數據的比特數目是最小的,則第一差分數據選擇器364把已經通過該DND操作的差分數據輸出到該上移位操作器366,然后該上移位操作器366在步驟S4740中計算從第一差分數據選擇器364輸入的差分數據的第一分散程度。隨后,該上移位操作器366在步驟S4800中對于已經通過該DND操作的該差分數據執行由下面方程式定義的一個上移位操作,并且在步驟S4810中計算該上移位結果的一個第二分散程度。
shift-up(nQKeyj,nKeyMax) …(13)=nQKeyj(if nQKeyj≥0)=nKeyMax-nQKeyj(if nQKeyj<0)其中,j表示量化后關鍵字數據的差分數據的一個索引,nQKeyj表示整數的一個數組,而nKeyMax表示在差分數據當中的一個最大值。
當已經通過DND操作的差分數據和已經通過上移位操作的差分數據被輸入時,第二差分數據選擇器368在步驟S4900中把該第一分散程度與該第二分散程度相比較。如果該第二分散程度小于該第一分散度,則在步驟S4910中第二差分數據選擇器368把已經通過該上移位操作的差分數據輸出到熵編碼器370并且使得它們被熵編碼。該第二差分數據選擇器468把使用在該DND操作的最大和最小值nKeyMax和nKeyMin、以及使用在上移位操作中的最大值nKeyMax輸出到標題編碼器500,并且使得它們被包括在關鍵字標題中。
但是,如果該第一分散程度小于該第二分散程度,則第二差分數據選擇器368把已經通過該DND操作的差分數據輸出到熵編碼器370,并且使得它們在步驟S4920中被熵編碼。然后,第二差分數據選擇器368僅把使用在該DND操作中的該最大和最小值nKeyMax和nKeyMin輸出到標題編碼器500。在本發明的一個優選實施例中,標準偏差可以被用作該第一和第二分散程度的一個度量。
根據差分數據的特性,熵編碼器370對于差分數據執行兩個不同的操作。例如,已經通過DPCM操作和一個移位操作的差分數據,以及只通過一個分割操作的差分數據既有正值又有負值,并且因此要求執行每一差分數據的符號的編碼處理以及該差分數據本身的編碼處理。另一方面,由于已經通過折疊操作的差分數據僅有正值,所以執行僅編碼該差分數據的處理。
在本發明的一個優選實施例中,函數encodeSignedAAC被用于編碼該差分數據和其符號,而函數encodeUnsignedAAC被用于僅編碼差分數據。
圖5是表示一個函數encodeSignedAAC的一個實例的示意圖。參考圖5,當一個輸入值是74而用于編碼該輸入值的比特數目是8時,其符號是0,并且其與二進制數字1001010相同。符號以及整個比特平面以下列方式編碼第一步驟一個二進制數以從其最高有效比特(MSB)到其最低有效比特(LSB)的次序在每一比特平面上編碼一個二進制數;第二步驟檢驗當前正被編碼的比特是否為0;第三步驟如果當前被編碼的比特不是0,則該二進制數的符號被隨后編碼;和第四步驟該二進制數的其余比特被編碼。
使用關于該值的一個上下文,函數encodeUnsignedAAC把沒有符號的值編碼為一個自適應算法編碼比特數據流。除了存在一個符號上下文之外,此函數與函數encodeSignedAAC幾乎相同。
圖6A至6J是表示關鍵字數據的曲線示意圖,其關鍵字數據已經經過了按照本發明一個優選實施例的操作。在圖6A至6J中,該X軸表示每一個關鍵字數據的索引,而Y軸表示該關鍵字數據的值。
圖6A是表示輸入到該本發明的編碼器的原始關鍵字數據的一個曲線圖。圖6A所示的關鍵字數據被輸出到量化器320,然后以九個量化比特量化,以便獲得圖6B所示的量化的關鍵字數據。如果對于圖6B所示的量化關鍵字數據執行DPCM,則獲得圖6C所示的差分數據。
隨后,使用大約7的一個模式值移位該量化關鍵字數據的差分數據,以便獲得圖6D所示的差分數據。隨后,如果對于該移位的差分數據執行一個折疊操作,則可以獲得如圖6E所示的僅有正值的數據。
圖6F至6H示出對于圖6E示出的折疊數據執行一個DND操作的結果。具體地說,對于圖6F示出的折疊數據執行一個分割操作的結果。如圖6F所示,正關鍵字數據值范圍從0到28,而負關鍵字數據值范圍從29到0,其意味著負關鍵字數據值的范圍大于正關鍵字數據值的范圍。因此,要求對于圖6F中所示數據執行一個上分割操作,而該上分割操作的結果在圖6G中示出。
作為該上分割操作的結果,負關鍵字數據值的范圍被大大降低,使得其比正關鍵字數據值的范圍小得多。在DND操作的一個隨后周期中,對于該上分割操作的結果執行一個下分割操作。圖6H是表示對于圖6G所示差分數據執行一個下分割操作的結果。對于圖6H所示的關鍵字數據執行一個上移位操作的結果在圖6I中示出。
如圖6A至6G所示,關鍵字數據和差分數據的范圍逐步減小。然而,如圖6H和6I所示,上移位操作以后的差分數據的范圍比該操作之前的范圍增加得更大,這表明如圖6H所示該已經通過下分割操作的差分數據是最后唯一被編碼的差分數據,如圖6J所示。
下面段落將描述在標題編碼器500編碼并且存儲在關鍵字標題中的信息。
當輸入將要被編碼的關鍵字數據時,標題編碼器500編碼將要被編碼的關鍵字數據的數字數目和關鍵字數目。隨后,標題編碼器500從線性關鍵字編碼器310接收有關于輸入的關鍵字數據中是否存在已經通過該線性關鍵字編碼的一個線性關鍵字區域以及在該線性關鍵字數據區域中的關鍵字數據的數量的信息,并且從浮點數轉換器315接收該已經通過浮點數轉換的線性關鍵字數據區域的開始和結束關鍵字數據。
在浮點數轉換器315接收能夠實現一個最小量化誤差的最大和最小值并且把它們轉換成浮點數字的情況下,該轉換的最大和最小值被從浮點數轉換器315輸入到標題編碼器500,以使它們能被再一次用于進行反向量化。此外,量化比特的大小也被輸入到標題編碼器500并且被包括在該關鍵字標題中。
標題編碼器500從DPCM處理器330接收DPCM的階數以及在DPCM的每一周期中的內關鍵字數據,并且從移位器340接收已經用于一個移位操作的一個模式值。此外,標題編碼器500從DND處理器360接收有關是否已經執行一個上移動操作的信息,能夠最小化差分數據的分散程度的DND的階數的信息以及在DND操作的每一周期中的最大和最小值信息。
最終,標題編碼器500從熵編碼器370接收用于進行編碼的比特數目并且將其編碼作為一個關鍵字標題。
下面,參考圖7A至11C更詳細地描述根據本發明一個優選實施例的用于對坐標內插符的關鍵值數據進行編碼的一個裝置和方法。
圖7A是根據本發明優選實施例的關鍵值數據編碼器的框圖,而圖7B是根據本發明優選實施例的用于對坐標內插符的關鍵值數據進行編碼的一種方法的流程圖。
參考圖7A,關鍵值數據編碼器700包括量化器710,使用預定的量化比特量化輸入其中的坐標內插符的關鍵值數據每一頂點的成份的數據;DPCM處理器720,對于每一頂點的量化成分數據執行一個預定的DPCM操作;字典編碼器750,將差分數據轉換成符號和指示該符號的位置的索引;以及熵編碼器760,熵編碼輸入其中的符號和差分數據的索引。
在下面的段落中,參照圖7B描述用于編碼坐標內插符的關鍵值數據的方法。參考圖7B,在步驟S9000中以NXM矩陣的形式把坐標內插符的關鍵值數據輸入到量化器710。一個輸入的坐標內插符的關鍵值數據的實例在下列表中示出。
表3
在表3中,N表示關鍵字數據(關鍵幀)的數目,M表示每一關鍵幀中的頂點的數量。
根據本發明的關鍵值數據編碼器700以兩種不同模式操作來編碼坐標內插符的關鍵值數據。模式之一是頂點模式,而另外一個模式是轉置模式。表3中,示出以頂點模式在量化器710中量化的關鍵值數據的結構。在量化表3所示的輸入關鍵值數據之前,關鍵值數據編碼器700把輸入的關鍵值數據轉置成一個MHN矩陣。在解碼關鍵值數據過程中反向量化該轉置矩陣,并且把解碼的關鍵值數據轉換成NHM矩陣,使得能夠恢復與輸入關鍵值數據一樣的關鍵值數據。
參考圖7B,在步驟S9100中,量化器710檢查從外部輸入的關鍵值數據的編碼方式是否為轉置模式。如果輸入的關鍵值數據的編碼模式是一個轉置模式,則在步驟S9200中,輸入關鍵值數據的NHM矩陣被轉置成一個MHN矩陣。
然后,在步驟S9300中,量化器710以預定的量化比特量化輸入其中的該關鍵值數據矩陣中的每一個成分的數據,并且在步驟S9300把每一個成分的量化的關鍵值數據輸出到DPCM處理器720。在同一個步驟中,量化器710把在每一個成份的輸入的關鍵值數據當中的最小值和在該成份的數據范圍當中的最大范圍轉換成十進制數字,并且把該十進制數字輸出到標題編碼器500。
在步驟S9400中,DPCM處理器720對于輸入其中的量化的關鍵值數據執行一個時間DPCM操作、一個空間DPCM操作和一個時空DPCM操作,對于該三個不同的DPCM操作的結果,即對于從該三個DPCM操作獲得的每一差分數據執行一個循環量化操作,并且把在它們當中的具有最低熵值的差分數據輸出到字典編碼器750。
在步驟S9600中,字典編碼器750產生和輸出對應于從DPCM處理器720輸入的差分數據的字典符號Si,j和位置索引Ii,j。具體地說,字典編碼器750產生的該字典符號和該位置索引,表明已經對于該輸入差分數據執行的DPCM操作的模式,把該輸入的差分數據轉換成對應于該輸入差分數據值的符號或一個符號標志,和表示該符號的位置的位置索引,并且把該符號和位置索引輸出到熵編碼器760。
在步驟S9800中,熵編碼器760通過對從該字典編碼器750輸入的該符號和位置索引進行熵編碼而產生一個比特數據流。
下面,參照圖8A至11C更詳細地描述步驟S9300至S9800。
參考圖9A,在步驟S9320中,量化器710選擇在每一個成份數據當中的最大值和最小值。
在步驟S9340中,量化器710使用選擇的該最大和最小值計算該成分的數據范圍,并且確定在該成份的數據范圍當中的一個最大范圍。
在步驟S9360中,量化器710使用下面方程式所示的每一成份數據當中的最小值和各成份的整個數據范圍當中的最大范圍量化每一成分的關鍵值數據。V~i,j,x=floor(Vi,j,x-fMin_XfMax(2nKVQBit-1)+0.5)....(14)]]>V~i,j,y=floor(Vi,j,y-fMin_YfMax(2nKVQBit-1)+0.5)]]>V~i,j,z=floor(Vi,j,z-fMin_ZfMax(2nKVQBit-1)+0.5)]]>方程式(14)中,i表示關鍵數據,j表示一個頂點,而nKVQBit表示量化比特大小。此外,fMin_X、fMin_Y、fMin_Z表示在每一個成份的數據中的最小值,而fMax表示在該成份數據范圍中的最大范圍。
量化器710把每一成分的量化關鍵值數據輸出到DPCM處理器720,并遵循方程式(4)和表2,把fMin_X、fMin_Y、fMin_Z和fMax變換成十進制數字,并且把該十進制數字輸出到標題編碼器500。
下面將參照圖8A和9B更詳細地描述該DPCM處理器720的結構和操作。
圖8A是根據本發明的DPCM處理器720的一個框圖。參考圖8A,DPCM處理器720包括一個DPCM操作器730,對于從量化器710輸入的每一成份的數據執行一個時間DPCM操作、空間DPCM操作和一個時空DPCM操作,一個循環量化器740,降低從該DPCM操作器730輸入的差分數據的范圍,以及一個DPCM模式選擇器745,選擇從循環量化器740輸入的差分數據之一。DPCM操作器730包括一個時間DPCM操作器73 1,對于每一個成份的量化數據執行一個時間DPCM操作,一個空間DPCM操作器733,對于每一個成份的量化數據執行一個空間DPCM操作,以及一個時空DPCM操作器735,對于每一個成份的量化數據執行一個時空DPCM操作。
圖9B是根據本發明優選實施例的一個DPCM操作的流程圖。參考圖9B,在步驟S9420中,每一個成分的量化數據從量化器710輸入到時間DPCM操作器731、空間DPCM操作器733、和時空DPCM操作器735,然后在分別的操作器731、733以及735中對于每一個成分的量化數據執行時間DPCM操作、空間DPCM操以及時空DPCM操作。
時間DPCM操作器731計算在一個當前關鍵幀中的頂點的成分數據和在一個先前關鍵幀中的頂點的成分數據之間的差值。一個時間DPCM操作由下面方程式表示。Di,j=V~i,j-V~i-1,j........(15)]]>方程式(15)中,i表示關鍵字數據,j表示一個頂點的位置索引。
空間DPCM操作器733計算在同一個關鍵幀中的頂點之間的差值。具體地說,空間DPCM操作器733使用下面方程式計算前個頂點的熵,在當前頂點受到空間DPCM操作之前已經對于該前個頂點執行了空間DPCM操作。Entropy(P)=-Σi=0N-1Pilog2Pi....(16)]]>在方程式(16)中,Pi表示某符號在一個頂點產生的概率,并且等于Fi/N,其中Fi表示該符號被產生了多少次,而N表示關鍵字數據的數量。
空間DPCM操作器733把在該頂點中的具有該最低熵的一個頂點確定為一個參考頂點,并且計算在當前受到空間DPCM操作的一個頂點的數據和該參考頂點的數據之間差分數據。一個空間操作由下面方程式表示。Di,j=V~i,j-V~i,Ref.....(17)]]>
該時空DPCM操作器735對于該當前關鍵幀的頂點執行一個空間DPCM操作,使用在該先前關鍵幀的頂點中的一個對應于該當前關鍵幀的參考頂點、并作為參考頂點的頂點,對于該先前關鍵幀的頂點執行空間DPCM操作,并且計算在對應于該當前關鍵幀的頂點的差分數據和對應于該先前關鍵幀的頂點的差分數據之間的差分數據。換句話說,該時空DPCM操作器735對于該空間DPCM操作的結果執行一個時間DPCM操作。該時空DPCM操作由下面方程式表示。Di,j=V~i,j-{V~i-1,j+(V~i,Ref-V~i-1,Ref)}....(18)]]>在該空間DPCM操作和該時空DPCM操作過程中,如果 或{V~i-1,j+(V~i,Ref-V~i-1,Ref)}]]>小于在每一成分的量化數據中的最小值,則該最小值被用于空間DPCM操作和時空DPCM操作。另一方面,如果 或{V~i-1,j+(V~i,Ref-V~i-1,Ref)}]]>大于在每一成分的量化數據中的最大值,則該最大值被用于該空間DPCM操作和該時空DPCM操作。
在步驟S9440中,DPCM操作器730把計算的差分數據輸出到循環量化器740,而循環量化器740對于該時間DPCM的差分數據、空間DPCM差分數據和時空DPCM差分數據執行循環量化操作,并且把該循環量化的結果輸出到DPCM模式選擇器745。
圖10A是量化器710的一個輸出實例的曲線圖,而圖10B是對于圖10A中所示的量化數據執行DPCM操作的結果的曲線圖。如圖10B所示,通過執行對于量化數據的一個DPCM操作,將要被編碼的數據范圍能夠增加為其原數據范圍的兩倍。循環量化的目的是在保持量化值的數據范圍的同時執行一個DPCM操作。
在本發明中,假設在DPCM的差分數據中的一個最大值被循環連接到在DPCM的差分數據中的一個最小值而執行該循環量化。如果對于兩個連續量化數據執行的線性DPCM操作的結果大于在DPCM的差分數據中的最大值的一半,則從該線性DPCM的結果中減去從該DPCM的差分數據的一個最大范圍值,以便產生具有較小絕對值的一個差分數據。另一方面,如果該線性DPCM的結果小于該最大范圍中的一個最小值的一半,則把該最大范圍值加到該線性DPCM的結果,以便產生具有較小絕對值的一個值。
通過下面的方程式表示循環量化器740的操作。
CircularQuanti zation(Xi)…(19)X′i=Xi-(nQMax-nQMin+1)(if Xi≥0)X′i=Xi+(nQMax-nQMin+1)(otherwise) =min(|Xi|,|X′i|)在方程式(19)中,nQMax表示在DPCM的差分數據中的一個最大值,而nQMin表示在DPCM的差分數據中的一個最小值。圖10C示出對于圖10B所示的DPCM的差分數據執行循環量化的結果。
循環量化器740把該循環量化的差分數據輸出到DPCM模式選擇器745。
在步驟S9460中,DPCM模式選擇器745遵循方程式(16)計算從時間DPCM操作、空間DPCM操作和時空DPCM操作獲得的每一DPCM差分數據的熵。
下面,DPCM模式選擇器745在步驟S9480中選擇在時間DPCM操作、空間DPCM操作、時空DPCM操作的結果中具有最低熵的DPCM差分數據作為每一頂點的DPCM操作模式,并且把對應于該選擇的DPCM模式的該DPCM差分數據和關于該DPCM模式的信息輸出到字典編碼器750。
下面,參照圖8B和9C描述字典編碼器750及其操作。
圖8B是根據本發明的字典編碼器750的一個框圖。參考圖8B,字典編碼器750包括一個DPCM模式編碼器752,編碼已經對于輸入其中的每一個頂點的每一成分的數據執行的DPCM的模式,一個出現模式編碼器756,產生表示每一頂點的每一成分的差分數據的值的符號和表示該符號的位置的位置索引,一個增量模式編碼器758,產生對應于該符號和表示該符號位置的位置索引的一個符號標志,以及一個表格大小計算器754,計算用于表示每一頂點的每一成份的差分數據的符號表格以及一個符號標志表格的大小,并且把從DPCM模式編碼器752輸入的該差分數據輸出到該出現模式編碼器756或增量模式編碼器758之一。
字典編碼器750檢測每一頂點的每一成份的差分數據的一個量化選擇標志是否為1,如果是,則執行將在下面描述的后續處理。另一方面,如果某頂點的差分數據的量化選擇標志是0,即意味著該頂點整個關鍵幀中具有相同的量化值,則該字典編碼器750將省略字典編碼處理,并且把該量化值QMin編碼到一個關鍵字值標題。
圖9C是根據本發明的一個字典編碼處理的流程圖。參考圖9C,在步驟S9620中,在DPCM處理器720中已經產生的每一頂點的每一成份的差分數據被輸入到DPCM模式編碼器752中,然后DPCM模式編碼器752產生表示已經對于每一頂點的每一成份的數據執行的DPCM操作模式的符號,以及指示該符號的位置的位置索引。
圖11A是說明根據本發明的DPCM模式編碼器752中執行的編碼DPCM模式的一種方法的示意圖。參考圖11A,DPCM模式編碼器752預先制備一個表格,其中示出每一頂點的每一成份的DPCM模式和其分別的符號,如圖表4所示。表4示出DPCM操作的組合以及其對應符號。表4中,時間DPCM操作、空間DPCM操作和時空DPCM操作分別表示為T、S和T+S。
表4
每一頂點包括三個成分x、y和z,并且相應的DPCM操作的組合的數量是27。
如圖11A所示,根據該差分數據已經通過的DPCM操作,每一個頂點的差分數據對應于表4示出的符號之一。DPCM模式編碼器752使得該頂點的DPCM模式對應于表4中示出的分別的符號,并且設置標志,指示該符號存在于分別的頂點差分數據中。
DPCM模式編碼器752把對應于該頂點的DPCM模式的符號排列在一個列中,并且以從用于具有較小幅值的一個符號的位置索引到用于具有最大幅值的一個符號的位置索引的次序產生用于該符號的位置索引。
如圖11A所示,對應于該頂點差分數據的DPCM模式的符號的一個數組是(4,1,5,1,4,5)。在該符號當中,1是最小的符號,并且對應于(T,T,S)。DPCM模式編碼器752產生用于該符號1的一個位置索引,使得符號的數組中出現1的位置由1表示。因此,該位置索引是(0,1,0,1,0,0)。
隨后,DPCM模式編碼器752產生用于次最小符號4的位置索引,其對應于DPCM模式(T,S,S),使得其中4所在的位置由1表示。在用于符號4的位置索引的產生中,不計算符號1的位置。因此,針對該符號4的位置索引是(1,0,1,0)。以同樣方式,DPCM模式編碼器752產生用于符號5的位置索引,其對應于(T,S,T+S)。用于該符號5的位置索引是(1,1)。
隨后,DPCM模式編碼器752把該標志和該位置索引輸出到該表格大小計算器754。
再一次參考圖8B和9C,表格大小計算器754計算用于編碼在一個出現模式中的輸入的差分數據的一個符號表的大小(A),以及用于編碼在一個遞增模式中的輸入的差分數據的一個符號標志的大小(B),其對應于步驟S9640中在預先設置的符號表中的符號。
在步驟S9660中,表格大小計算器754把使用在該出現模式編碼器756中的符號表的大小(A=S*(AQP+1),其中S表示差分數據中包括的符號的數量而AQP表示用于表示一個符號的比特的大小)與對應分別符號的符號標志的大小(B=2AQP+1-1,其中AQP表示用于表示一個符號的比特的大小)相比較。
如果A小于B,則表格大小計算器754把每一個頂點的差分數據輸出到出現模式編碼器756,如果B小于A,則把該差分數據輸出到增量模式編碼器758。
下面參照圖11B描述出現模式編碼器756的操作。
在步驟S9680中,出現模式編碼器756產生對應于每一頂點的輸入差分數據的值的符號,以及表示其各自符號的位置的位置索引。
參考圖11B,當一個頂點的輸入差分數據是(3,7,3,7,-4,7,3,-4,3,7,-4,-4),時,該出現模式編碼器756制備一個表格,其中對應于每一頂點的差分數據的差分值的符號3,7,和-4被順序地寫入一行。
出現模式編碼器756編碼該符號數組中的第一個符號3并且產生針對該符號3的位置索引,以使3處在而位置由1表示而其它位置由0表示。針對該符號3的位置索引是(01000101000)。
隨后,出現模式編碼器756產生用于下一個符號7的位置索引。如圖11B所示,在用于下一個符號的位置索引的產生中,前個符號的位置不被再次計算。因此,針對該符號7的位置索引是(1010100)。
在出現模式編碼器756中,僅考慮尚未編碼的符號位置產生用于符號的全部位置索引,因此用于一個符號-4的位置索引是(111)。
在圖11B中,標志bSoleKV被設置為0。標志bSoleKV表示在差分數據的符號數組中一個符號是否僅出現一次。如果一個符號僅出現一次并且因此其位置索引僅包括0,則用于該對應符號的bSoleKV被設置為1,并且該對應符號的位置索引不被編碼。出現模式編碼器756把該輸入差分數據的符號、該符號的位置索引以及bSoleKV輸出到用于熵編碼差分數據的熵編碼器760。
下面參照圖11C描述根據本發明的增量模式編碼器758的操作。
在步驟S9690,增量模式編碼器758產生指示包括在一個預定符號表中的符號是否存在于輸入的差分數據中的一個符號標志以及用于該符號的位置索引。
增量模式編碼器758預先產生用于被期望存在于輸入差分數據中的符號的一個表格。在該表格中,以從具有最低絕對值的一個符號到具有最低大對值的一個符號的次序把符號排列在列中,并且在具有相同的絕對值的兩個符號之間,具有正值的一個符號被放置在比另一符號更高的行中。因此,符號寫入該表格中的次序是0,1,-1,2,-2,3,-3,…。對應于一個符號表中的符號的一個符號標志的大小為2AQP+1-1。例如,如果AQP是2,則能夠由一個符號標志表示的符號的數量是7。如果一個值對應于存在差分數據中的一個符號,則該符號標志設置為1。僅針對其符號標志被設置為1的符號產生位置索引。
參考圖11C,如果輸入到增量模式編碼器758的差分數據是(-1,-3,-1,-3,2,-3,-1,2,-1,-3,2,2),則存在于該差分數據中的符號是(-1,2,-3),因此確定該符號標志為(0,0,1,1,0,0,1)。
增量模式編碼器758產生用于一個符號的位置索引,該符號在符號表中的定位首先在比其它符號高的行中。如圖11C所示,增量模式編碼器758設置一個符號-1所在的位置,在該符號表中排列該差分數據中存在的符號中的第一個以1出現的符號,并且以0設置其它放置,使得用于該符號-1的位置索引是(101000101000)。
隨后,增量模式編碼器758產生用于一個符號2的位置索引(00101011)而不考慮該已經編碼的符號-1的位置。最后,增量模式編碼器758產生用于符號3的位置索引(1111),而不考慮該已經編碼的符號-1和2的位置。增量模式編碼器758把用于其各自符號的符號標志和位置索引輸出到熵編碼器760。
由出現模式編碼器756和增量模式編碼器758產生的全部位置索引具有稱為nTrueOne的一個標志,其指示原來的位置索引是否已經反向。具體地說,如果nTrueOne被設置為0,則認為位置索引是通過反向其原來位置索引而獲得的。在位置索引包括許多1的情況中,有可能通過反向該位置索引而增強該算法編碼效率,以便增加0的數量。
下面參照圖9D描述熵編碼器760的操作。
根據本發明的熵編碼器760,使用函數enodeSignedQuasiAAC()熵編碼從增量模式編碼器758輸入的表示該差分數據的符號的符號標志和用于該符號的位置索引,并且熵編碼從出現模式編碼器756輸入的該差分數據的符號和其各自的位置索引。
在encodeSignedQuasiAAC中,使用涉及輸入值和其符號的一個上下文產生一種自適應算法編碼的比特數據流。具體地,在encodeSignedQuasiAAC()中,不為0的一個第一比特被編碼,隨后編碼其符號,并且使用一個零上下文編碼其它比特。
圖9D是使用encodeSignedQuasiAAC()編碼一個符號的一個處理的流程圖。
在步驟S9810中,熵編碼器760接收將要被編碼的差分數據的符號nValue和其比特大小QBit。
在步驟S9820中,熵編碼器760從nQBit減去2,并且存儲該相減的結果作為可變i。
在步驟S9830中,熵編碼器760把該符號nValue的絕對值存儲作為變量val,并且對于val執行次數為i的右移位(SR)操作。在同一個步驟中,熵編碼器760對于1和該SR操作的結果執行一個邏輯″與″操作,并且把該邏輯″與″操作的結果存儲為一個變量比特。
在使用encodeSignedQuasiAAC()編碼一個符號的處理的第一周期中,檢測除了符號位以外的將要被熵編碼的輸入值中的第一比特,并且在隨后的周期中逐個讀出其它比特。
在步驟S9840中,熵編碼器760檢測val是否大于1。如果val大于1,則在步驟S9850中,在一個零上下文下使用函數qf_encode()編碼該′比特′的值。另一方面,如果val不大于1,則在步驟S9860中,在一個第i上下文之下使用函數qf_encode()編碼該′比特′的值。
當val不大于1時,在步驟S9870中,熵編碼器760再一次檢驗val是否為1。如果va1是1,則在步驟S9880設置nValue的符號,并且在步驟S9890中根據其符號和一個符號上下文編碼nValue。
當完成針對一個比特的編碼處理時,熵編碼器760在步驟S9900中把i減1,隨后在步驟S9910中檢測i的當前值是否小于0。通過重復地執行S9830至S9900,熵編碼器760熵編碼該輸入值,直到i小于0為止。
因此,隨著分配到該第一比特的一個上下文,熵編碼器760編碼輸入值不是0的第一比特,并且編碼跟隨該零上下文的其它比特。
下面參照圖7A描述在標題編碼器500中的將要被編碼成一個關鍵字值標題的信息。
標題編碼器500接收一個輸入的坐標協調程序并且編碼一個數據模式、每一關鍵幀中的頂點的數目、用于該頂點數目的所需要的比特數、以及每一浮點數的有效位的最大數目。
標題編碼器500編碼一個量化比特數、每一頂點的每一成份的關鍵值數據中的最小值和每一頂點的每一成份的數據范圍中的最大數據范圍、以及每一頂點的每一成分的量化數據中的最大和最小值。
標題編碼器500從DPCM處理器720接收已經對于每一頂點的每一成份的數據執行的一個DPCM操作的模式,從該字典編碼器750接收一個字典編碼模式,并且編碼該DPCM操作模式和該字典編碼方式。
下面參照附圖更詳細地描述根據本發明優選實施例的一個用于解碼一個比特數據流的方法和裝置,其比特數據流中編碼有坐標內插符的關鍵字數據和關鍵值數據。
圖12是根據本發明一個優選實施例的用于解碼坐標內插符的裝置的框圖。參考圖12,用于解碼坐標內插符的裝置包括關鍵字數據解碼器1300,從一個輸入比特數據流中解碼關鍵字數據;關鍵值數據解碼器1500,從該輸入比特數據流中解碼關鍵值數據;以及標題解碼器1800,解碼標題信息并且把該解碼的標題信息提供到關鍵字數據1300以及關鍵值數據解碼器1500,該標題信息是用于解碼來自輸入比特數據流的關鍵字數據和關鍵值數據的必需的信息。
下面參照圖13至14B更詳細地描述關鍵字數據解碼器1300的結構和操作。
圖13是根據本發明的一個優選實施例的關鍵字數據解碼器1300的一個框圖。關鍵字數據解碼器1300接收一個編碼的比特數據流并且通過解碼而將其重新構成關鍵字數據。
關鍵字數據解碼器1300包括一個熵解碼器1310、一個反向DND處理器1320、一個反向折疊處理器1330、一個反向移位器1340、一個反向DPCM處理器1350、一個反向量化器1360、一個線性關鍵字解碼器1380和一個浮點數反向轉換器1370。
圖14A是根據本發明優選實施例的用于解碼關鍵字數據的一種方法的流程圖。參考圖14A,其上壓縮有關鍵字數據的一個比特數據流被輸入到標題解碼器1800和熵解碼器1310。
在步驟S14000中,標題解碼器1800解碼為了進行解碼的每一步驟所需的信息段并且將它們提供到對應解碼步驟。下面按每一解碼步驟描述由標題解碼器1800解碼的信息。
在步驟S14100中,熵解碼器1310從標題解碼器1800接收將要被解碼的差分數據的數目以及已經用于編碼的比特數量,即將要被用于進行解碼的比特數目,并且解碼該輸入的比特數據流。差分數據的數目等于從關鍵字數據的數量減去通過執行DPCM獲得的幀內關鍵字數據數目的結果。
在本實施例中,熵解碼器1310根據包括在該比特數據流中的預定的信息,例如bSignedAACFlag,標識將要被解碼的差分數據是否具有負值或正值。如果該編碼的差分數據具有負值,則熵解碼器1310使用函數decodeSignedAAC()解碼該差分數據。另一方面,如果該編碼的差分數據僅具有正值,則熵解碼器1310使用函數decodeUnsignedAAC()解碼該差分數據。隨后,該解碼的差分數據被發送到反向DND處理器1320。
反向DND處理器1320在每一DND的周期中從標題解碼器1800接收DND的階數以及最大值nKeyMax。
如果DND的階數是-1,這意味著正解碼的該編碼的差分數據已經經歷一個DPCM操作和一個移位操作而不經歷DND被熵解碼,并且本方法直接進入執行一個反向移位操作的步驟。如果DND的階數是0,這意味著正解碼的該編碼的差分數據已經經歷一個折疊操作而不經歷DND被熵解碼,并且因此本方法直接進入執行一個反向折疊操作的步驟。如果DND的階數大于0,則在步驟S14200中執行一個反向DND操作。
反向DND處理器1320在步驟S14300中確定正被解碼的編碼的差分數據是否已經經歷一個上移動操作而被編碼。在本發明的一個優選實施例中,通過查驗在一個比特數據流中包含的nKeyInvertDown是否大于0而確定該正解碼的該編碼差分數據已經經歷一個上移位操作而被編碼。
如果正被解碼的該編碼差分數據尚未通過上移位操作,則該方法進入執行一個反向DND的步驟。另一方面,如果正被解碼的該編碼差分數據已經通過一個上移位操作,在步驟S14400中,通過執行一個上移位,已經從一個正數區域轉移到一個負數區域的差分數據被移回到該負數區域。在本發明的一個優選實施例中,通過執行由下面方程式表示的一個下移位操作(一個反向下操作)恢復已經通過上移動操作的差分數據。
invert-down(υ) …(20)=v (if v≤nKeyInvertDown)=nKeyInvertDown-v(if v>nKeyInvertDown)這里,nKeyInvertDown具有與使用在上移位操作中的最大值nKeyMax相同的值。作為下移位操作的結果,具有超過nKeyInvertDown值的差分數據被轉換成低于-1的負值。
根據每一個DND周期中的最大值nKeyMax,對于已經通過下移位操作的差分數據有選擇地執行一個反向下分割操作或反向上分割操作。
參考圖14B,反向DND處理器1320執行一個次數與該差分數據在編碼過程中已經通過的DND操作的次數一樣多的反向DND操作。換句話說,反向DND處理器1320設置一個反向DND階數的初始值等于DND的階數。隨后,反向DND處理器1320每次執行一個反向DND操作就從該反向DND的階數的初始值減去1,并且保持執行該反向DND操作,直到該反向DND的階數變成1為止。在步驟S14510中,反向DND處理器1320在DND的每一周期中搜索nKeyMax并且檢驗每一nKeyMax是否不小于0。
如果nKeyMax小于0,則意味著該編碼處理中已經執行了上分割操作,并且因此反向DND處理器1320在步驟S14530中通過執行一個反向上分割操作而把正在解碼的差分數據的范圍延伸到一個負數區域。在本發明的一個優選實施例中,可以使用由方程式(21)定義的一個反向上分割操作。inverse-divide-up(v)......(21)]]>=v.......(if v≥0)]]>=(nKeyMaxi-1)-v-12..(if v<0,vmod2≠0)]]>=v2.......(if v<0,vmod2=0)]]>但是,如果nKeyMax不小于0,則反向DND處理器1320檢測該反向DND的階數是否為1。如果反向DND的階數不是1,則意味著在編碼處理中該正解碼的差分數據已經被執行了下分割操作,因此反向DND處理器1320在步驟S14570中通過執行一個反向下分割操作把該差分數據的范圍延伸到一個正數區域。
在本發明的一個優選實施例中,可以使用下面方程式定義的一個反向下分割操作。inverse-divide-down(v).........(22)]]>=v.........(if v≥0)]]>=(nKeyMaxi+1)+v-12...(if v<0,vmod2≠0)]]>=v2........(if v<0,vmod2=0)]]>如果nKeyMax不小于0而反向DND的階數是1,則反向DND處理器1320在步驟S14590中執行一個反向分割操作之后完成整個反向DND操作。在本發明的一個優選實施例中,可以使用由方程式(23)定義的一個反向分割操作。
inverse-divide(v)…(23)=v (if v≥0)=v+(nKeyMax0+1)(if v<0)已經通過相反DND操作的關鍵字數據的差分數據被輸入到反向折疊處理器1330,并且反向折疊處理器1330在步驟S14600中對于該差分數據執行一個反向折疊操作,使得該只被用于一個正數區域中的差分數據被分成正值和負值。在本發明的一個優選實施例中,可以使用由方程式(24)定義的一個反向折疊操作。inverse-fold(v)=-(v+1)2(if vmod2≠0).......(24)]]>=v2.......(if vmod2=0)]]>=0........(if v=0)]]>已經通過反向折疊操作的差分數據被輸出到反向移位器1340,在步驟S14700中,反向移位器1340把從標題解碼器1800輸入的、在編碼處理中使用的一個模式nKeyShift加到從反向折疊處理器1340輸入的差分數據。此操作由下面方程式表示。
inverse-shift(v)=v+nKeyShift …(25)在步驟S14800中,反向DPCM處理器1350使用從標題解碼器1800輸入的DPCM的階數把從反向移位器1340輸入的差分數據恢復成量化關鍵字數據。反向移位器1340遵循方程式(26)執行與DPCM的階數一樣多次的反向DPCM操作。
v(i+1)=v(i)+delta(i) …(26)其中,i表示差分數據和關鍵字數據的一個索引,v表示整數的一個數組,而delta(i)表示差分數據。
已經通過該反向DPCM操作的量化關鍵字數據被輸入到反向量化器1360。隨后,反向量化器1360從標題解碼器1800接收有關量化比特的大小nKeyQBit和用于反向量化的最大和最小值是否由浮點數轉換器315編碼的信息,并且在步驟S14900中使用下面方程式把該量化的關鍵字數據轉換成反向量化的關鍵字數據。inverse-quantize(v)=fKeyMin+v2nKeyQBit-1×(fKeyMax-fKeyMin)......(27)]]>
如果用于量化的最大和最小值在編碼關鍵字數據的處理中尚未由浮點數轉換器315轉換,則方程式(27)所示的fKeyMin和fKeyMax被分別設置為0和1。但是,如果用于量化的最大和最小值已經由浮點數轉換器315所轉換,則由浮點數反向轉換器1370反向轉換的最大和最小值分別被用作該最大和最小值,以便反向量化。
稍后描述實現反向量化的反向DND操作的程序代碼的一個實例。
從反向量化器1360輸出的解碼的關鍵字數據加到在線性關鍵字解碼器1380中解碼的關鍵字數據,因此構成解碼的關鍵字數據。
下面,在下列段落中描述一個線性關鍵字解碼過程S15000。
標題解碼器1800解碼來自一個比特數據流的關鍵字標題信息。如果在該比特數據流中存在關于一個線性關鍵字區域的信息,則標題解碼器1800把用于解碼該線性關鍵字數據區域的開始和結束關鍵字數據所需的信息輸出到浮點數反向轉換器1370,并且把編碼為線性關鍵字的關鍵字數目輸出到線性關鍵字解碼器1380。
浮點數反向轉換器1370把由十進制數表示的該線性關鍵字數據區域的開始和結束關鍵字反向地轉換成二進制數字,并且把該二進制數字輸出到線性關鍵字解碼器1380。
假定將要被解碼的兩個浮點數稱為fKeyMin和fKeyMax,則解碼fKeyMin的一個處理如下。
標題解碼器1800從比特數據流讀出fKeyMin的位數。如果fKeyMin的位數是0,則fKeyMin被設置為0,并且從該比特數據流讀出fKeyMax的位數以便解碼fKeyMax。如果fKeyMax的位數不小于8,則意味著fKeyMax已經遵循IEEE標準754被編碼。因此,在讀出32比特的fKeyMax之后,解碼該浮點數fKeyMax。
但是,如果fKeyMax的位數在1和7之間,標題解碼器1800從該比特數據流讀出一個符號位。在本發明的一個優選實施例中,如果符號位是1,則MinKeyMantissaSign被設置為-1。另一方面,如果符號位是0,則MinKeyMantissaSign被設置為1。然后,參考表格1獲得用于進行解碼所需的比特的數量,表格1示出一個尾數的位數和用于進行編碼所需的比特數目之間的關系。隨后,與用于進行編碼所需的比特數一樣多的比特數據流的比特被讀出并且存儲在nMinKeyMantissa中。隨后,讀出該比特數據流的下一個比特,并且存儲在MinKeyExponentSign中,與作為尾數的符號存儲在MinKeyMantissaSign中的方式相同。對應于一個指數值的該比特數據流的隨后六個比特被讀出并且存儲在nMinKeyExponent中。
通過把從標題解碼器1800輸入的值替代到方程式(28)中,浮點數反向轉換器1370恢復fKeyMin。fKeyMin=MinKeyMantissaSign*nMinKeyMantissa10MinKeyExponentSign*nMinKeyExponent...(28)]]>恢復fKeyMax的處理與恢復fKeyMin的處理相同。具體地說,在從該比特數據流讀出fKeyMax的指數之前,確定是否fKeyMin指數的相同值被用作fKeyMax的指數。如果fKeyMin的指數相同的值不被用作fKeyMin的指數,則以從比特數據流讀出fKeyMin的指數的同樣方式從該比特數據流讀出fKeyMax的指數。
線性關鍵字解碼器1380從浮點數反向轉換器1370接收該線性關鍵字數據區域的開始和結束關鍵字,并且遵循方程式(29)解碼該線性關鍵字數據區域。Keyi=fKeyMin+(fKeyMax-fKeyMin)*i(nNumberOfLinearKey-1).....(29)]]>(i=0,...,nNumberOfLinearKey-1)]]>其中,fKeyMin和fKeyMax分別表示該線性關鍵字數據區域的開始和結束關鍵字數據。
使用上述方法解碼的該線性關鍵字數據區域中的關鍵字數據被加到從相反量化器1360輸出的關鍵字數據,然后該相加的結果被輸出作為最終關鍵字數據。
下面將參照圖15A和15B描述根據本發明的解碼坐標內插符已編碼的關鍵值數據的一個關鍵值數據解碼器和根據本發明的用于解碼坐標內插符的關鍵值數據的一種方法。
圖15A是根據本發明優選實施例的關鍵值數據解碼器的框圖,而圖15B是根據本發明優選實施例的用于解碼已編碼的關鍵值數據的一種方法的流程圖。
參考圖15A,關鍵值數據解碼器1500包括熵解碼器1505,熵解碼一個輸入的比特數據流并且因此產生將要被字典解碼的數據,包括DPCM的差分數據、符號標志、用于該符號的位置索引和一個DPCM操作模式;字典解碼器1510,根據將要被字典編碼的數據的符號和其位置索引產生差分數據;反向DPCM處理器1530,根據一個DPCM操作模式,通過對于差分數據執行一個預定的反向DPCM操作而產生量化數據;反向量化器1550,通過反向量化已經量化的數據而產生恢復的關鍵值數據;以及標題解碼器1800,其解碼用于從該輸入比特數據流解碼坐標內插符需要的信息,并且把該信息輸出到字典解碼器1510、反向DPCM處理器1530和反向量化器1550。
在下面將參照圖15B描述根據本發明的用于解碼坐標內插符的已編碼的關鍵值數據的方法。
在步驟S1710中,其上被編碼有坐標內插符的一個比特數據流被輸入到熵解碼器1505,然后熵解碼器1505解碼該輸入的比特數據流。如果該輸入的比特數據流已經以一個出現模式編碼,則熵解碼器1505在步驟S1720中把每一頂點的符號和其位置索引輸出到字典解碼器1510。另一方面,如果該輸入的比特數據流已經以一個增量模式編碼,則熵解碼器1505在步驟S1720中把指示符號存在的符號標志和用于該符號的位置索引輸出到字典解碼器1510。
在步驟S1730中,根據該輸入的字典編碼模式,字典解碼器1510通過解碼從該熵解碼器1510以出現模式輸入的該符號和位置索引或通過解碼從熵解碼器1510以增量模式輸入的符號標志和位置索引而產生差分數據,并把該產生的差分數據輸出到反向DPCM處理器1530。
在步驟S1740中,反向DPCM處理器1530根據該輸入差分數據的解碼的DPCM工作模式,通過對于從字典解碼器1510輸入的該差分數據執行反向時間DPCM操作、反向空間DPCM操作以及反向時空DPCM操作之一而產生量化的關鍵值數據,并且把該量化的關鍵值數據輸出到反向量化器1550。
在步驟S1750中,反向量化器1550使用從該關鍵字值標題解碼器1800輸入的每一個成份的數據中的最小值和該最大數據范圍,反向量化從反向DPCM處理器1530輸入的已量化的關鍵值數據。
在步驟S1760中,反向量化器1550檢查該反向量化的關鍵值數據的矩陣是否已經在該編碼處理過程中轉換成一個轉置矩陣,并且如果該反向量化的關鍵值數據的矩陣已經轉置,則在步驟S1765中反向地轉換該轉置矩陣。
在步驟S1770中,反向量化器1550輸出一個恢復的坐標內插符的關鍵值數據。
下面參照圖16A至17B更詳細描述該關鍵值數據解碼器1500的結構和操作。
熵解碼器1505首先從一個輸入比特數據流中解碼一個指示一個DPCM模式的比特數據流,然后解碼包括bSelFlag、nKVACodingBit、nQMin和nQMax的數列。
在該編碼處理中,首先把bSelFlag和nKVACodingBit分別設置為1和0。如果bSelFlag被解碼成1,則熵解碼器1505解碼nKVACodingBit、nQMin和nQMax。另一方面,如果bSelFlag被解碼成0,則熵解碼器1505只解碼nQMin。
在解碼bSelFlag、nKVACodingBit、nQMin和nQMax的數列以后,熵解碼器1505解碼指示字典編碼模式的nDicModeSelect。根據nDicModeSelect的值,將要被解碼的比特數據流被分成下面段落將被描述的兩個不同種類。
圖18A是一個說明坐標內插符的每一頂點和每一個頂點的成分數據的比特數據流的結構的示意圖。如圖18A所示,如果nDicModeSelect是0,一個比特數據流包括已經在出現模式編碼器中編碼的符號和位置索引。另一方面,如果nDicModeSelect是1,則一個比特數據流包括已經在增加模式編碼器中編碼的符號標志和位置索引。
上面已經描述的根據本發明的熵解碼器使用以圖18B所示的程序代碼實現的一個函數decodeSignedQuasiAAC()。在函數encodeSignedQuasiAA()中,使用涉及輸入值及其符號的一個上下文對一種自適應算法編碼的比特數據流進行編碼。具體地說,在函數decodeSignedQuasiAAC()中,使用一個零上下文對跟隨一個符號位后的比特解碼。熵解碼器1505把該解碼的數據輸出到字典解碼器1510。
圖16A是根據本發明的字典解碼器1510的一個框圖,而圖17A是字典編碼方法的流程圖。
如圖16A所示,字典解碼器1510包括DPCM模式解碼器1512,恢復輸入其中的每一頂點的一個DPCM模式;字典模式選擇器1514,選擇輸入每一頂點的字典解碼模式;出現模式解碼器1516,從字典模式選擇器1514接收每一頂點的每一成分的符號和針對該符號的位置索引,并且恢復差分數據;以及增量模式解碼器1518,其從字典模式選擇器1514接收一個符號標志和用于該符號的位置索引,并且恢復差分數據。
參考圖17A,在步驟S1731中,包括該符號、符號標志和位置索引的每一頂點的熵解碼的成分數據被輸入到DPCM模式解碼器1512。
在字典解碼的差分數據被輸出到反向DPCM處理器1530之前,在步驟S1732中,DPCM模式解碼器1512解碼一個反向DPCM操作的模式,該反向DPCM操作是在反向DPCM處理器1530中將對于每一頂點的每一成份的差分數據執行的操作。
下面參考圖19A描述DPCM模式解碼。
除了表示每一頂點的每一成分的DPCM模式的組合的符號數目被固定在27、因此符號表的大小也被固定在27之外,DPCM模式解碼與稍后將被描述的增量模式解碼相同。
DPCM模式解碼器1512接收一個DPCM模式標志并且跟隨輸入的位置索引把對應于該DPCM模式標志的符號記錄在一個數據組中。
例如,如圖19A所示,對應于該輸入DMCM模式標志的符號是1(TTS),4(TSS),和5(TST+S),而其各自的索引是(010100)、(1010)和(11)。因此,使用符號1和其位置索引(010100)恢復一個數據組(X1X1XX),使用符號4和其位置索引(1010)恢復一個數據組(41X14X),以及使用符號5和其位置索引(11)恢復一個數據組(415145)。
該恢復的數據組(415145)被轉換成DPCM模式(TSS)(TTS)(TST+S)(TTS)(TSS)(TST+S)的組合的一個數組。因此,有可能根據恢復的數據組識別已經對于每一頂點的每一成分執行了哪一種DPCM。
DPCM模式解碼器1512把每一頂點的每一成分的差分數據連同該解碼的DPCM模式信息一起輸出到字典模式選擇器1514。
在步驟S1734中,字典模式選擇器1514根據每一頂點的每一成分的nDicModeSelect的值,把從DPCM模式解碼器1512輸入的每一頂點的成份數據輸出到出現模式解碼器1516或增量模式解碼器1518。
如果nDicModeSelect是0,則字典模式選擇器1514把頂點的成份數據輸出到出現模式解碼器1516,而如果nDicModeSelect是1,則字典模式選擇器1514把頂點的成份數據輸出到增量模式解碼器1518。
在步驟S1736中,出現模式解碼器1516把每一個成分的該符號數據和位置索引恢復成差分數據。
圖19B是說明出現模式解碼的一個實例的示意圖。參考圖19B,出現模式解碼器1516從字典模式選擇器1514接收符號數據并且檢驗bSoleKV和nTrueOne。
如果bSoleKV表示在差分數據中有多個輸入符號并且nTrueOne表示位置索引尚未反向,則出現模式解碼器1516通過在一個數據組中在由其各自位置索引指示的各自位置上插入輸入符號而恢復差分數據。
例如,出現模式解碼器1516順序地接收符號3、7和-4以及其各自的位置索引(01000101000)、(1010100)和(111)。
出現模式解碼器1516在跟隨位置索引(01000101000)的一個差分數據組中記錄第一符號3。因此,通過把符號3插入在該差分數據組中的對應于該位置索引(01000101000)中1所處在的位置而獲得(3X3XXX3X3XXX)。
出現模式解碼器1516恢復該隨后的符號7。在恢復該符號7的過程中,不考慮該差分數據組中的符號3的位置,使得用于該符號7的位置索引不是(0101000100),而是(1010100)。
出現模式解碼器1516在該差分數據組中的沒被符號3占用的位置中的第一位置記錄該符號7,然后在該差分數據組中對應于位置索引(1010100)中的1處在的位置記錄該符號7。因此,在恢復符號7之后,該差分數據組是(3737X73X37XX)。
出現模式解碼器1516按照該索引(111)恢復該符號-4,并且因此產生差分數據組是(3737-473-4374-4)。
如果bSoleKV被設置為1,則意味著在差分數據中僅存在一個輸入符號,并且沒有用于該輸入符號的位置索引。因此,出現模式解碼器1516把該輸入符號記錄在一個空白差分數據組中的第一位置,并且執行用于恢復該下一個符號的處理。
在步驟S1736中,增量模式解碼器1518把每一個成分的符號標志和位置索引恢復成差分數據。下面參考圖19C描述增量模式解碼。
增量模式解碼器1518從字典模式選擇器1514接收指示在差分數據中是否存在符號的符號標志、指示位置索引是否已經反向的nTrueOne以及該位置索引。
增量模式解碼器1518根據該輸入符號標志解碼在該差分數據中包括的符號。像用于增量模式編碼的符號表一樣,在用于增量模式解碼的一個符號表中,按照從具有最低絕對值的符號到具有最大絕對值的符號的次序把符號排列為一列,并且在具有相同絕對值的兩個符號之間,具有正值的符號排列在比另外一個符號高的一行中。符號標志的大小是2nKVCodingBit+1-1,其中nKVCodingBit表示在熵解碼器1505中解碼的量化比特的數量。因此,如果一個符號標志是(0011001),則增量模式解碼器1518解碼存在于該差分數據中作為符號存在的-1,2,和-3。
符號標志之后輸入的位置索引分別是(101000101000),(00101011),和(1111)并且分別對應于符號-1、2和3。
增量模式解碼器1518在差分數據組中對應于該位置索引(101000101000)中1處在的位置的位置記錄符號-1,使得產生的數據組是(-1X-1XXX-1X-1XXX)。
隨后,增量模式解碼器1518通過在該差分數據組中的對應于在該位置索引(00101011)中1處在的位置的位置中記錄2而恢復該符號2。在恢復該符號2的過程中,不考慮該差分數據組中的第一個符號-1的位置,使得該產生的差分數據組是(-1X-1X2X-12-1X22)。
增量模式解碼器1518通過在該差分數據組中的對應于在位置索引(1111)中的1處在的位置的位置記錄-3而恢復該符號-3,使得產生的差分數據組是(-1-3-1-32-3-1-322)。
在步驟S1739中,出現模式解碼器1516和增量模式解碼器1518恢復每一頂點的每一成分的差分數據,并且把恢復的差分數據輸出到反向DPCM處理器1530。
圖16B是根據本發明的反向DPCM處理器1530的一個框圖,而圖17B是一個反向DPCM操作的流程圖。
參考圖16B,根據本發明的反向DPCM處理器1530包括反向時間DPCM操作器1542,對于輸入的差分數據執行一個反向時間DPCM操作和一個反向循環量化操作,然后輸出坐標內插符的量化的關鍵值數據;反向空間DPCM操作器1544,對于輸入的差分數據執行一個反向空間DPCM操作和一個反向循環量化操作,隨后輸出該量化的關鍵值數據;反向時空DPCM操作器1546,對于輸入的差分數據執行一個反向時空DPCM操作和一個反向循環量化操作,隨后輸出該量化的關鍵值數據;以及反向DPCM模式選擇器1535,把輸入其中的差分數據輸出到反向時間DPCM操作器1542、反向空間DPCM操作器1544和反向時空DPCM操作器1546之一。
參考圖17B,在步驟S1742中,反向DPCM模式選擇器1535將根據在DPCM模式解碼器1512中恢復的每一頂點的每一成分的DPCM操作模式而確定將對于輸入其中的差分數據執行的一個反向DPCM操作,并且按照該反向DPCM操作模式而輸出每一頂點的每一成分的該輸入的差分數據。
DPCM操作器1542、1542和1546的每一個同時對于輸入其中的差分數據執行一個反向DPCM操作和一個反向循環量化操作。
在步驟S1744中,反向時間DPCM操作器1542遵循方程式(30)對于該輸入的差分數據執行一個反向時間DPCM操作,在步驟S1746中,反向空間DPCM操作器1544遵循方程式(31)對于輸入的差分數據執行一個反向空間DPCM操作,在步驟S1748中,反向時空DPCM操作器1546遵循方程式(32)對于該輸入的差分數據執行一個反向時空DPCM操作。V~i,j=Di,j+V~i-1,j.......(30)]]>V~i,j=Di,j+V~i,Ref......(31)]]>V~i,j=Di,j+{V~i-1,j+(V~i,Ref-V~i-1,Ref)}...(32)]]>在方程式(30)至(32)中, 表示在第i關鍵幀中的第j個頂點的量化關鍵值數據,Di,j表示在該第i關鍵幀中的該第j個頂點的差分數據,而Ref表示一個參考頂點。
在方程式(31)和(32)中,如果 或{V~i-1,j+(V~i,Ref-V~i-1,Ref)}]]>小于每一個成份的量化關鍵值數據中的最小值,則使用該最小值而不使用 或{V~i-1,j+(V~i,Ref-V~i-1,Ref)}]]>。如果 或{V~i-1,j+(V~i,Ref-V~i-1,Ref)}]]>大于在每一成分的量化關鍵值數據當中的最大值,則使用該最大值而不使用 或{V~i-1,j+(V~i,Ref-V~i-1,Ref)}.]]>
DPCM操作器1542、1544和1546的每一個都使用方程式(33)執行一個反向DPCM操作并且同時執行一個反向循環量化操作,以便擴展已經在該編碼處理過程中降低的差分數據的范圍。InverseCircularQuantization(Xi):...........(33)]]>X′i=X~i-(nQMax-nQMin+1)......(ifX~i≥0)]]>X′i=X~i+(nQMax-nQMin+1)....(otherwise)]]>X^i=X^i-1+X~i...(if nQMin≤X^i-1+X~i≤nQMax)]]>X^i=X^i-1+X′i....(if nQMin≤X^i-1+X′i≤nQMax)]]>在方程式(33)中, 是與Di,j相同的輸入值, 是與 或{V~i-1,j+(V~i,Ref-V~i-1,Ref)}]]>一樣的一個在前反向循環量化值。nQMax和nQMin分別表示在DPCMed差分數據中的最大值和最小值。
在步驟SS1749中,反向DPCM處理器1530把已經反向DPCM的和反向循環量化的每一頂點的每一成分的關鍵值數據輸出到反向量化器1550。
參考圖15B,反向量化器1550遵循方程式(4),把在從該關鍵字值標題解碼器1800輸入的在輸入成份數據中的最小值fMin_X、fMin_Y和fMin_Z以及最大范圍值fMax轉換成二進制數,并且通過把fMin_X、fMin_Y、fMin_Z和fMax替代到方程式(34)中而反向量化從反向DPCM處理器1530輸入的量化關鍵值數據。V^i,j,x=fMin_X+V~i,j,x2nKVQBits-1×fMax....(34)]]>V^i,j,y=fMin_Y+V~i,j,y2nKVQBits-1×fMax]]>V^i,j,z=fMin_Z+V~i,j,z2nKVQBits-1×fMax]]>方程式(34)中,nKVQBits表示用于反向量化的一個量化比特的大小。
反向量化器1550必須以表2示出的矩陣的形式輸出每一頂點的每一成分的反向量化的關鍵值數據。為了實現此目的,在步驟S1760中,反向量化器1550在輸出該反向量化的關鍵值數據之前檢驗該反向量化的關鍵值數據的模式是否為一個轉置模式。如果該反向量化的關鍵值數據的模式是一個轉置模式,則在步驟S1765中,反向量化器1550通過反向轉換該轉置矩陣而產生并且輸出坐標內插符的解碼的關鍵值數據。
圖20A至20L是示出SDL程序代碼的實例的圖表,通過該SDL程序代碼,實現根據本發明優選實施例的用于解碼坐標內插符的關鍵字數據和關鍵值數據的裝置。
圖20A是說明一個類CompressedCoordinateInterpolator的示意圖,它是用于讀出坐標內插符的壓縮比特數據流的最高類。在圖20A中,KeyHeader和Key是用于從比特數據流讀出關鍵信息的類,對應于常規CoordinateInterpolator節點中的關鍵字段數據。CoordIKeyValueHeader和CoordIKeyValue是用于讀出對應于在常規CoordinateInterpolator結點中的keyValue字段數據的keyValue信息的類。函數qf_start()被用于在讀出該比特數據流的AAC-編碼的部分以前初始化一個算法解碼器。
圖20B是說明用于解碼一個關鍵字標題的類的示意圖,它是用于一個解碼處理所需要的信息。
該關鍵字標題中的主信息是關鍵字的數目、量化比特、幀內關鍵字數據、用于進行解碼的DND標題和實際比特。nKeyQBit是用于該反向量化以便恢復該浮點關鍵字值的量化比特。nNumKeyCodingBit表示關鍵字數據數的nNumberOfKey的比特大小,它表示關鍵字數據的數目。nKeyDigit表示在該原始關鍵字數據中的最大有效位,并且能被用于舍入該解碼的值。當在該標題中包括有關線性關鍵字子區域的信息時,bIsLinearKeySubRegion標志設置為1。在此情況中,能夠使用跟隨該bIsLinearKeySubRegion標志的解碼的標題信息計算在整個關鍵字范圍之內的某一子區域中包括的關鍵字。bRangeFlag指示關鍵字數據的范圍是否從0到1。如果該范圍不是0到1,則從KeyMinMax類解碼最小值和最大值。KeyMinMax類重建用于反向量化的最小值和最大值。每一個值能夠被分成尾數和指數。nBitSize是若干關鍵字標題信息數據的比特量,它們是nQIntraKey、nKeyShift和nKeyMax。nQIntraKey是第一量化的幀內數據的幅值。它連同表示nQIntraKey的符號的nQIntraKeySign結合在一起。它被用作對該量化的關鍵字數據的剩余部分進行恢復的一個基礎。對于在該內插符壓縮中的所有的符號位,值0表示一個正號而1表示一個負號。nKDPCMOrder是DPCM的階數減1。該階數的范圍可以從1到3。量化幀內數據的數目與DPCM的階數相同。
nKeyShift,連同符號位nKeyShiftSign一起,是表明在該關鍵字數據解碼器中移位的量的整數。如果該bShiftFlag被設置為真,則解碼這兩個值。nDNDOrder是DND(分割-與-分割)的階數。DND在該關鍵字數據解碼器中描述。如果nDNDOrder的值是7,則bNoDND被解碼。此布爾值表示是否將進行反向DND處理。nKeyMax是在連續反向DND處理每一個過程中使用的最大值或最小值。nKeyCodingBit是用于編碼關鍵字數據的比特。bSignedAACFlag表示哪個解碼方法被用于AAC解碼。如果該值是0,則執行無符號AAC解碼。否則,執行有符號的AAC解碼。bKeyInvertDownFlag是表示是否使用nKeyInvertDown的布爾值。nKeyInvertDown是整數值,使得所有的量化的高于該整數值的關鍵字數據被反向到從-1和低于-1開始的負值。如果nKeyInvertDown是-1,則不執行反向。圖20C是說明一個類LinearKey的示意圖。圖20C中,nNumLinearKeyCodingBit是表示為了編碼線性可預測關鍵字的一個預定的數量的所需比特數目的一個值。nNumberOfLinearKey是表示線性可預測關鍵字數目的一個值。
圖20D是說明一個類KeyMinMax的示意圖。圖20D中,bMinKeyDigitSame是一個標志,表示全部關鍵字的最高有效位的數目(nKeyDigit)和在關鍵字當中的一個最小值的最高有效位的數量是否相同。nMinKeyDigit是表示在該關鍵字當中的該最小值的最高有效位數目的一個值。nMinKeyMantissaSign是表示nMinKeyMantissa的符號的一個值。
nMinKeyMantissa是表示在關鍵字當中的最小值的尾數的一個值。nMinKeyExponentSign是表示nMinKeyExponent的一個符號的一個值。
nMinKeyExponent是表示在關鍵字當中的最小值的指數的一個值。fKeyMin是表示在關鍵字當中的最小值的一個值。bMaxKeyDigitSame是一個標志,指示全部關鍵字的最高有效位的數目nKeyDigit和在關鍵字當中的一個最大值的最高有效位的數目是否相同。nMaxkeyDigit是表示在該關鍵字當中的該最大值的最高有效位數目的一個值。nMinKeyMantissaSign是表示nMaxKeyMantissa的符號的一個值。nMaxKeyMantissa是表示在該關鍵字當中最大值的尾數的一個值。
bSameExponent是一個標志,指示在關鍵字當中的最大值的指數是否nMinKeyExponent相同。nMaxKeyExponentSign是表示nMaxKeyExponent的符號的一個值。nMaxKeyExponent是表示在關鍵字當中的最大值的指數的一個值。FKeyMax是表示在關鍵字當中的最大值的一個值。
圖20E是說明一個類Key的示意圖。在圖20E中,nQKey是從一個比特數據流解碼的量化關鍵字數據的一個數組。KeyContext是用于讀取nQKey的一個幅值的一個上下文。KeySignContext是用于讀取nQKey的一個符號的一個上下文。
DecodeUnsignedAAC是一個函數,利用下面將描述的一個給出上下文執行自適應算術編碼的一個無符號解碼過程。DecodeSignedAAC是一個函數,利用下面將描述的一個給出上下文執行自適應算術編碼的一個有符號解碼過程。
圖20F是說明一個類CoordIKeyValueHeader的示意圖。圖20F中,在解碼關鍵字標題數據之后,解碼關鍵字值標題數據。一個關鍵字值標題包括頂點的數量、用于關鍵值數據的量化參數以及在將被用于量化的關鍵值數據當中的最小值和最大值。bTranspose是指示當前模式是否為一個轉置模式或一個頂點模式的標志。如果bTranspose是1,則選擇一個轉置模式。否則,選擇一個頂點模式。nKVQBit表示為了用于恢復浮點數字的反向量化所需的量化比特。nCoordQBit表示nNumberOfCoord的比特大小,nNumberOfCoord表示頂點數目。nKVDigit在一個反向量化之后使用,表示關鍵值數據的有效位的最大數目。一個類KeyValueMinMax恢復在關鍵值數據的每一成份的量化值和一個將用于反向量化最大關鍵值數據范圍中的最小值。上述的值的每一個能夠被分成各自的尾數和指數。標題信息的其它部分包括在該關鍵值數據的每一成分的量化值中的最大和最小值中的一個最大值和一個最小值。具體地說,nXQMinOfMax表示在每一個頂點的x成份的量化值中的最大值當中的一個最小值。
圖20G和20H是表示程序代碼的實例的示意圖,借助該程序代碼實現根據本發明優選實施例的一個DPCM模式解碼器。參考圖20G和20H,nDPCMMode是表示每一頂點的每一個成份x、y和z的一個DPCM模式的一個整數數組。nDPCMMode可以具有值1(一個時間DPCM操作)、2(一個空間DPCM操作)或3(一個時空操作)。
bSelFlag是用于每一頂點的每一成分的選擇標志。只有針對bSelFlag被設置為‘真’的具有成分的頂點才使用字典編碼器340編碼。selectionFlagContext是用于讀出bSelFlag的一個上下文。
nKVACodingBit是一個整數數組,表示為了編碼每一頂點的每一成分所需的比特。aqpXContext是用于讀出nKVACodingBit的一個上下文。
nRefVertexis是表示用于全部頂點的一個參考頂點的索引的整數數組。refContext是用于讀出nRefVertex的一個上下文。nQMin是一個整數數組,表示在每一頂點的每一成分的量化值中的最小值。qMinContext是用于讀出nQMin的一個上下文。qMinSignContext是用于讀取nQMin的符號的一個上下文。
nQMax是一個整數數組,表示在每一頂點的每一成分的量化值中的最大值。qMaxContext是用于讀出nQMax的一個上下文。qMaxSignContext是用于讀取nQMax的符號的一個上下文。
圖20I是一個類CoordIDPCMMode的示意圖,用于根據本發明優選實施例而解碼一個DPCM模式。bAddressOfDPCMMode表示在DPCM字典表格中的DPCM字典符號的用法,其中每一個包括用于每一成份的DPCM模式。存在DPCM模式的三個類型T、S和T+S,并且一個頂點包括三個成分。因此如上面表3所示,存在27個字典符號指示所有可能的DPCM模式的組合。dpcmModeDicAddressContext是用于讀出bAddressOfDPCMMode的一個上下文。
bDPCMIndex指示已經用于每一個頂點的一個DPCM符號。dpcmModeDIcIndexContext是用于讀出dpcmModeDicIndexContext的一個上下文。
圖20J是一個類CoordIKeyValueDic的示意圖,該類用于根據本發明優選實施例而解碼一個字典編碼模式。圖20J中,nDicModeSelect指示在一個字典編碼處理過程中已經使用了哪個編碼模式。當nDicModeSelect設置為1時,意味著該編碼模式是一個增量模式。另一方面,當nDicModeSelect是0,則意味著該字典編碼模式是一個出現模式。
圖20K是表示一個類CoordIIncrementalMode的示意圖,通過該類實現根據本發明優選實施例的一個增量模式解碼方法。圖20K中,bAddress表示量化關鍵值數據的遞增字典符號的用法。增量字典表格中的符號數目是2(nKVCodingBit+1)-1。dicAddressContext是用于讀出bAddress的一個上下文。
nTrueOne是指示索引數據是否已經反向的一個值。如果nTrueOne設置為1,則在一個位置索引中的‘1’值被編譯為指示一個符號的位置的真值。如果nTrueOne設置為0,則在該位置索引中的‘0’值被編譯為指示該符號的位置的真值。
bAddrIndex指示哪個增量字典符號已經被用于每一頂點的每一成分。dicIndexContext是用于讀出bAddrIndex的一個上下文。
圖20L是表示一個類CoordIOccurrenceMode的示意圖,通過該類實現根據本發明優選實施例的一個出現模式解碼方法。圖20L中,nQKV是包括對應于量化關鍵值數據的發生字典符號的一個整數數組。kvXContext、kvYContext和kvZContext是用于讀出nQKV的上下文。kvSignContext是用于讀取nQKV的一個符號的一個上下文。
bSoleKV表示一個符號是否僅出現一次。當一個預定符號僅出現一次時,bSoleKV設置為1。dicSoleKVContext是用于讀出bSoleKV的一個上下文。bDicIndex指示哪個發生字典符號已經被用于每一頂點的每一成分。dicIndexContext是用于讀出bDicIndex的一個上下文。
本發明能夠實現為寫在計算機可讀取記錄介質上的計算機可讀代碼。其中,計算機可讀記錄介質包括能夠由計算機系統讀出的任何種類的記錄介質。例如,該計算機可讀記錄介質可以包括ROM、RAM、CD-ROM、磁帶、軟盤、光數據存儲器、載波(通過互聯網絡發送)等。該計算機可讀記錄介質能夠經過網絡連接與計算機系統分散配置,并且一個計算機能夠以分散的方法讀出該記錄介質。
由于根據本發明的用于編碼坐標內插符的裝置包括一個關鍵字數據編碼器,該關鍵字數據編碼器利用關鍵字數據單調增加的事實對關鍵字數據進行編碼,所以該裝置能夠以高效率編碼動畫關鍵字數據。此外,由于根據本發明的用于編碼坐標內插符的裝置包括一個關鍵值數據編碼器,其考慮了在關鍵值數據之間的時間相關性以及在關鍵值數據之間的空間相關而編碼關鍵值數據,所以該裝置能夠以少量的數據來恢復高品質的動畫。
雖然已經參照幾個優選實施例具體地展示和描述了本發明,但是本領域技術人員將理解,在不背離由所附的權利要求書定義的本發明的精神和范圍的條件下可以進行各種形式和細節上的改變。
權利要求
1.一種用于編碼坐標內插符的裝置,所述坐標內插符包括關鍵字數據,指示在一個時間軸上的每一關鍵幀的位置;以及關鍵值數據,使用每一個都由x、y和z成分組成的頂點的坐標表示在每一關鍵幀中的目標的每一頂點的位置,所述裝置包括一個關鍵字數據編碼器,其包括一個第一量化器,使用預定的量化比特量化坐標內插符的關鍵字數據;一個第一DPCM處理器,產生所述量化的關鍵字數據的差分數據;一個DND處理器,根據在差分數據與該差分數據當中的最大值和最小值之間的一種關系對所述差分數據執行一個DND操作,和一個第一熵編碼器,熵編碼從所述DND處理器輸入的該差分數據,一個關鍵值數據編碼器,其包括一個第二量化器,使用預定的量化比特量化坐標內插符的關鍵值數據;一個第二DPCM處理器,通過對量化關鍵值數據的每一頂點的成分執行一個預定的DPCM操作,產生基于量化關鍵值數據的每一頂點坐標的時間變化的差分數據和基于量化關鍵值數據的每一頂點坐標的空間變化的差分數據;一個字典編碼器,產生一些符號以及指示這些符號的位置的索引,所述符號表示每一頂點的DPCM的差分數據和已經對于該差分數據執行的一個DPCM操作模式;和一個第二熵編碼器,熵編碼所述符號和所述索引,以及一個標題編碼器,對為了解碼由所述關鍵字數據編碼器和所述關鍵值數據編碼器所編碼的一個比特數據流所需要的信息進行編碼。
2.根據權利要求1所述的裝置,其中,所述關鍵字數據編碼器還包括一個線性關鍵字編碼器,所述線性關鍵字編碼器在輸入其中的關鍵字數據當中識別一個關鍵字數據線性增加的區域,并且編碼該區域。
3.根據權利要求1所述的裝置,其中,所述關鍵字數據編碼器還包括一個移位器,從第一個DPCM處理器輸入的差分數據當中獲得具有最高頻率的一個差分數據(模式)并且從所述差分數據中減去該模式;和一個折疊處理器,把所述移位的差分數據轉換成正數或負數,并且該DND處理器根據進行編碼所需的比特數量從所述移位器輸入的差分數據和從所述折疊處理器輸入的差分數據中選擇之一,DND該差分數據并輸出該選擇的差分數據。
4.根據權利要求1所述的裝置,其中,所述第二DPCM處理器包括一個DPCM操作器,對于量化的坐標內插符的每一頂點的每一成分執行一個時間DPCM操作,以便產生在一個關鍵幀中的頂點和另一關鍵幀中的頂點之間的第一差分數據;對于該量化的坐標內插符的每一頂點的每一成分執行一個空間DPCM操作,以便產生在同一個關鍵幀中的頂點之間的第二差分數據;并且對于該量化的坐標內插符的每一頂點的每一成分執行一個時空DPCM操作,以便產生在頂點和關鍵幀之間的第三差分數據;一個循環量化器,對于從所述DPCM操作器輸入的所述第一至第三差分數據執行一個循環量化操作,以便降低其范圍;和一個DPCM模式選擇器,根據為了進行編碼所需要的比特數目選擇已經循環量化的所述第一至第三差分數據之一,并且輸出所選擇的差分數據。
5.根據權利要求1所述的裝置,其中,所述字典編碼器包括一個DPCM模式編碼器,產生一些符號以及指示這些符號的位置的索引,所述符號表示已經對于每一頂點的每一成分的數據執行的DPCM模式的組合;和一個出現模式編碼器,產生一些對應于每一頂點的每一成分的輸入差分數據的符號以及指示這些符號的位置的索引。
6.根據權利要求5所述的裝置,其中所述字典編碼器還包括一個增量模式編碼器,產生指示在每一頂點的每一成分的輸入差分數據中是否存在預定的符號的一個符號標志以及指示這些符號的位置的位置索引;和一個表格大小計算器,計算由對應于所述輸入差分數據的符號構成的第一符號表的大小以及所述符號標志的大小,并且根據該第一符號表和該符號標志的大小,把從所述DPCM模式編碼器輸入的每一頂點的每一成分的輸入差分數據輸出到所述出現模式編碼器或所述增量模式編碼器。
7.一種用于解碼一個比特數據流的裝置,所述比特數據流中編碼有坐標內插符,該坐標內插符包括指示在一個時間軸上每一關鍵幀的位置的關鍵字數據和使用每一個都由x、y和z成分組成的頂點坐標表示在每一關鍵幀中的一個目標的每一頂點的位置的關鍵值數據,該裝置包括一個關鍵字數據解碼器,其包括一個標題解碼器,解碼為了解碼來自輸入比特數據流的關鍵字數據和關鍵值數據所需要的標題信息并且輸出該解碼的標題信息;一個第一熵解碼器,熵解碼所述輸入的比特數據流并且輸出解碼的關鍵字數據的差分數據;一個反向DND處理器,根據由所述標題解碼器從所述輸入比特數據流讀出的DND階數,通過對于所述差分數據執行一個反向DND操作而擴展該熵解碼的關鍵字數據的差分數據的范圍;一個第一反向DPCM處理器,對于從所述反向DND處理器輸入的差分數據,執行與從所述標題解碼器輸入的DPCM的階數一樣多次的反向DPCM操作,并且輸出量化的關鍵字數據;和一個第一反向量化器,反向量化所述量化的關鍵字數據并且輸出解碼的關鍵字數據,以及一個關鍵值數據解碼器,其包括一個第二熵解碼器,通過熵解碼輸入的比特數據流產生將要被字典解碼的數據,包括關鍵值數據的差分數據的符號、指示該符號的位置的索引和一個DPCM操作模式;一個字典解碼器,根據從所述標題解碼器輸入的一個字典解碼模式信息,通過執行一個字典解碼操作產生關鍵值數據的差分數據;一個第二反向DPCM處理器,根據所述DPCM操作模式,通過恢復從所述字典解碼器輸入的關鍵幀之間的差分數據和頂點之間的差分數據產生量化數據;和一個第二反向量化器,通過反向量化所述量化的數據產生恢復的關鍵值數據。
8.根據權利要求7所述的裝置,其中,所述關鍵字數據解碼器還包括一個反向折疊處理器,根據從所述標題解碼器輸入的DND的階數,對于從所述反向DND處理器輸入的差分數據執行一個反向折疊操作,以便把該差分數據分割成正數和負數,或者旁路該差分數據;和一個反向移位器,通過把從所述標題解碼器輸入的一個預定的模式相加到所述差分數據而變換從所述反向DND處理器或所述反向折疊處理器輸入的差分數據的范圍,并且所述第一DPCM處理器恢復從所述反向移位器輸入的差分數據并且輸出量化的關鍵字數據。
9.根據權利要求7所述的裝置,其中所述第二DPCM處理器包括一個反向時間DPCM操作器,對于根據時間的推移而改變的每一頂點的差分數據執行一個反向DPCM操作;一個反向空間DPCM操作器,對于在每一個頂點和對應于一個預定時間瞬時的頂點的一個參考頂點之間的差分數據執行一個反向DPCM操作;以及一個反向DPCM模式選擇器,根據所述DPCM操作模式把輸入其中的差分數據輸出到所述反向時間DPCM操作器或所述反向空間DPCM操作器。
10.一種其中編碼有坐標內插符的比特數據流,所述坐標內插符包括指示在一個時間軸上每一關鍵幀的位置的關鍵字數據和使用每一個都由x、y和z成分組成的頂點坐標表示在每一關鍵幀中的一個目標的每一頂點的位置的關鍵值數據,所述比特數據流包括關鍵字數據編碼/解碼信息,其中編碼有關鍵字數據和為了解碼該關鍵字數據所需要的信息;和關鍵值數據編碼/解碼信息,其中編碼有關鍵值數據和為了解碼該關鍵值數據所需要的信息,其中,所述關鍵字數據編碼/解碼信息包括反向DND操作信息,包括反向DND的階數,該階數指示將要對于由熵解碼所述比特數據流產生的差分數據執行的反向DND的預定周期數,所述反向DND的目的是擴展該差分數據以及使用在反向DND操作的每一周期中的差分數據當中的最大和最小值的范圍;第一反向DPCM操作信息,包括將要對于該反向DND的差分數據執行的反向DPCM操作的階數,所述反向DPCM的目的是把該反向DND的差分數據轉換成被用于反向DPCM操作的每一周期的關鍵字數據和幀內關鍵字數據;和使用在反向量化中的第一反向量化信息,以便通過反向量化該量化的關鍵字數據而產生恢復的關鍵字數據,以及所述關鍵值數據編碼/解碼信息包括字典解碼信息,包括關于表示被字典編碼的關鍵值數據的差分數據的符號的信息(該差分數據是從所述比特數據流被熵解碼的),指示所述符號的位置第一位置索引,和指示將要對于該第一位置索引執行的一個字典解碼方法的字典解碼模式;第二反向DPCM操作信息,包括指示符號位置的第二位置索引,其被使用在把每一頂點的成分的字典解碼的差分數據轉換成量化關鍵值數據的一個反向DPCM操作中并且對應于反向DPCM操作模式的組合;以及使用在反向量化中的第二反向量化信息,以便通過反向量化該量化的關鍵值數據而產生恢復的關鍵值數據。
11.根據權利要求10所述的比特數據流,其中,所述反向DND操作信息還包括一個標志,表示是否將對于受到一個反向DND操作的差分數據執行一個下移位操作。
12.根據權利要求10所述的比特數據流,其中,所述第一反向量化信息包括,當反向量化該量化的關鍵字數據時使用的一個反向量化比特大小以及在量化關鍵字數據中的最大和最小值。
13.根據權利要求12所述的比特數據流,其中,在所述量化關鍵字數據中的最大和最小值被調整,以便最小化該量化關鍵字數據的量化誤差。
14.根據權利要求10所述的比特數據流,其中,所述關鍵字數據編碼/解碼信息還包括,用于解碼包括在該比特數據流中的一個線性關鍵字區域的線性關鍵字解碼信息,并且該線性關鍵字解碼信息包括一個指示在該關鍵字數據中是否存在其中關鍵字數據線性增加的線性關鍵字區域標志、在該線性關鍵字區域中包括的關鍵字數據的數目以及該線性關鍵字區域的開始和結束關鍵字數據。
15.根據權利要求14所述的比特數據流,其中,所述線性關鍵字區域的開始和結束關鍵字數據的每一個被編碼成十進制的一個尾數和一個指數。
16.根據權利要求10所述的比特數據流,其中,當該字典解碼模式是一個出現模式時,所述字典解碼信息包括對應于包括在該差分數據中的差分值的符號和指示這些符號的位置的位置索引;并且當該字典解碼模式是一個增量模式時,所述字典解碼信息包括表示包括在該差分數據中的該差分值是否存在于一個預定的符號表中的一個符號標志以及表示對應于該符號標志的符號位置的位置索引。
17.根據權利要求10所述的比特數據流,其中,所述第二反向DPCM操作信息還包括一個反向DPCM模式標志,指示對應于將要對于每一頂點的差分數據執行的一個反向DPCM操作的一個符號是否存在于包括在示出將要對于該頂點的每一成分執行的反向DPCM操作模式的組合的一個表格中的所有的符號當中。
18.根據權利要求17所述的比特數據流,其中,所述反向DPCM操作模式的組合是將對于差分數據的每一個成份執行的一個反向時間DPCM操作、一個反向空間DPCM操作和一個反向時空DPCM操作的任意組合。
19.根據權利要求18所述的比特數據流,其中,該第二反向DPCM操作信息還包括一個參考頂點標志,當將要對于差分數據執行的該反向DPCM操作由該反向DPCM模式標志確定為是一個反向空間DPCM操作或一個反向時空DPCM操作時,該參考頂點標志表示對應于受到一個反向空間DPCM操作或一個反向時空DPCM操作的頂點的一個參考頂點。
20.根據權利要求10所述的比特數據流,其中,所述第二反向量化信息包括表示受到一個反向量化操作的關鍵值數據的頂點的一個頂點選擇標志,由該頂點選擇標志選擇的該頂點的每一成分的關鍵值數據當中的最小值和該頂點的每一成分的關鍵值數據的數據范圍中的最大范圍,以及用于反向量化該選擇的頂點的關鍵值數據的一個反向量化比特大小。
21.根據權利要求20所述的比特數據流,其中,所述第二反向量化信息還包括將要反向量化的關鍵值數據中包括的頂點數目,該關鍵值數據的有效位數的最大數目,在每一頂點的每一成分的數據當中的最大值中的一個最大值和一個最小值,以及在每一頂點的每一成分的數據里最小值中的一個最大值和一個最小值。
22.根據權利要求10所述的比特數據流,其中,所述關鍵值數據編碼/解碼信息還包括一個標志,指示所述關鍵值數據的編碼模式是否為一個轉置模式或一個頂點模式。
全文摘要
本發明提供一種用于編碼和解碼坐標內插符的關鍵字數據和關鍵值數據的裝置以及一種其上寫入編碼有坐標內插符的比特數據流的記錄介質。該比特數據流包括關鍵字數據編碼/解碼信息,其中編碼有關鍵字數據和為了解碼該關鍵字數據所需要的信息;和關鍵值數據編碼/解碼信息,其中編碼有關鍵值數據和為了解碼該關鍵值數據所需要的信息。所述關鍵字數據信息包括反向DND操作信息、第一反向DPCM操作信息和第一反向量化信息。所述關鍵值數據編碼/解碼信息包括從該比特數據流熵解碼的字典解碼信息、第一位置索引、字典解碼模式、第二反向DPCM操作信息以及使用在反向量化中的第二反向量化信息。
文檔編號H03M7/36GK1438613SQ0214002
公開日2003年8月27日 申請日期2002年11月27日 優先權日2001年11月27日
發明者李信俊, 鄭錫潤, 張義善, 禹相玉, 韓萬鎮, 金道均, 張敬子 申請人:三星電子株式會社