專利名稱:對位置內(nèi)插器進行編碼和譯碼的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于對三維動畫數(shù)據(jù)進行編碼和譯碼的方法,更具體講,涉及用于對表示目標(biāo)在三維動畫路徑中的位置的位置內(nèi)插器進行編碼和譯碼的方法和裝置。
背景技術(shù):
在3D計算機游戲或虛擬現(xiàn)實計算機應(yīng)用中,已經(jīng)廣泛采用了三維(3D)動畫技術(shù)。虛擬現(xiàn)實造型語言(VRML)是這種3D動畫技術(shù)的典型例子。
諸如用于景物的MPEG-4二進制格式(BIFS)和虛擬現(xiàn)實造型語言(VRML)的國際多媒體標(biāo)準(zhǔn)使用內(nèi)插器節(jié)點支持基于關(guān)鍵幀的3D動畫。在MPEG-4BIFS和VRML中,有包括標(biāo)量內(nèi)插器、位置內(nèi)插器、坐標(biāo)內(nèi)插器、定向內(nèi)插器、標(biāo)準(zhǔn)行間內(nèi)插器和顏色內(nèi)插器在內(nèi)的各種內(nèi)插器,這些內(nèi)插器和它們的功能及特征示于表1中。
表1
在表1所示的內(nèi)插器中,位置內(nèi)插器被用于表示有關(guān)動畫路徑的位置的信息,并且由密鑰和密鑰值字段組成。密鑰字段使用在-∞和∞之間范圍內(nèi)的不連續(xù)數(shù)表示在時間軸上每個關(guān)鍵幀的位置。每個密鑰值字段規(guī)定與在某個時刻由每個密鑰表示的目標(biāo)的位置相關(guān)的信息并由三個分量x、y和z組成。密鑰值字段中的每一個包括與密鑰字段中的每一個所具有的密鑰值相同數(shù)量的密鑰值。
在圖1A和1B中示出了位置內(nèi)插器的例子。具體來說,圖1A示出了密鑰數(shù)據(jù),圖1B示出了密鑰值數(shù)據(jù)。MPEG-4BIFS提供了一種用于編碼和譯碼內(nèi)插器節(jié)點的方法,稱之為預(yù)測MF編碼(PMFC)。
圖2為常規(guī)的PMFC編碼器以及常規(guī)的PMFC譯碼器的框圖。如圖2所示,在PMFC中,使用量化器、差分脈沖碼調(diào)制(DPCM)操作器和熵編碼器對位置內(nèi)插器的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)進行編碼。參見圖2,量化器和DPCM操作器消除了密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)中的冗余,并且DPCM操作器將其操作的結(jié)果輸出給熵編碼器。但是,由于PMFC只對從一般DPCM操作中獲得的差分?jǐn)?shù)據(jù)進行熵編碼,所以其在編碼密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)方面不夠有效。另外,由于熵編碼器存在局限性,幾乎不可能提供高質(zhì)量的動畫。
發(fā)明內(nèi)容
為了解決上述以及其他問題,本發(fā)明的一個方面是提供一種用于編碼和譯碼位置內(nèi)插器的方法和裝置,它們能夠提供具有高壓縮率的高質(zhì)量動畫。
本發(fā)明的另一個方面是提供一種測量原始位置內(nèi)插器和經(jīng)過譯碼的位置內(nèi)插器之間的誤差的方法,以及一種利用測量原始位置內(nèi)插器和經(jīng)過譯碼的位置內(nèi)插器之間的誤差的方法,提取輸入位置內(nèi)插器的斷點的方法。
因此,為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于編碼位置內(nèi)插器的裝置,該位置內(nèi)插器包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)的位置的密鑰值數(shù)據(jù)。所述裝置包括一個斷點提取器,用于從由輸入給它的位置內(nèi)插器組成的第一動畫路徑中提取最小數(shù)量的斷點,這可能在第一動畫路徑和由所提取的斷點產(chǎn)生的第二動畫之間引起不大于預(yù)定的可允許誤差極限的誤差;一個密鑰數(shù)據(jù)編碼器,用于編碼從斷點提取器輸入的密鑰數(shù)據(jù);和一個密鑰值數(shù)據(jù)編碼器,用于編碼從斷點提取器輸入的密鑰值數(shù)據(jù)。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于編碼位置內(nèi)插器的裝置,該位置內(nèi)插器包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和指示目標(biāo)位置的密鑰值數(shù)據(jù)。該裝置包括一個重取樣器,用于將由密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)組成的動畫路徑取樣為預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,并輸出包括重取樣的密鑰數(shù)據(jù)和重取樣的密鑰值數(shù)據(jù)的位置內(nèi)插器;一個密鑰數(shù)據(jù)編碼器,用于編碼從重取樣器輸入的密鑰數(shù)據(jù);以及一個密鑰值編碼器,用于編碼從重取樣器輸入的密鑰值數(shù)據(jù)。
為了實現(xiàn)本發(fā)明上述和其他的方面,提供了一種用于將比特流譯碼為位置內(nèi)插器的裝置,包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)位置的密鑰值數(shù)據(jù)的位置內(nèi)插器被編碼進該比特流中,所述裝置包括一個密鑰數(shù)據(jù)譯碼器,用于譯碼來自輸入比特流的密鑰數(shù)據(jù);一個密鑰值數(shù)據(jù)譯碼器,用于譯碼來自輸入比特流的密鑰值數(shù)據(jù);和一個位置內(nèi)插器合成器,用于通過將經(jīng)過譯碼的密鑰值數(shù)據(jù)與利用經(jīng)過譯碼的密鑰值數(shù)據(jù)進行線性內(nèi)插的密鑰值數(shù)據(jù)合成,生成位置內(nèi)插器。
為了實現(xiàn)本發(fā)明的上述和其他的方面,提供了一種用于編碼位置內(nèi)插器的方法,該位置內(nèi)插器包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)的位置的密鑰值數(shù)據(jù),所述方法包括(b)通過從由位置內(nèi)插器組成的第一動畫路徑中提取最小數(shù)量的斷點,產(chǎn)生將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù),這可以在第一動畫路徑和將由所提取的斷點產(chǎn)生的第二動畫之間引起不大于預(yù)定的可允許誤差極限的誤差;(d)編碼在步驟(b)中產(chǎn)生的密鑰數(shù)據(jù);以及(e)編碼在步驟(b)中產(chǎn)生的密鑰值數(shù)據(jù)。
為了實現(xiàn)本發(fā)明的上述和其他的方面,提供了一種用于編碼位置內(nèi)插器的方法,該位置內(nèi)插器包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)位置的密鑰值數(shù)據(jù)。所述方法包括(b)將由位置內(nèi)插器組成的動畫路徑取樣為預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,并且由此產(chǎn)生包括重取樣的密鑰數(shù)據(jù)和重取樣的密鑰值數(shù)據(jù)的位置內(nèi)插器;(d)編碼在步驟(b)中產(chǎn)生的密鑰數(shù)據(jù);和(e)編碼在步驟(b)中產(chǎn)生的密鑰值數(shù)據(jù)。
為了實現(xiàn)本發(fā)明上述和其他的方面,提供了一種用于將比特流譯碼為位置內(nèi)插器的方法,包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)位置的密鑰值數(shù)據(jù)的位置內(nèi)插器被編碼進該比特流中。所述方法包括(a)譯碼來自輸入比特流的密鑰數(shù)據(jù);(b)譯碼來自輸入比特流的密鑰值數(shù)據(jù);和(c)通過將經(jīng)過譯碼的密鑰值數(shù)據(jù)與利用具有經(jīng)過譯碼的密鑰數(shù)據(jù)的經(jīng)過譯碼的密鑰值數(shù)據(jù)進行線性內(nèi)插的密鑰值數(shù)據(jù)合成,生成位置內(nèi)插器。
為了實現(xiàn)本發(fā)明的上述和其他的方面,提供了一種用于計算在由多個第一路徑點組成的第一路徑和由多個第二路徑點組成的第二路徑之間的誤差的方法,其中每一個第一路徑點由多個數(shù)據(jù)分量組成,每一個第二路徑點由多個數(shù)據(jù)分量組成。所述方法包括(a)將多個路徑點內(nèi)插到第一和第二動畫路徑中,從而使第一和第二動畫路徑就包括在每個路徑點中的參考數(shù)據(jù)分量而言具有相同的路徑點;(b)根據(jù)參考數(shù)據(jù)分量將第一和第二動畫路徑分為預(yù)定數(shù)量的部分,從而使預(yù)定數(shù)量的部分分別對應(yīng)于路徑點;(c)計算每個部分中的第一和第二動畫路徑之間的誤差;以及(d)檢查是否已經(jīng)對所有預(yù)定數(shù)量的部分執(zhí)行了步驟(c),然后對在步驟(c)中獲得的誤差進行規(guī)范。
為了實現(xiàn)本發(fā)明的上述和其他的方面,提供了一種利用線性逼近從由包括多個分量數(shù)據(jù)的路徑點組成的路徑中提取斷點的方法。所述方法包括(a)提取原始路徑的開始點和結(jié)束點;(b)從未提取的路徑點中選擇一個路徑點并利用所選擇的路徑點對其他未選擇的路徑點進行線性內(nèi)插;(c)計算在原始路徑和使用內(nèi)插路徑點產(chǎn)生的內(nèi)插動畫路徑之間的誤差;(d)對所有未被選擇的路徑點執(zhí)行步驟(b)和(c)并提取導(dǎo)致在原始動畫路徑和內(nèi)插路徑之間最小誤差的路徑點;以及(e)將原始路徑和使用包括在步驟(d)中提取的路徑點的所有被提取路徑點所產(chǎn)生的路徑之間的誤差與預(yù)定的可允許誤差極限進行比較,檢查計算的誤差是否小于可允許的誤差極限,如果是,則完成提取斷點的處理,如果不,則重復(fù)執(zhí)行步驟(b)到(d)。
通過下面結(jié)合附圖對本發(fā)明的優(yōu)選實施例進行的詳細描述,本發(fā)明的上述和其他方面以及優(yōu)點都將變得更加清楚,其中圖1A示出了位置內(nèi)插器的密鑰數(shù)據(jù),圖1B示出了位置內(nèi)插器的x、y和z分量的密鑰值數(shù)據(jù);圖2為MPEG-4BIFS PMFC編碼器和MPEG-4 BIFS PMFC譯碼器的框圖;圖3A為按照本發(fā)明的優(yōu)選實施例的、用于對位置內(nèi)插器進行編碼的裝置的框圖,圖3B為按照本發(fā)明的優(yōu)選實施例的、用于對位置內(nèi)插器進行編碼的方法的流程圖;圖4A到4C為按照本發(fā)明優(yōu)選實施例的分析器的例子的框圖;
圖5A為示出了圖3B所示步驟S320的詳細流程圖;圖5B為按照本發(fā)明優(yōu)選實施例的重取樣方法的流程圖;圖5C為按照本發(fā)明優(yōu)選實施例的提取斷點方法的流程圖;圖6A示出了原始密鑰數(shù)據(jù)和重取樣的密鑰數(shù)據(jù),和圖6B示出了原始動畫路徑和重取樣的動畫路徑;圖7A到7F示出了按照本發(fā)明優(yōu)選實施例的提取斷點的方法;圖8示出了以發(fā)生方式從斷點提取器輸出的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù);圖9A為按照本發(fā)明優(yōu)選實施例的密鑰數(shù)據(jù)編碼器的框圖;圖9B為在圖9A中示出的DND處理器的框圖;圖10A到圖10G為按照本發(fā)明優(yōu)選實施例的、編碼密鑰數(shù)據(jù)的方法的流程圖;圖11示出了函數(shù)encodeSignedAAC的一個例子;圖12A到12J示出了按照本發(fā)明優(yōu)選實施例的、通過執(zhí)行編碼操作獲得的密鑰數(shù)據(jù);圖13A為按照本發(fā)明優(yōu)選實施例的密鑰值數(shù)據(jù)編碼器的框圖;圖13B為圖13A中所示的量化誤差最小化器的框圖,和圖13C為圖13A中所示的DPCM處理器的框圖;圖14A到14H為按照本發(fā)明優(yōu)選實施例的、編碼密鑰值數(shù)據(jù)的方法的流程圖;圖15A示出了對量化密鑰值數(shù)據(jù)執(zhí)行一般預(yù)測DPCM操作的結(jié)果,和圖15B示出來對量化密鑰值數(shù)據(jù)執(zhí)行經(jīng)過修改的預(yù)測DPCM操作的結(jié)果;圖16A示出了量化數(shù)據(jù),圖16B和16C分別示出了對圖16A所示的量化數(shù)據(jù)執(zhí)行DPCM操作的結(jié)果以及對圖16A所示的量化數(shù)據(jù)執(zhí)行循環(huán)量化DPCM操作的結(jié)果;圖17示出了函數(shù)UnaryAAC的例子;圖18A和18B示出了函數(shù)SQAAC的例子;圖19A為按照本發(fā)明優(yōu)選實施例的、用于譯碼位置內(nèi)插器的裝置的框圖,和圖19B為按照本發(fā)明優(yōu)選實施例的、用于譯碼位置內(nèi)插器的方法的流程圖;圖20為按照本發(fā)明優(yōu)選實施例的密鑰數(shù)據(jù)譯碼器的框圖;圖21A和21B為按照本發(fā)明優(yōu)選實施例的、譯碼密鑰數(shù)據(jù)的方法的流程圖;
圖22A為按照本發(fā)明優(yōu)選實施例的密鑰值數(shù)據(jù)譯碼器的框圖,和圖22B為在圖22A中所示的逆DPCM處理器的框圖;圖23A到23E為按照本發(fā)明優(yōu)選實施例的、譯碼密鑰值數(shù)據(jù)的方法的流程圖;圖24為按照本發(fā)明優(yōu)選實施例的、用于合成位置內(nèi)插器的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的方法的流程圖;圖25A和25B示出了在圖3A所示分析器中執(zhí)行的、測量在動畫路徑之間的誤差的方法;圖26A到26C示出了用于測量在將被編碼的位置內(nèi)插器和譯碼的位置內(nèi)插器之間的誤差的方法;以及圖27為用于測量在將被編碼的位置內(nèi)插器和譯碼的位置內(nèi)插器之間的誤差的方法的流程圖。
圖28A-28J是本發(fā)明所使用的一部分程序。
具體實施例方式
此后,結(jié)合示出了本發(fā)明優(yōu)選實施例的附圖,更加全面地對本發(fā)明進行描述。
圖13A為按照本發(fā)明優(yōu)選實施例的、用于編碼位置內(nèi)插器的裝置的框圖。參看圖13A,所述用于編碼位置內(nèi)插器的裝置包括分析器40、密鑰數(shù)據(jù)編碼器200、密鑰值數(shù)據(jù)編碼器300和標(biāo)題編碼器400。
圖3B為按照本發(fā)明優(yōu)選實施例的、用于編碼位置內(nèi)插器的方法的流程圖。參看圖3B,將被編碼的位置內(nèi)插器在步驟S300被輸入給所述分析器40。在步驟S320,分析器40從包括所述位置內(nèi)插器的x、y和z分量的密鑰值數(shù)據(jù)的第一動畫路徑中提取將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù),將所提取的密鑰數(shù)據(jù)輸出給密鑰數(shù)據(jù)編碼器200,并將所提取的密鑰值數(shù)據(jù)輸出給密鑰值數(shù)據(jù)編碼器300。
在步驟S340,密鑰數(shù)據(jù)編碼器200使用預(yù)定數(shù)量的量化比特量化從分析器40輸入的密鑰數(shù)據(jù),通過對量化的密鑰數(shù)據(jù)執(zhí)行預(yù)定的DPCM操作,產(chǎn)生差分?jǐn)?shù)據(jù)并對所述差分?jǐn)?shù)據(jù)熵編碼。
在步驟S360,密鑰值數(shù)據(jù)編碼器300使用預(yù)定數(shù)量的量化比特量化從分析器40輸入的密鑰值數(shù)據(jù),通過對所述量化數(shù)據(jù)執(zhí)行預(yù)定的DPCM操作產(chǎn)生差分?jǐn)?shù)據(jù)并編碼所述差分?jǐn)?shù)據(jù)。
在步驟S380,標(biāo)題編碼器400從密鑰數(shù)據(jù)編碼器200和密鑰值數(shù)據(jù)編碼器300中接收譯碼所述密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)所需的信息并編碼所述信息。
下面將結(jié)合附圖更加詳細的描述分析器40、密鑰數(shù)據(jù)編碼器200及密鑰值數(shù)據(jù)編碼器300的結(jié)構(gòu)和操作。
圖4A為按照本發(fā)明第一實施例的分析器40的例子的框圖。雖然可以使用分析器40對密鑰值數(shù)據(jù)的所有分量(x、y和z)執(zhí)行提取將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的處理,但是,為了便于說明,下面的段落僅僅描述對密鑰值數(shù)據(jù)的一個分量的處理。
參看圖4A,按照本發(fā)明第一實施例的分析器包括重取樣器43,用于在輸入位置內(nèi)插器的基礎(chǔ)上,將第一動畫路徑取樣成彼此之間具有預(yù)定時間間隔的預(yù)定數(shù)量的部分,并將經(jīng)過取樣的第一動畫路徑輸出給密鑰編碼器200、密鑰值編碼器300、和標(biāo)題編碼器400;斷點提取器42,用于提取最小數(shù)量的斷點,這樣可以避免在所述第一動畫路徑和根據(jù)從第一動畫路徑提取的斷點產(chǎn)生的第二動畫路徑之間的誤差超過預(yù)定的可允許誤差極限,并且所述斷點提取器42將所提取的斷點輸出給密鑰數(shù)據(jù)編碼器200、密鑰值編碼器300、和標(biāo)題編碼器400;以及選擇器41,用于響應(yīng)一個外部輸入信號將輸入的位置內(nèi)插器輸出給重取樣器43或斷點提取器42。斷點提取器42包括線性內(nèi)插器42a、誤差計算器42b和確定單元42c。
圖5A的流程圖示出了根據(jù)本發(fā)明第一實施例的分析器40的操作。參看圖5A,在步驟325,選擇器41從外部接收位置內(nèi)插器和設(shè)置信號。該設(shè)置信號包括用于確定產(chǎn)生將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的方法的產(chǎn)生方法設(shè)置信號和用于確定產(chǎn)生將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的模式的產(chǎn)生模式設(shè)置信號。
在下面的段落中,將首先描述用于產(chǎn)生密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的模式。
分析器40通過減少輸入給它的、位置內(nèi)插器的關(guān)鍵幀的數(shù)量來減少密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的數(shù)量。假設(shè)分析器40依據(jù)從外部輸入給它的模式設(shè)置信號具有動畫路徑保存模式或動畫密鑰保存模式。
在動畫路徑保存模式中,位置內(nèi)插器僅用于描述對動畫路徑的插入,并且對關(guān)鍵幀的隨機存取是不需要的。為了在預(yù)定誤差范圍內(nèi)有效地編碼動畫路徑保存模式下的位置內(nèi)插器,可以刪除位置內(nèi)插器中的密鑰數(shù)據(jù)和與密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)。
另一方面,在動畫密鑰保存模式中,必須使用諸如‘替換’、‘刪除’或‘插入’的MPEG-4BIFS命令對關(guān)鍵幀進行隨機存取。在動畫密鑰保存模式中,位置內(nèi)插器中的密鑰數(shù)據(jù)的數(shù)量不會改變。后面將更詳細地描述動畫路徑保存模式和動畫密鑰保存模式。
再次參看圖5A,選擇器41按照從外部輸入的產(chǎn)生模式,選擇用于產(chǎn)生將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的模式。在步驟S330,選擇器41向斷點提取器42輸出輸入的位置內(nèi)插器。如果輸入的產(chǎn)生模式是動畫路徑保存模式,則在步驟S330,選擇器41響應(yīng)從外部輸入的產(chǎn)生方法設(shè)置信號,向重取樣器43或斷點提取器42輸出輸入的位置內(nèi)插器和產(chǎn)生密鑰數(shù)據(jù)及密鑰值數(shù)據(jù)所需的信息。
具體地說,在通過重取樣產(chǎn)生將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的情況下,選擇器41將密鑰數(shù)據(jù)的數(shù)量(即時間間隔)和產(chǎn)生模式與位置內(nèi)插器一起輸出給重取樣器43。在通過提取斷點產(chǎn)生將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的情況下,選擇器41將原始動畫路徑和將通過所提取的斷點產(chǎn)生的路徑之間的可允許誤差極限以及產(chǎn)生模式輸出給斷點提取器42。
重取樣器43通過以預(yù)定時間間隔,對從選擇器41輸入的位置內(nèi)插器產(chǎn)生的動畫路徑進行取樣,產(chǎn)生取樣的密鑰數(shù)據(jù)和取樣的密鑰值數(shù)據(jù),而斷點提取器42在步驟S335提取最小數(shù)量的斷點,這樣可以避免在由輸入位置內(nèi)插器產(chǎn)生的動畫路徑和將由所提取的斷點產(chǎn)生的動畫路徑之間的誤差超過預(yù)定的可允許誤差極限。
圖5B的流程圖示出了按照本發(fā)明的優(yōu)選實施例的重取樣器43的操作。參看圖5B,在步驟S502,重取樣器43從選擇器41接收位置內(nèi)插器和將被重取樣的密鑰數(shù)據(jù)的數(shù)量(m)。將被重取樣的密鑰數(shù)據(jù)的數(shù)量(m)可以由用戶任意設(shè)置或預(yù)先被設(shè)置為預(yù)定值。
在步驟S504,重取樣器43選擇由輸入的位置內(nèi)插器產(chǎn)生的原始動畫路徑的第一路徑點和最后路徑點,并將要被重取樣的密鑰數(shù)據(jù)的初始值(i)設(shè)置為1。
然后,在步驟S506中,重取樣器43以預(yù)定時間間隔產(chǎn)生第i個密鑰數(shù)據(jù)。
圖6A示出了原始密鑰數(shù)據(jù)和重取樣的密鑰數(shù)據(jù)。由于輸入的位置內(nèi)插器的密鑰數(shù)據(jù)表示關(guān)鍵幀在時間軸上的位置,所以,密鑰數(shù)據(jù)單調(diào)增加,但是密鑰數(shù)據(jù)之間的間隔是不規(guī)則的,如圖6A所示。
因此,如圖6A所示,重取樣器43通過將分別表示在步驟504選擇的第一路徑點和最后路徑點的密鑰數(shù)據(jù)之間的差值除以將被重取樣的密鑰數(shù)據(jù)的數(shù)量獲得預(yù)定時間間隔,然后以該預(yù)定時間間隔對要被重取樣的密鑰數(shù)據(jù)進行重取樣。
在步驟S508中,重取樣器43通過使用原始動畫路徑進行線性內(nèi)插,產(chǎn)生與由重取樣產(chǎn)生的密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)。換言之,使用與剛好在重取樣的密鑰數(shù)據(jù)之后的密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)和與剛好在重取樣的密鑰數(shù)據(jù)之前的密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù),對與重取樣的密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)進行線性內(nèi)插。
然后,在步驟S510中,重取樣器43確認(rèn)是否已經(jīng)對所有要被重取樣的密鑰數(shù)據(jù)執(zhí)行了重取樣處理并重復(fù)執(zhí)行步驟S506和S508,直到所有的密鑰數(shù)據(jù)和它們的對應(yīng)密鑰值數(shù)據(jù)都被重取樣為止。
圖5C的流程圖示出了按照本發(fā)明第一實施例的提取斷點的方法,圖7A到7F示出了按照本發(fā)明的優(yōu)選實施例的、從位置內(nèi)插器提取斷點的每個步驟。
參看圖4A、5C和圖7A到7F,在步驟S520中,斷點提取器42的線性內(nèi)插器42a從選擇器41接收位置內(nèi)插器和一個可允許的誤差極限eth。圖7A示出了由輸入的位置內(nèi)插器構(gòu)成的動畫路徑。
如圖7A所示,在步驟S522中,線性內(nèi)插器42a提取由輸入的位置內(nèi)插器構(gòu)成的動畫路徑的第一路徑點Q0和最后路徑點Qn,并將計數(shù)器(i)設(shè)置為1。
在步驟S524中,線性內(nèi)插器42a任意地或順序地逐一選擇在第一路徑點Q0和最后路徑點Qn之間的路徑點。接著,在步驟S526中,線性內(nèi)插器42a使用所選擇的路徑點線性內(nèi)插還沒有被選擇的路徑點,并向誤差計算器42b輸出所選擇的路徑點和經(jīng)過內(nèi)插的路徑點。
在步驟S528中,誤差計算器42b計算在原始動畫路徑和由所選擇的路徑點和經(jīng)過內(nèi)插的路徑點構(gòu)成的候選動畫路徑之間的誤差(e),并將誤差(e)輸出給確定單元42c。計算誤差(e)的方法將在后面進行說明。
誤差計算器42b檢查在還沒有被線性內(nèi)插器42a選擇的路徑點當(dāng)中是否仍然存在當(dāng)計算誤差(e)時沒有被考慮到的路徑點。如果存在當(dāng)計算誤差(e)時還沒有被考慮到的路徑點,則在步驟S530中,誤差計算器42b通過重復(fù)執(zhí)行步驟S524到S528,計算在所述路徑點和原始動畫路徑之間的誤差。
圖7C示出了步驟S524到S530。參看圖7C,線性內(nèi)插器42a通過在第一路徑點Q0和斷點Q1之間線性內(nèi)插多個路徑點,在預(yù)定的時刻k1提取與密鑰數(shù)據(jù)對應(yīng)的斷點Q1和產(chǎn)生第一候選動畫路徑。誤差計算器42b計算原始動畫路徑和第一候選動畫路徑之間的誤差e1。此后,利用相同的方式,線性內(nèi)插器42a通過在所述第一路徑點Q0和斷點Qk之間以及在斷點Qk和最后路徑點Qn之間線性內(nèi)插多個路徑點提取另一個的斷點Qk并產(chǎn)生第k個候選動畫路徑。誤差計算器42b計算在原始動畫路徑和第k個候選動畫路徑之間的誤差(ek)。
如果已經(jīng)對還沒有被線性內(nèi)插器42a選擇的所有路徑點執(zhí)行了步驟S524到S530,那么,在原始動畫路徑和其中的每個都是按照步驟S524到S530產(chǎn)生的候選動畫路徑之間的誤差被輸出給確定單元42c。然后,在步驟S532中,確定單元42c選擇一個斷點,該斷點形成與原始動畫路徑有最小誤差的候選動畫路徑,并將所述計數(shù)器(i)的值加1。
在步驟S534中,確定單元42c檢查在原始動畫路徑和由所提取的斷點構(gòu)成的候選動畫路徑之間的誤差(e)是否大于可允許的誤差極限eth以及計數(shù)器(i)的值是否大于密鑰數(shù)據(jù)的數(shù)量(n),即在第一路徑點Q0和最后路徑點Qn之間的路徑點的數(shù)量。
如果誤差(e)小于可允許的誤差極限eth,則意味著已經(jīng)提取了編碼所需的所有斷點。如果最后選擇作為將被編碼的斷點的數(shù)量等于‘n’,則意味著對所有路徑點進行提取斷點的處理都被完成。
但是,如果所選擇的斷點的數(shù)量小于n并且誤差(e)大于可允許的誤差極限eth,這意味著仍然存在要被提取的斷點,所提取的斷點被輸出給線性內(nèi)插器42a,然后再次執(zhí)行步驟S524到S532。
下面將描述假設(shè)當(dāng)產(chǎn)生模式是動畫路徑保存模式時,從重取樣器43和斷點提取器42輸出給密鑰數(shù)據(jù)編碼器200和密鑰值數(shù)據(jù)編碼器300的數(shù)據(jù)。
重取樣器43分別向密鑰數(shù)據(jù)編碼器200和密鑰值數(shù)據(jù)編碼器300輸出密鑰數(shù)據(jù)和密鑰值數(shù)據(jù),并分別作為將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)。
下面結(jié)合圖8,描述在產(chǎn)生模式的基礎(chǔ)上從斷點提取器42輸出的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)。
如圖8所示,假設(shè)最后被提取的斷點被稱為0,3,6和8,利用密鑰選擇標(biāo)記輸出與斷點0,3、6和8對應(yīng)的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù),表示如下表所示。
表2
上面描述了按照本發(fā)明第一實施例的分析器40的結(jié)構(gòu)。但是,對于本領(lǐng)域普通技術(shù)人員來說,很明顯,分析器40可以僅僅由斷點提取器42組成而沒有選擇器41和重取樣器43或者僅僅由重取樣器43組成而沒有選擇器41和斷點提取器42。
下面將描述按照本發(fā)明第二實施例的分析器40的例子。
參看圖4B,按照本發(fā)明第二實施例的分析器40包括用于接收和重取樣位置內(nèi)插器的重取樣器45,和用于提取重取樣的位置內(nèi)插器的斷點并輸出將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的斷點提取器46。本發(fā)明第二實施例中的斷點提取器46與本發(fā)明第一實施例的斷點提取器類似,也包括線性內(nèi)插器46a、誤差計算器46b和確定單元46c。
當(dāng)位置內(nèi)插器被輸入給分析器40時,重取樣器45將由位置內(nèi)插器構(gòu)成的第一動畫路徑重取樣為彼此具有預(yù)定時間間隔的預(yù)定數(shù)量的部分。
重取樣器45將由取樣的密鑰數(shù)據(jù)和取樣的密鑰值數(shù)據(jù)組成的位置內(nèi)插器輸出給斷點提取器46的線性內(nèi)插器46a。
線性內(nèi)插器46a通過執(zhí)行圖5C所示的步驟S522到S526,內(nèi)插位置內(nèi)插器,并將內(nèi)插的位置內(nèi)插器輸出給誤差計算器46b。誤差計算器46b通過執(zhí)行步驟S528和S530,計算第一動畫路徑和由所述內(nèi)插的位置內(nèi)插器組成的第二動畫路徑之間的誤差。確定單元46C選擇將導(dǎo)致在所述第一和第二動畫路徑之間最小誤差的一個路徑點,確認(rèn)對應(yīng)的誤差是否大于可允許的誤差極限eth,并確認(rèn)第一動畫路徑的所有路徑點是否都已經(jīng)被選擇,并且產(chǎn)生將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)。
如上所述,在按照本發(fā)明第二實施例的分析器40中,除了斷點提取器46接收由從重取樣器45輸出的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)組成的位置內(nèi)插器和對由從重取樣器45輸入的位置內(nèi)插器構(gòu)成的動畫路徑執(zhí)行的提取斷點處理以外,重取樣器45和斷點提取器46的操作與本發(fā)明第一實施例中的對應(yīng)部件的操作相同。
下面結(jié)合圖4C描述按照本發(fā)明第三實施例的分析器40的例子。
參看圖4C,分析器40包括斷點提取器48,用于接收位置內(nèi)插器,從由位置內(nèi)插器構(gòu)成的第一動畫路徑中提取斷點,并輸出密鑰數(shù)據(jù)和密鑰值數(shù)據(jù);還包括重取樣器49,用于以預(yù)定時間間隔,對由位置內(nèi)插器構(gòu)成的第二動畫路徑重取樣,該位置內(nèi)插器由從斷點提取器48輸入的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)組成。與本發(fā)明第一和第二實施例的斷點提取器類似,斷點提取器48也包括線性內(nèi)插器48a、誤差計算器48b和確定單元48c。
與本發(fā)明第一實施例的斷點提取器相似,斷點提取器48向重取樣器49輸出從第一動畫路徑提取的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)。
重取樣器49以預(yù)定時間間隔,對從斷點提取器48輸入的、由包括密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的位置內(nèi)插器組成的動畫路徑重取樣,并輸出將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)。重取樣器49的功能與本發(fā)明第一和第二實施例的重取樣器相同,這里不再重復(fù)。
從在本發(fā)明第一到第三實施例中的分析器40輸出的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)分別被輸出給密鑰數(shù)據(jù)編碼器200和密鑰值數(shù)據(jù)編碼器300。
下面結(jié)合圖9A到12J,描述按照本發(fā)明優(yōu)選實施例的密鑰數(shù)據(jù)編碼器200的例子。
圖9A的框圖示出了按照本發(fā)明優(yōu)選實施例的密鑰數(shù)據(jù)編碼器200的例子。參看圖9A,密鑰數(shù)據(jù)編碼器200包括線性密鑰編碼器900、量化器910、DPCM處理器920、移位器930、折疊處理器940、DND處理器950和熵編碼器960。
線性密鑰編碼器900識別其中在整個密鑰數(shù)據(jù)范圍中密鑰數(shù)據(jù)線性增加的區(qū)域并編碼該區(qū)域。量化器910使用能夠使量化誤差最小的量化方法,量化輸入給它的密鑰數(shù)據(jù)。DPCM處理器920接收量化的密鑰數(shù)據(jù)并產(chǎn)生該密鑰數(shù)據(jù)的差分?jǐn)?shù)據(jù)。移位器930從差分?jǐn)?shù)據(jù)中減去所有差分?jǐn)?shù)據(jù)中具有最高頻率的差分基準(zhǔn)點。折疊處理器940將差分?jǐn)?shù)據(jù)傳輸給正數(shù)或負(fù)數(shù)區(qū)域。DND處理器950通過對所述差分?jǐn)?shù)據(jù)選擇執(zhí)行分頻操作、上分頻操作和下分頻操作,減小密鑰數(shù)據(jù)的差分?jǐn)?shù)據(jù)的范圍。熵編碼器960使用被用于對每個比特平面上的差分?jǐn)?shù)據(jù)進行編碼的函數(shù)SignedAAC或UnsignedAAC,編碼差分?jǐn)?shù)據(jù)。
下面將結(jié)合圖10A和10B,描述密鑰數(shù)據(jù)編碼器200的操作。圖10A和10B的流程圖示出了按照本發(fā)明優(yōu)選實施例的編碼密鑰數(shù)據(jù)的方法。
當(dāng)密鑰數(shù)據(jù)被輸入給密鑰數(shù)據(jù)編碼器200時,密鑰數(shù)據(jù)的數(shù)量和每個密鑰數(shù)據(jù)的數(shù)位被輸入給標(biāo)題編碼器400并被編碼。線性密鑰編碼器900從輸入的密鑰數(shù)據(jù)中搜索線性密鑰區(qū)域,即關(guān)鍵幀被以預(yù)定時間間隔置位的區(qū)域,密鑰數(shù)據(jù)彼此之間具有相同的差值,由此,密鑰數(shù)據(jù)線性增加,然后,在步驟S9000中,首先編碼線性密鑰區(qū)域。
諸如3Dmax或Maya等著名的3D應(yīng)用軟件在一個特定的區(qū)域中,使用其間具有預(yù)定時間間隔的密鑰,產(chǎn)生基于關(guān)鍵幀的動畫。在這種情況下,可以很容易地使用線性密鑰數(shù)據(jù)區(qū)域的開始和結(jié)束密鑰數(shù)據(jù)和存在于它們之間的關(guān)鍵幀的數(shù)量,編碼密鑰數(shù)據(jù)。因此,線性預(yù)測對于在某個區(qū)域中使用內(nèi)插器編碼密鑰是非常有用的。
下面的等式被用于線性預(yù)測。t(i)=tE-tSE-S+tS(0≤i≤E-S,S<E)…(1)]]>這里,tS表示部分線性區(qū)域開始的密鑰的數(shù)據(jù),tE表示部分線性區(qū)域結(jié)束的密鑰的數(shù)據(jù),S表示tS的下標(biāo)和E表示tE的下標(biāo)。使用下述等式可以計算在從第S個密鑰數(shù)據(jù)到第E個密鑰數(shù)據(jù)的特定區(qū)域范圍中的實際密鑰數(shù)據(jù)和按照等式(1)線性預(yù)測的密鑰數(shù)據(jù)之間的誤差。ei=t(i)-ti+s=tE-tSE-Si+tS-ti+S…(2)]]>如果使用等式(2)計算的誤差當(dāng)中的最大值不大于一個預(yù)定的臨界值,則可以認(rèn)為ti在區(qū)域[tS,tE]中或某個誤差范圍內(nèi)是共線的。使用下述等式(3)確定最大誤差值ti是否與一個特定區(qū)域共線。Ep=MAXi=0,..(E-S)|ei|=MAXi=o,…(E-S)|tE-tSE-Si+tS-ti+S|…(3)]]>如果Ep≤12nBits+1,]]>則ti與區(qū)域[tS,tE]共線。這里,nBits表示用于編碼的比特數(shù)。
如果線性密鑰編碼器900尋找部分線性區(qū)域,則部分線性密鑰數(shù)據(jù)區(qū)域的開始和結(jié)束密鑰數(shù)據(jù)被輸出給浮點數(shù)轉(zhuǎn)換器905。包括在線性密鑰數(shù)據(jù)區(qū)域中的密鑰的數(shù)量被輸出給標(biāo)題編碼器400并被編碼。使用線性編碼可以顯著地減少要被編碼的數(shù)據(jù)的數(shù)量。
使用浮點數(shù)轉(zhuǎn)換對開始密鑰數(shù)據(jù)和結(jié)束密鑰數(shù)據(jù)進行編碼,這將在后面描述。
浮點數(shù)轉(zhuǎn)換器905將由二進制系統(tǒng)表示的密鑰數(shù)據(jù)轉(zhuǎn)換為十進制系統(tǒng),以便編碼開始密鑰數(shù)據(jù)和結(jié)束密鑰數(shù)據(jù)。
計算機將所述浮點數(shù)存儲為32位的二進制數(shù)。如果給出以二進制系統(tǒng)表示的浮點數(shù),則浮點數(shù)轉(zhuǎn)換器905將該浮點數(shù)轉(zhuǎn)換為十進制系統(tǒng)的尾數(shù)和指數(shù),這一處理由下述等式表示。 例如,如下所示,可以利用計算機將浮點數(shù)12.34轉(zhuǎn)換為二進制數(shù)。01100010101110000101000112100000103]]>1符號;2二進制系統(tǒng)的尾數(shù);3二進制系統(tǒng)的指數(shù)。
如下所示,按照等式(4)可以將二進制數(shù)轉(zhuǎn)換成十進制數(shù)。011234223]]>1符號;2十進制系統(tǒng)的尾數(shù);3十進制系統(tǒng)的指數(shù)。
為了將十進制系統(tǒng)的尾數(shù)和指數(shù)包括在比特流中,必須計算表示尾數(shù)和指數(shù)所需的比特數(shù)。尾數(shù)具有-38和38之間的值,由此能夠與其符號一起用7位表示。表示尾數(shù)所需的比特數(shù)根據(jù)數(shù)位決定。尾數(shù)的值和表示該尾數(shù)需要的比特數(shù)示于下表中。
表3
使用上述過程已經(jīng)被搜索和轉(zhuǎn)換的、所述線性密鑰數(shù)據(jù)區(qū)域中的開始和結(jié)束密鑰數(shù)據(jù)被按照圖10C和10D所示的編碼處理進行編碼,并輸出給標(biāo)題編碼器400和存儲在比特流中。
圖10C和10D示出了對輸入給浮點數(shù)轉(zhuǎn)換器905的兩個浮點數(shù)進行編碼的處理。下面結(jié)合圖10C和10D,描述浮點數(shù)轉(zhuǎn)換器905編碼浮點數(shù)的方法。
在步驟S9040中,浮點數(shù)轉(zhuǎn)換器905接收原始密鑰數(shù)據(jù)的數(shù)位Kd、開始密鑰數(shù)據(jù)S和結(jié)束密鑰數(shù)據(jù)E并按照等式(4)對它們進行轉(zhuǎn)換。
浮點數(shù)轉(zhuǎn)換器905首先編碼S。具體地說,浮點數(shù)轉(zhuǎn)換器905檢查S的數(shù)位是否與Kd不同,如果S的數(shù)位與Kd不同,在步驟S9042中獲得S的數(shù)位并輸出給標(biāo)題編碼器400。浮點數(shù)轉(zhuǎn)換器905用函數(shù)Digit()獲得S的數(shù)位。
如果S的數(shù)位大于7,則在步驟S9043中,使用預(yù)定數(shù)量的比特(在本發(fā)明中,按照IEEE標(biāo)準(zhǔn)754的浮點數(shù)方式,使用32比特)將S輸出給標(biāo)題編碼器400,從而使S的數(shù)位能夠被包括在比特流中。
如果S的數(shù)位不是0并且小于7,則在步驟S9044中,浮點數(shù)轉(zhuǎn)換器905將S的符號輸出給標(biāo)題編碼器400。使用表3獲得編碼S的尾數(shù)的絕對值所需的比特數(shù)。接著,在步驟S9045中,使用從表3獲得的比特數(shù)將S的尾數(shù)的絕對值輸出給標(biāo)題編碼器400。在步驟S9046中,浮點數(shù)轉(zhuǎn)換器905計算S的指數(shù),并將S的符號輸出給標(biāo)題編碼器400,和將指數(shù)作為例如6比特的預(yù)定數(shù)量的比特輸出給標(biāo)題編碼器400。這種密鑰數(shù)據(jù)轉(zhuǎn)換使得可以明顯地減少包括在所述比特流中的比特數(shù)。
如果S的數(shù)位是0,則對開始密鑰數(shù)據(jù)的編碼結(jié)束,由于當(dāng)S的數(shù)位是0時,對應(yīng)的浮點數(shù)也是不需要編碼的0,所以該方法轉(zhuǎn)到對結(jié)束密鑰數(shù)據(jù)進行轉(zhuǎn)換。
在轉(zhuǎn)換和編碼開始密鑰數(shù)據(jù)S之后,浮點數(shù)轉(zhuǎn)換器905對結(jié)束密鑰數(shù)據(jù)E進行轉(zhuǎn)換。E的轉(zhuǎn)換幾乎與S的轉(zhuǎn)換相同。具體地說,在步驟S9047中,檢查E的指數(shù)是否與S的指數(shù)相同。如果E的指數(shù)與S的指數(shù)相同,只把表示E的指數(shù)與的S的指數(shù)相同的標(biāo)記比特輸出給標(biāo)題編碼器400。如果E的指數(shù)與S的指數(shù)不同,則在步驟S9048中,以與將S的指數(shù)輸出給標(biāo)題編碼器400相同的方式,將E的指數(shù)及標(biāo)記比特輸出給標(biāo)題編碼器400。
不屬于線性密鑰區(qū)域的輸入密鑰數(shù)據(jù)中的密鑰數(shù)據(jù)被輸入到量化器910中,并被按照預(yù)定的量化比特尺寸、即nKeyQBit,進行量化。
但是,在使用譯碼器譯碼量化的密鑰數(shù)據(jù)的情況下,由于原始密鑰數(shù)據(jù)和量化的密鑰數(shù)據(jù)之間的誤差,不可能完好地將原始數(shù)據(jù)恢復(fù)。因此,本發(fā)明的量化器910獲得輸入密鑰數(shù)據(jù)當(dāng)中的最大值和最小值,并使用該最大值和最小值量化輸入密鑰數(shù)據(jù)。另外,本發(fā)明包括一個量化誤差最小化器915,從而可以使用輸入密鑰數(shù)據(jù)當(dāng)中的最大值和最小值使原始密鑰數(shù)據(jù)和它們的量化密鑰數(shù)據(jù)之間的誤差最小。
步驟S9100中,量化誤差最小化器915在使用用于控制量化范圍的方法預(yù)先量化或逆量化輸入密鑰數(shù)據(jù),從而可以使量化誤差最小。
具體地說,如果用于量化的混合最大值用Max表示,將被控制的用于量化的最小值用Min表示,輸入值用Xi表示,用于量化的比特數(shù)用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的方法。一種用于減少誤差和的方法是通過連續(xù)地控制Min,直到誤差和最小為止。另一種如下所述。
首先,讓我們假設(shè)Xi=(i+n)ΔX+εi,其中,Xi指示輸入密鑰數(shù)據(jù)的順序,ΔX指示輸入數(shù)據(jù)的基本步長,n是一個任意整數(shù)和εi指示平均值為0的隨機噪聲。
下面,當(dāng)di≡Xi-Xi-1=ΔX+(εi-εi-1)時,Δ′X=E[di]并且Min=Max-Δ′X*(2nQuantBit-1)。
可以使量化誤差最小的Min以及Max被輸入給量化器910并用于量化密鑰數(shù)據(jù)。
在步驟S9200中,量化器910接收能夠使量化誤差最小的最大值Max和最小值Min,并利用等式(6)量化密鑰數(shù)據(jù)fKeyi。nQKey=floor(fKeyi-fKeyMinfKeyMax-fKeyMin(2nKeyQBit-1)+0.5)…(6)]]>這里,i表示量化密鑰數(shù)據(jù)的下標(biāo),nQKeyi表示量化密鑰數(shù)據(jù)的整數(shù)數(shù)組,fKeyi表示量化密鑰數(shù)據(jù)的浮點數(shù)的數(shù)組,fKeyMax表示從量化誤差最小化器915輸入的最大值,fKeyMin表示從量化誤差最小化器915輸入的最小值,和nKeyQBit表示量化比特尺寸。在等式(6)中,函數(shù)floor(v)是一個輸出不大于某個浮點值v的最大整數(shù)的函數(shù)。
本發(fā)明的量化器910可以不使用這種減少量化誤差的算法,在這種情況下,僅使用輸入密鑰數(shù)據(jù)中的最大和最小值fKeyMax和fKeyMin來進行量化。
下面結(jié)合圖10E更完整地描述本發(fā)明的量化處理。
在步驟S9210中,量化器910接收密鑰數(shù)據(jù),并且在步驟S9220中檢查是否已經(jīng)從量化誤差最小化器915輸入了最大和最小值MAX和MIN。
如果已經(jīng)輸入了MAX和MIN,量化器910在步驟S9230中分別將用于量化的最大和最小值fKeyMax和fKeyMin設(shè)置為MAX和MIN,并將新設(shè)置的最大和最小值fKeyMax和fKeyMin輸出給浮點數(shù)轉(zhuǎn)換器905。經(jīng)過上述浮點數(shù)轉(zhuǎn)換處理,最大和最小值fKeyMax和fKeyMin被轉(zhuǎn)換和編碼并輸出給標(biāo)題編碼器400,從而它們能夠被包括在在譯碼中使用的密鑰標(biāo)題中。
如果不存在從量化誤差最小化器915輸入的值,則在步驟S9240中,量化器910分別將第一密鑰數(shù)據(jù)fKey0和最后密鑰數(shù)據(jù)fKeyn-1設(shè)置為最小值fKeyMin和最大值fKeyMax。
接著,在步驟S9250中,量化器910檢查最大值fKeyMax是否小于1但大于0以及最小值fKeyMin是否大于0。如果最大值fKeyMax不小于1或不大于0,那么,最大和最小值fKeyMax和fKeyMin被輸出給浮點數(shù)轉(zhuǎn)換器905并通過上述浮點數(shù)轉(zhuǎn)換被轉(zhuǎn)換和編碼。接著,在步驟S9260中,已經(jīng)被轉(zhuǎn)換和編碼的最大和最小值fKeyMax和fKeyMin被包括在密鑰標(biāo)題中,從而可以在譯碼時使用它們。
另一方面,如果最大值fKeyMax小于1并且最小值fkeyMin大于0,則在步驟S9270中,檢查用于指示在用于譯碼的密鑰標(biāo)題中是否將包括最大和最小值fKeyMax和fKeyMin的標(biāo)記。如果該標(biāo)記已經(jīng)被設(shè)置,從而使最大和最小值fKeyMax和fKeyMin能夠被包括在密鑰標(biāo)題中,則執(zhí)行步驟S9260,以便將最大和最小值fKeyMax和fKeyMin輸出給標(biāo)題編碼器400。如果還沒有設(shè)置該標(biāo)記,則量化器910不允許將最大和最小值fKeyMax和fKeyMin包括在標(biāo)題中。
在最大和最小值fKeyMax和fKeyMin沒有被包括在標(biāo)題中的情況下,假設(shè)密鑰數(shù)據(jù)編碼器和密鑰數(shù)據(jù)譯碼器被分別用于執(zhí)行編碼和譯碼,從而將最大和最小值fKeyMax和fKeyMin分別設(shè)置為1和0。在這種情況下,量化器910在步驟S9280中分別將最大和最小值fKeyMax和fKeyMin設(shè)置為1和0。對于密鑰數(shù)據(jù)譯碼器來講,最大和最小值fKeyMax和fKeyMin是已知的,因此,它們不需要被包括在密鑰標(biāo)題中。
在步驟S9290中,量化器910通過將已經(jīng)經(jīng)過上述處理設(shè)置的最大和最小值fKeyMax和fKeyMin代入等式(6),量化輸入密鑰數(shù)據(jù)并將量化的密鑰數(shù)據(jù)輸出給DPCM處理器920。
DPCM處理器920接收量化的密鑰數(shù)據(jù),并對量化的密鑰數(shù)據(jù)執(zhí)行預(yù)定次數(shù)的DPCM。接著,DPCM處理器920向標(biāo)題編碼器400輸出DPCM的階數(shù)以及在每個DPCM循環(huán)內(nèi)獲得的內(nèi)部密鑰數(shù)據(jù),利用DPCM的階數(shù)可以獲得在離散度方面的最小值。在步驟S9300中,DPCM處理器920將由DPCM產(chǎn)生的差分?jǐn)?shù)據(jù)輸出給移位器930。
參看圖10F,在步驟S9310中,DPCM處理器920對輸入密鑰數(shù)據(jù)執(zhí)行預(yù)定次數(shù)的DPCM并將DPCM的循環(huán)數(shù)存儲為DPCM的階數(shù)。在本發(fā)明的優(yōu)選實施例中,DPCM可以被執(zhí)行3次。
此后,在步驟S9320中,DPCM處理器920計算每個DPCM循環(huán)結(jié)果的離散度。這里,所述離散度可以由離差、標(biāo)準(zhǔn)偏差或四分位差表示,在本發(fā)明的優(yōu)選實施例中,可以使用四分位差。
接著,DPCM處理器920選擇DPCM的一個循環(huán),通過這個循環(huán),可以獲得離散度的最小值,并向移位器930輸出所選擇的DPCM的階數(shù)的結(jié)果。在步驟S9330中,所選擇的DPCM的循環(huán)、每個DPCM循環(huán)的內(nèi)部密鑰數(shù)據(jù)和DPCM所需的其他信息段被輸出給標(biāo)題編碼器400。但是,在本發(fā)明的優(yōu)選實施例中,如果密鑰的數(shù)量小于5,則僅僅執(zhí)行一次DPCM。例如,按照等式(7)執(zhí)行DPCM的第一循環(huán)。
Δi=nQKeyi+1-nQKeyi...(7)這里,i表示量化密鑰數(shù)據(jù)的下標(biāo),nQKeyi表示整數(shù)數(shù)組,和Δi表示差分?jǐn)?shù)據(jù)。
在步驟S9340中,DPCM處理器920計算編碼所選擇的DPCM循環(huán)的結(jié)果需要的比特數(shù)和已由DPCM產(chǎn)生的在預(yù)定存儲器(nQStep_DPCM)中的密鑰數(shù)據(jù)的差分?jǐn)?shù)據(jù)。對于本領(lǐng)域普通技術(shù)人員來講很明顯,可以在選擇將被編碼的密鑰數(shù)據(jù)的后續(xù)步驟之后執(zhí)行編碼所需的、對比特數(shù)的計算。
移位器930從由DPCM處理器920輸入的所有差分?jǐn)?shù)據(jù)中選擇具有最高頻率的差分基準(zhǔn)點(此后稱之為模式)。然后,在步驟S9400中,移位器930從所有差分?jǐn)?shù)據(jù)中減去該模式,以便將大多數(shù)將被編碼的數(shù)據(jù)安排在0的周圍并減少編碼所需的比特數(shù)。
執(zhí)行這種從所有量化的密鑰數(shù)據(jù)中減去模式nKeyshift的移位操作,這種移位操作可由下述等式表示。
shift(nQKeyi)=nQkeyi-nKeyShift ...(8)這里,i表示量化密鑰數(shù)據(jù)的下標(biāo),nQKeyi表示整數(shù)數(shù)組,和nKeyShift表示模式值。作為移位操作的結(jié)果,具有最高頻率的差分?jǐn)?shù)據(jù)變成0,從而可以明顯減少編碼所需的比特數(shù)。
已經(jīng)被經(jīng)過移位操作的密鑰數(shù)據(jù)被輸出給折疊處理器940和DND處理器950,模式值nKeyShift被輸出給標(biāo)題編碼器400從而被包括在密鑰標(biāo)題中。
在步驟S9500中,折疊處理器940對移位器930的輸出執(zhí)行折疊操作并將折疊操作的結(jié)果輸出給DND處理器950。
折疊操作被用于通過將差分?jǐn)?shù)據(jù)集中在正或負(fù)數(shù)區(qū)域內(nèi),減少在正數(shù)區(qū)域和負(fù)數(shù)區(qū)域廣泛離散的差分?jǐn)?shù)據(jù)的范圍。在本實施例中,按照等式(9)執(zhí)行折疊操作,以便將差分?jǐn)?shù)據(jù)集中在所述正數(shù)區(qū)域中。
fold(nQKeyi)=2·nQKeyi(如果nQKeyi≥0)...(9)=2|nQKeyi|-1(如果nQKeyi<0)這里,i表示量化密鑰數(shù)據(jù)的下標(biāo),nQKeyi表示整數(shù)數(shù)組。作為折疊操作的結(jié)果,正差分?jǐn)?shù)據(jù)被轉(zhuǎn)換為偶數(shù),負(fù)差分?jǐn)?shù)據(jù)被轉(zhuǎn)換為奇數(shù)。
折疊處理器940計算編碼已經(jīng)經(jīng)過折疊操作的差分?jǐn)?shù)據(jù)所需的比特數(shù),并將其存儲在預(yù)定的存儲器nQStep_fold中。在這個步驟中,對于本領(lǐng)域普通技術(shù)人員很明顯,編碼所需比特數(shù)的計算可以在選擇將被熵編碼的差分?jǐn)?shù)據(jù)的后續(xù)步驟之后執(zhí)行。在折疊處理器940中通過折疊操作產(chǎn)生的數(shù)據(jù)被輸出給DND處理器950。
為了提高熵編碼的效率,在步驟S9600中,DND處理器950對輸入的密鑰數(shù)據(jù)的差分?jǐn)?shù)據(jù)執(zhí)行預(yù)定次數(shù)的DND操作,由此減少差分?jǐn)?shù)據(jù)的范圍。
參看圖9B,DND處理器950包括DND操作器952,用于對差分?jǐn)?shù)據(jù)執(zhí)行DND操作;第一差分?jǐn)?shù)據(jù)選擇器954,用于根據(jù)編碼所需的比特數(shù)選擇將被熵編碼的差分?jǐn)?shù)據(jù);上移位操作器956,用于對已經(jīng)被執(zhí)行了DND操作的差分?jǐn)?shù)據(jù)執(zhí)行上移位操作;和第二差分?jǐn)?shù)據(jù)選擇器958,用于從只經(jīng)過DND操作的差分?jǐn)?shù)據(jù)和已經(jīng)被執(zhí)行上移位操作的差分?jǐn)?shù)據(jù)之間選擇具有較低離散度的差分?jǐn)?shù)據(jù),并將所選擇的差分?jǐn)?shù)據(jù)輸出給熵編碼器960。
在下面的段落中,將描述在DND操作器952中執(zhí)行的DND操作。
當(dāng)已經(jīng)在折疊處理器940中被執(zhí)行了折疊操作的差分?jǐn)?shù)據(jù)被輸入給DND操作器952時,它們被分成兩組,比另一組差分?jǐn)?shù)據(jù)具有較高范圍的一組差分?jǐn)?shù)據(jù)通過一個分頻函數(shù)被移動到正數(shù)區(qū)域。該分頻函數(shù)是通過下述等式定義的。
divide(nQKeyj,nKeyMax) ...(10)=nQKeyj-(nKeyMax+1) (如果nQKeyj> )=nQKeyj-(nKeyMax+1) (如果nQKeyj> )這里,j表示輸入差分?jǐn)?shù)據(jù)的下標(biāo),nQKeyj表示整數(shù)數(shù)組,和nKeyMax表示已經(jīng)被進行折疊操作的差分?jǐn)?shù)據(jù)當(dāng)中的最大值。特別是,在大多數(shù)差分?jǐn)?shù)據(jù)沿著由所有差分?jǐn)?shù)據(jù)占據(jù)的整個區(qū)域的邊界密集排列的情況下,使用分頻操作可以明顯地減少所有差分?jǐn)?shù)據(jù)的整個區(qū)域。
在分頻操作之后,計算離散度,在這種情況下,編碼所需的比特數(shù)被用作測量離散度,以便可以在用于編碼的比特尺寸中選擇最小值。
在DND操作之后,進一步執(zhí)行不同類型的DND操作,即上分頻操作或下分頻操作。根據(jù)差分?jǐn)?shù)據(jù)的正范圍尺寸和差分?jǐn)?shù)據(jù)的負(fù)范圍尺寸確定是執(zhí)行上分頻操作還是執(zhí)行下分頻操作。
如果具有正值的差分?jǐn)?shù)據(jù)的范圍大于具有負(fù)值的差分?jǐn)?shù)據(jù)的范圍,則執(zhí)行由下述等式定義的下分頻操作。
divide-down(nQKeyj,nKeyMax) ...(11)=-2(nKeyMax-nQKeyj+1)+1 (如果nQKeyj> )=nQKeyj(如果0≤nQKeyj≤ )=2·nQKeyj(如果nQKeyj<0)另一方面,如果具有正值的差分?jǐn)?shù)據(jù)的范圍大于具有負(fù)值的差分?jǐn)?shù)據(jù)的范圍,則執(zhí)行由下述等式定義的上分頻操作。
divide-up(nQKeyj,nKeyMin) ...(12)=nQKeyj(nQKeyj≥0)=2·nQKeyj( ≤nQKeyj≤0)=2(nKeyMin-nQKeyj-1)+1 (nQKeyj< )在等式(11)和(12)中,j表示量化密鑰數(shù)據(jù)的下標(biāo),nQKeyj表示整數(shù)數(shù)組,nKeyMax表示nQKeyj的最大值,nKeyMin表示nQKeyj的最小值。
下面將結(jié)合圖10G描述DND操作器952的操作。
當(dāng)所述輸入密鑰的差分?jǐn)?shù)據(jù)是從折疊處理器940輸入時,在步驟S9610中,DND操作器952獲得輸入差分?jǐn)?shù)據(jù)當(dāng)中的最大值nKeyMax和最小值nKeyMin。然后,在步驟S9620中,DND操作器952將nKeyMax的絕對值與nKeyMin的絕對值進行比較。如果nKeyMax不小于nKeyMin的絕對值,則DND操作器952在步驟S9622將nKeyMax設(shè)置為當(dāng)前DND操作循環(huán)中的最大值。
在步驟S9624中,DND操作器952檢查DND操作的階數(shù)是否是1,換言之,檢查DND操作的階數(shù)是否是1,如果是,則在步驟S9630中,DND操作器952通過將所述最大值代入等式(10),對輸入差分?jǐn)?shù)據(jù)執(zhí)行分頻操作。
此后,在步驟S9640中,DND操作器952使用函數(shù)getQBit()測量用于編碼已經(jīng)被使用分頻操作減少了的差分?jǐn)?shù)據(jù)范圍所需的比特尺寸。在步驟S9650中,如果DND操作的階數(shù)證明是1,則編碼所需的比特尺寸被存儲作為指示用于編碼的最小尺寸的值nQBitDND,并在步驟S9655中將DND操作的階數(shù)增加1。
接著,DND處理器952再次執(zhí)行步驟S9610到S9622。如果在步驟S9624中DND操作的階數(shù)不是1,則DND操作器在步驟S9634中執(zhí)行下分頻操作,將所述最大值nKeyMax代入等式(11)。在步驟S9640中,DND操作器952計算編碼已經(jīng)被執(zhí)行下分頻操作的差分?jǐn)?shù)據(jù)所需的比特數(shù)。如果該數(shù)小于在DND操作的前一循環(huán)中存儲的最小值nQBitDND,則在步驟S9658中,在DND操作之后,它取代編碼所需的最小比特尺寸。
在步驟S9620中,如果最小值nKeyMin的絕對值大于所述最大值nKeyMax的絕對值,則在步驟S9623中,在DND操作的當(dāng)前循環(huán)中的最大值被更新為最小值,然后在步驟S9628中執(zhí)行上分頻操作,用所述最小值替換等式(12)中的nKeyMin。此后,在步驟S9640中,DND操作器952計算用于編碼已經(jīng)被執(zhí)行上分頻操作的差分?jǐn)?shù)據(jù)的比特數(shù)。如果在步驟S9652中證明該計算的結(jié)果小于在DND操作的前一循環(huán)中已經(jīng)存儲的nQBitDND,則在步驟S9658中,它取代用于在DND操作之后進行編碼所需的最小比特數(shù)nQBitDND。
DND處理器952執(zhí)行預(yù)定次數(shù)的DND操作,并且DND操作的執(zhí)行次數(shù)可以改變。例如,在本實施例中,DND操作被執(zhí)行7次。DND操作器952向第一差分?jǐn)?shù)據(jù)選擇器954輸出nQBitDND和與nQBitDND對應(yīng)的差分?jǐn)?shù)據(jù)。DND操作器952向標(biāo)題編碼器400輸出DND的階數(shù)并使得能夠?qū)⑺鼈儼ㄔ诒忍亓髦校眠@個階數(shù)已經(jīng)產(chǎn)生了相應(yīng)的差分?jǐn)?shù)據(jù)。
第一差分?jǐn)?shù)據(jù)選擇器954接收已經(jīng)被執(zhí)行移位操作的差分?jǐn)?shù)據(jù)、已經(jīng)被執(zhí)行折疊操作的差分?jǐn)?shù)據(jù)和已經(jīng)被執(zhí)行DND操作的差分?jǐn)?shù)據(jù),并確定將對這三個差分?jǐn)?shù)據(jù)當(dāng)中的哪個差分?jǐn)?shù)據(jù)進行熵編碼。
參看圖10A和10B,如果在步驟S9700中,用于在DND操作之后進行編碼所需的最小比特數(shù)nQBitDND不小于用于在DPCM操作之后進行編碼所需的比特的尺寸nQStep-DPCM,則第一差分?jǐn)?shù)據(jù)選擇器954選擇DPCM的結(jié)果并對它們執(zhí)行移位操作。接著,在步驟S9710中,第一差分?jǐn)?shù)據(jù)選擇器954向熵編碼器960輸出移位操作的結(jié)果并允許它們被熵編碼。在這種情況下,DND操作的階數(shù)被設(shè)置為-1,并被輸出給標(biāo)題編碼器400,并被包括在密鑰標(biāo)題中。
但是,如果證明在步驟S9720中執(zhí)行的結(jié)果小于nQStep-DPCM且不小于用于在折疊操作之后進行編碼的比特尺寸,則第一差分?jǐn)?shù)據(jù)選擇器954在步驟S9730中將經(jīng)過折疊操作的差分?jǐn)?shù)據(jù)輸出給熵編碼器960并允許它們被熵編碼,在這種情況下,DND操作的階數(shù)被設(shè)置為0,并被輸出給標(biāo)題編碼器400,并被包括在密鑰標(biāo)題中。
如果用于在DND操作之后編碼差分?jǐn)?shù)據(jù)所需的比特數(shù)最小,則第一差分?jǐn)?shù)據(jù)選擇器954向上移位操作器956輸出經(jīng)過DND操作的差分?jǐn)?shù)據(jù),然后,上移位操作器956在步驟S9740中計算從第一差分?jǐn)?shù)據(jù)選擇器954輸入的差分?jǐn)?shù)據(jù)的第一離散度。接著,在步驟S9800中,上移位操作器956對經(jīng)過DND操作的差分?jǐn)?shù)據(jù)執(zhí)行由下述等式規(guī)定的上移位操作,并在步驟S9810中計算上移位操作結(jié)果的第二離散度。
shift-up(nQKeyj,nKeyMax) ...(13)=nQKeyj(如果nQKeyj≥0)=nKeyMax-nQKeyj(如果nQKeyj<0)這里,j表示量化的密鑰數(shù)據(jù)的差分?jǐn)?shù)據(jù)的下標(biāo),nQKeyj表示整數(shù)數(shù)組,和nKeyMax表示差分?jǐn)?shù)據(jù)當(dāng)中的最大值。
當(dāng)輸入已經(jīng)被執(zhí)行了DND操作的差分?jǐn)?shù)據(jù)和已經(jīng)被執(zhí)行了上移位操作的差分?jǐn)?shù)據(jù)時,在步驟S9900中,第二差分?jǐn)?shù)據(jù)選擇器958將第一離散度與第二離散度進行比較。如果第二離散度小于第一離散度,則在步驟S9910中,第二差分?jǐn)?shù)據(jù)選擇器958向熵編碼器960輸出經(jīng)過上移位操作的差分?jǐn)?shù)據(jù)并允許它們被熵編碼。第二差分?jǐn)?shù)據(jù)選擇器958向標(biāo)題編碼器400輸出在DND操作中使用的最大和最小值nKeyMax和nKeyMin以及在上移位操作中使用的最大值nKeyMax,并允許將它們包括在密鑰標(biāo)題中。
但是,如果第一離散度小于所述第二離散度,則在步驟S9920中,第二差分?jǐn)?shù)據(jù)選擇器958向熵編碼器960輸出經(jīng)過DND操作的差分?jǐn)?shù)據(jù)并允許對它們進行熵編碼。然后,第二差分?jǐn)?shù)據(jù)選擇器958向標(biāo)題編碼器400僅輸出在DND操作中使用的最大和最小值nKeyMax和nKeyMin。在本發(fā)明的優(yōu)選實施例中,可以使用標(biāo)準(zhǔn)偏差作為第一和第二離散度的測量。
熵編碼器960根據(jù)差分?jǐn)?shù)據(jù)的特征,對差分?jǐn)?shù)據(jù)執(zhí)行兩種不同的功能。例如,被執(zhí)行了DPCM操作和移位操作的差分?jǐn)?shù)據(jù)和僅僅被執(zhí)行了分頻操作的差分?jǐn)?shù)據(jù)具有正和負(fù)值,由此,需要執(zhí)行用于編碼每個差分?jǐn)?shù)據(jù)的符號以及差分?jǐn)?shù)據(jù)本身的處理。另一方面,由于被執(zhí)行了折疊操作的差分?jǐn)?shù)據(jù)僅具有正值,所以,僅執(zhí)行用于編碼差分?jǐn)?shù)據(jù)的處理。
在本發(fā)明的優(yōu)選實施例中,函數(shù)encodeSignedAAC被用于編碼差分?jǐn)?shù)據(jù)和它們的符號,函數(shù)encodeUnsignedAAC被用于僅僅編碼差分?jǐn)?shù)據(jù)。
圖11示出了函數(shù)encodeSignedAAC例子。參見圖11,當(dāng)輸入值是74和用于編碼該輸入值的比特數(shù)是8時,它的符號是0,與二進制數(shù)1001010相同。以下述方式對符號和它的所有比特平面編碼第一步驟按照從它的最高有效位(MSB)到最低有效位(LSB)的順序,對每個比特面上的二進制數(shù)進行編碼;第二步驟檢查當(dāng)前正在被編碼的比特是否是0;第三步驟如果當(dāng)前正在被編碼的比特不是0,則接著編碼該二進制數(shù)的符號;以及第四步驟編碼該二進制數(shù)的剩余比特。
函數(shù)encodeUnsignedAAC使用關(guān)于值的上下文將沒有符號的值編碼為適當(dāng)?shù)乃阈g(shù)編碼比特流。除了存在符號上下文之外,這個函數(shù)幾乎與函數(shù)encodeSignedAAC相同。
圖12A到12J示出了已經(jīng)經(jīng)過根據(jù)本發(fā)明的優(yōu)選實施例的操作的密鑰數(shù)據(jù)的圖表。在圖12A到12J中,水平軸表示每個密鑰數(shù)據(jù)的下標(biāo),垂直軸表示密鑰數(shù)據(jù)的值。
圖12A示出了輸入給本發(fā)明的編碼器的原始密鑰數(shù)據(jù)的圖表。圖12A所示的密鑰數(shù)據(jù)被輸出給量化器910,然后被利用9個量化比特進行量化,從而獲得圖12B所示的量化密鑰數(shù)據(jù)。如果對圖12B所示的量化密鑰數(shù)據(jù)執(zhí)行DPCM,則獲得圖12C所示的差分?jǐn)?shù)據(jù)。
接著,使用大約7的模式值移位量化密鑰數(shù)據(jù)的差分?jǐn)?shù)據(jù)從而獲得圖12D所示的差分?jǐn)?shù)據(jù)。此后,如果對移位后的差分?jǐn)?shù)據(jù)執(zhí)行折疊操作,可以獲得只有正值的數(shù)據(jù),如圖12E所示。
對圖12E所示經(jīng)過折疊的數(shù)據(jù)執(zhí)行DND操作的結(jié)果示于圖12F到12H中。具體來說,圖12F示出了對折疊數(shù)據(jù)執(zhí)行分頻操作的結(jié)果。如圖12F所示,正密鑰數(shù)據(jù)值的范圍是從0到28,負(fù)密鑰數(shù)據(jù)值的范圍是從-29到0,這意味著負(fù)密鑰數(shù)據(jù)值的范圍大于正密鑰數(shù)據(jù)值的范圍。因此,需要對圖12F所示的數(shù)據(jù)執(zhí)行上分頻操作,上分頻操作的結(jié)果示于圖12G中。
作為上分頻操作的結(jié)果,負(fù)密鑰數(shù)據(jù)值的范圍被明顯減少,從而使其比正密鑰數(shù)據(jù)值的范圍小得多。在DND操作的后續(xù)循環(huán)中,對上分頻操作的結(jié)果執(zhí)行下分頻操作。圖12H示出了對圖12G所示的差分?jǐn)?shù)據(jù)執(zhí)行下分頻操作的結(jié)果。在圖12I中示出了對圖12H所示的密鑰數(shù)據(jù)執(zhí)行上移位操作的結(jié)果。
如圖12A到12G所示,密鑰數(shù)據(jù)和差分?jǐn)?shù)據(jù)的范圍被逐漸減少。但是,如圖12H和121所示,在上移位操作之后,差分?jǐn)?shù)據(jù)的范圍比以前增加很多,這表示圖12H所示被執(zhí)行了下分頻操作的差分?jǐn)?shù)據(jù)是將被最后編碼的差分?jǐn)?shù)據(jù),如圖12J所示。
下面結(jié)合附圖,描述在標(biāo)題編碼器400中編碼并存儲在密鑰標(biāo)題中的信息。
當(dāng)輸入將被編碼的密鑰數(shù)據(jù)時,標(biāo)題編碼器400對密鑰數(shù)據(jù)的數(shù)位以及將被編碼的密鑰的數(shù)量進行編碼。接著,標(biāo)題編碼器400從線性密鑰編碼器900中接收有關(guān)在輸入密鑰中是否存在經(jīng)過線性密鑰編碼的線性密鑰數(shù)據(jù)區(qū)域的信息和該線性密鑰數(shù)據(jù)區(qū)域中的密鑰數(shù)據(jù)的數(shù)量,并從浮點數(shù)轉(zhuǎn)換器905中接收已經(jīng)經(jīng)過浮點數(shù)轉(zhuǎn)換的線性密鑰數(shù)據(jù)區(qū)域的開始和結(jié)束密鑰數(shù)據(jù)。
在浮點數(shù)轉(zhuǎn)換器905接收可以引起最小量化誤差的最大和最小值并將其轉(zhuǎn)換成浮點數(shù)的情況下,經(jīng)過轉(zhuǎn)換的最大和最小值被從浮點數(shù)轉(zhuǎn)換器905輸入給標(biāo)題編碼器400,從而它們可以被再次用于逆量化。另外,量化比特的尺寸也被輸入給標(biāo)題編碼器400并被包括在標(biāo)題中。
標(biāo)題編碼器400從DPCM處理器920接收在DPCM的每個循環(huán)中的DPCM的階數(shù)和內(nèi)部密鑰數(shù)據(jù),并從移位器930接收已經(jīng)被用于移位操作的模式值。另外,標(biāo)題編碼器400從DND處理器950接收關(guān)于是否已經(jīng)執(zhí)行了上移位操作的信息、能夠使差分?jǐn)?shù)據(jù)的離散度最小的DND的階數(shù)以及在每個DND操作循環(huán)中的最大和最小值。最后,標(biāo)題編碼器400從熵編碼器960中接收用于編碼的比特數(shù)并將其編碼為密鑰標(biāo)題。
下面結(jié)合圖13A到18B描述密鑰值數(shù)據(jù)編碼器300的操作和結(jié)構(gòu)。
圖13A的框圖示出了按照本發(fā)明的優(yōu)選實施例的密鑰值數(shù)據(jù)編碼器300的例子,圖14A示出了根據(jù)本發(fā)明的優(yōu)選實施例的,編碼密鑰值數(shù)據(jù)的方法的流程圖。
參看圖13A,所述密鑰值數(shù)據(jù)編碼器300包括規(guī)范器1300,用于根據(jù)所有分量數(shù)據(jù)范圍當(dāng)中的最大數(shù)據(jù)范圍,規(guī)范輸入給它的每個分量的密鑰值數(shù)據(jù);量化器1310,用于使用預(yù)定數(shù)量的量化比特,量化規(guī)范的密鑰值數(shù)據(jù);量化誤差最小化器1320,用于從規(guī)范器中接收最小值和最大范圍,調(diào)節(jié)最小和最大值以便使量化誤差最小,并輸出經(jīng)過調(diào)節(jié)的最大和最小值;浮點數(shù)轉(zhuǎn)換器1330,用于從量化誤差最小化器1320中接收最小值和最大范圍,將經(jīng)過調(diào)節(jié)的最大范圍和最小值轉(zhuǎn)換成十進制系統(tǒng)的浮點數(shù);DPCM處理器1340,用于獲得量化密鑰數(shù)據(jù)的差分?jǐn)?shù)據(jù)和預(yù)測差分?jǐn)?shù)據(jù),并對差分?jǐn)?shù)據(jù)和預(yù)測差分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化操作以減少它們的范圍;以及熵編碼器1350,用于熵編碼差分?jǐn)?shù)據(jù)并輸出其中密鑰值數(shù)據(jù)已經(jīng)被編碼的比特流。
下面結(jié)合圖14A描述密鑰值數(shù)據(jù)編碼器300的操作。
在步驟S14000中,規(guī)范器1300接收每個分量(x、y和z)的數(shù)據(jù)并在步驟S14120中按照等式(14)計算x、y和z分量的數(shù)據(jù)范圍。然后,規(guī)范器1300通過在步驟S14140中進行比較,計算在x、y和z分量數(shù)據(jù)范圍當(dāng)中的最大數(shù)據(jù)范圍。Maxj=Maxi=0n(P-ij)…(14)]]>Minj=Mini=0n(P-ij)]]>Rangemax=Max(Maxx-Minx,Maxy-Miny,Maxz-Minz)然后,規(guī)范器1300在步驟S14160使用下面的等式,規(guī)范x、y和z分量中每個分量的數(shù)據(jù)。 在等式(14)和(15)中,n表示數(shù)據(jù)的數(shù)量,i=0,1,...,n-1,和j表示分量x、y和z中的每一個。
如等式(15)所示,使用在x、y和z分量的數(shù)據(jù)范圍當(dāng)中的最大數(shù)據(jù)范圍Rangemax規(guī)范x、y和z分量。作為這種規(guī)范的結(jié)果,關(guān)于不具有最大數(shù)據(jù)范圍Rangemax的分量的數(shù)據(jù)的冗余增加了,因此,編碼效率也增加了。
規(guī)范器1300向浮點數(shù)編碼器1330輸出每一個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值x_min,y_min和z_min、所有分量的密鑰值數(shù)據(jù)當(dāng)中的最大值max、與一個分量相關(guān)并可以從中得到最大值max的信息nWhichAxis以及原始密鑰值數(shù)據(jù)的數(shù)位nKeyValueDigit,從而使這些信息被作為密鑰值標(biāo)題包括在比特流中。規(guī)范器1300將規(guī)范的密鑰值數(shù)據(jù)輸出給量化器1310。
x、y和z分量中每個分量的、經(jīng)過規(guī)范的密鑰值數(shù)據(jù)被輸入給量化器1310,然后,量化器1310在步驟S14200中使用預(yù)定數(shù)量的量化比特nQuantBit對經(jīng)過規(guī)范的密鑰值數(shù)據(jù)進行量化。P~ij=floor(P-i,j×2nQuantBit-1)+0.5)…(16)]]>在等式(16)中,函數(shù)floor()被用于將輸入的浮點數(shù)轉(zhuǎn)換成不大于該輸入浮點數(shù)的最大整數(shù)。量化器1310向DPCM處理器1340和量化誤差最小化器1320輸出量化的密鑰值數(shù)據(jù)。
圖13B的框圖示出了按照本發(fā)明的優(yōu)選實施例的量化誤差最小化器1320的例子。參看圖13B,量化誤差最小化器1320包括初始值設(shè)置單元1321,用于設(shè)置最小誤差值emin、經(jīng)過調(diào)節(jié)的最小值min’、量化誤差最小值minmin;經(jīng)過調(diào)節(jié)的最小值更新單元1323,用于通過執(zhí)行預(yù)定操作更新經(jīng)過調(diào)節(jié)的最小值min’;確定單元1325,用于在更新的經(jīng)過調(diào)節(jié)的最小值的數(shù)位和值的基礎(chǔ)上,將量化誤差最小值minmin確定為將被用于逆量化的最小值;和誤差值更新單元1327,用于使用更新的經(jīng)過調(diào)節(jié)的最小值計算量化誤差值,并且如果所計算的誤差值小于最小誤差值emin,將經(jīng)過調(diào)節(jié)的最小值min’和所計算的誤差值分別更新為量化誤差最小值minmin和最小誤差值emin,并將更新的結(jié)果輸出給經(jīng)過調(diào)節(jié)的最小值更新單元1323。
就量化誤差最小化器1320通過對輸入數(shù)據(jù)執(zhí)行量化和逆量化控制量化范圍從而使量化誤差最小這個事實而言,量化誤差最小化器1320與量化誤差最小化器915類似。
下面結(jié)合圖14C描述根據(jù)本發(fā)明的量化誤差最小化器1320的操作。
在步驟S14320中,初始值設(shè)置單元1321接收與輸入給量化器1310的數(shù)據(jù)相同的數(shù)據(jù)以及從量化器1310輸出的量化數(shù)據(jù)。
初始值設(shè)置單元1321從所輸入的數(shù)據(jù)中獲得最大值max和最小值min并計算最小值min的數(shù)位。接著,在步驟S14340中,初始值設(shè)置單元1321通過使用最大值max和最小值min對量化數(shù)據(jù)進行逆量化來計算量化誤差e,并將該量化誤差e設(shè)置為初始最小誤差值emin。
初始值設(shè)置單元1321從輸入數(shù)據(jù)的最小值min中減去將量化步長QuantSpace除以2的結(jié)果并將減法結(jié)果設(shè)置為初始經(jīng)過調(diào)節(jié)的最小值min’。然后,在步驟S14360中,初始值設(shè)置單元1321將初始經(jīng)過調(diào)節(jié)的最小值min’設(shè)置為量化誤差最小值minmin并將經(jīng)過調(diào)節(jié)的最小值min’輸出給經(jīng)過調(diào)節(jié)的最小值更新單元1323。
經(jīng)過調(diào)節(jié)的最小值更新單元1323通過執(zhí)行預(yù)定的操作,更新從初始值設(shè)置單元1321輸入的經(jīng)過調(diào)節(jié)的最小值min’。根據(jù)本發(fā)明的優(yōu)選實施例,經(jīng)過調(diào)節(jié)的最小值更新單元1323在步驟S14380中按照等式(17)更新從初始值設(shè)置單元1321輸入的經(jīng)過調(diào)節(jié)的最小值min’并向確定單元1325輸出更新的經(jīng)過調(diào)節(jié)的最小值min’。min′=Mantissa(min′+1)10Exponent(min′)…(17)]]>在步驟S14400中,確定單元1325計算更新的經(jīng)過調(diào)節(jié)的最小值min’的數(shù)位,將計算的結(jié)果與在初始值設(shè)置單元1321中計算的輸入數(shù)據(jù)當(dāng)中的最小值min的數(shù)位進行比較,并將更新的經(jīng)過調(diào)節(jié)的最小值min’與將輸入數(shù)據(jù)中的最小值min與將量化比特尺寸QuantSpace除以2的結(jié)果進行的結(jié)果進行比較。
如果經(jīng)過更新和調(diào)節(jié)的最小值min’的數(shù)位大于輸入數(shù)據(jù)當(dāng)中的最小值min的數(shù)位,或者如果經(jīng)過更新和調(diào)節(jié)的最小值min’大于min+QuantSpace2,]]>則確定單元1325將當(dāng)前存儲的量化誤差最小值minmin確定為將被用于逆量化的最小值,并將量化誤差最小值minmin輸出給輸出單元1329。如果經(jīng)過更新和調(diào)節(jié)的最小值min’的數(shù)位不大于輸入數(shù)據(jù)當(dāng)中最小值min的數(shù)位并且經(jīng)過更新和調(diào)節(jié)的最小值min’的數(shù)位不大于min+QuantSpace2,]]>則確定單元1325將更新的經(jīng)過調(diào)節(jié)的最小值min’輸出給誤差值更新單元1327。
在步驟S14440中,誤差值更新單元1327使用更新的經(jīng)過調(diào)節(jié)的最小值min’和由初始值設(shè)置單元1321獲得的最大值max對量化數(shù)據(jù)進行逆量化并計算量化誤差e。
誤差值更新單元1327在步驟S14460中將新計算的誤差值e與最小誤差值emin進行比較。作為比較的結(jié)果,如果新計算的誤差值e小于最小誤差值emin,則誤差值更新單元1327在步驟S14480中利用新計算的誤差值e更新最小誤差值emin并利用更新的經(jīng)過調(diào)節(jié)的最小值min’更新量化誤差最小值minmin。另一方面,如果新計算的誤差值e大于最小誤差值emin,則誤差值更新單元1327再次執(zhí)行步驟S14380而不更新最小誤差值emin和量化誤差最小值minmin。
通過上述處理獲得的、用于使量化誤差最小的最大和最小值被輸出給浮點數(shù)編碼器1330并被編碼為標(biāo)題信息。然后,該標(biāo)題信息被包括在由熵編碼器1350產(chǎn)生的比特流中。
下面結(jié)合圖14D描述在浮點數(shù)轉(zhuǎn)換器1330中執(zhí)行的步驟S14500。浮點數(shù)轉(zhuǎn)換器1330的功能與圖9A所示的浮點數(shù)轉(zhuǎn)換器905類似。
在步驟S14510中,浮點數(shù)編碼器1330接收x、y和z分量中每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值x_min,y_min和z_min、具有最大范圍的分量的最大值max、與最大值max所屬分量相關(guān)的信息nWhichAxis以及原始密鑰值數(shù)據(jù)的數(shù)位nKeyValueDigit。
為了通過減少編碼所需的比特數(shù)來提高編碼密鑰值數(shù)據(jù)的效率,浮點數(shù)編碼器1330在步驟S14520中按照等式(4)將由二進制數(shù)表示的x_min,y_min,z_min和max轉(zhuǎn)換成十進制數(shù)。
浮點數(shù)編碼器1330在步驟S14530中檢查x_min,y_min,z_min的數(shù)位是否相同。如果它們不相同,則在步驟S14540中將它們輸出給標(biāo)題編碼器400并編碼為標(biāo)題信息。
如果x_min,y_min,z_min的數(shù)位相同,浮點數(shù)編碼器1330在步驟S14550中檢查它們是否與原始密鑰值數(shù)據(jù)的數(shù)位相同。如果x_min,y_min,z_min的數(shù)位與原始密鑰值數(shù)據(jù)的數(shù)位不同,那么,在步驟S14560中,在x_min,y_min,z_min的數(shù)位中只有一個被輸出給標(biāo)題編碼器400并被編碼為標(biāo)題信息。
此后,在步驟S14570中,浮點數(shù)編碼器1330檢查從哪一個分量的密鑰值數(shù)據(jù)當(dāng)中選擇在x、y和z分量的所有密鑰值數(shù)據(jù)當(dāng)中的最大值max,并確定max的數(shù)位是否與從中獲得最大值max的分量的密鑰值數(shù)據(jù)中的最小值的數(shù)位相同。
如果max的數(shù)位與可以獲得最大值max的分量的密鑰值數(shù)據(jù)當(dāng)中的最小值的數(shù)位不相同,則它被輸出給標(biāo)題編碼器400并被編碼為標(biāo)題信息。另一方面,如果max的數(shù)位與最大值max所屬的分量的密鑰值數(shù)據(jù)當(dāng)中的最小值的數(shù)位相同,則在步驟S14580中,描述它們相同的狀態(tài)信息被輸出給標(biāo)題編碼器400。
浮點數(shù)編碼器1330的前述操作用于編碼轉(zhuǎn)換后的浮點數(shù)的尾數(shù),下面將描述將浮點數(shù)的指數(shù)信息編碼為密鑰值標(biāo)題的處理。
浮點數(shù)編碼器1330在步驟S14590中識別x_min,y_min,z_min和max的指數(shù)的絕對值當(dāng)中哪一個是最大值,將所識別的最大值存儲為nMaxExp,并將nMaxExp編碼為多個比特的密鑰值標(biāo)題。
此后,浮點數(shù)編碼器1330在步驟S14600中檢查x_min,y_min,z_min和max的指數(shù)的符號是否相同。如果相同,則bSameSignExp被設(shè)置為1并且在步驟S14610將它們的符號輸出給標(biāo)題編碼器400。另一方面,如果它們不同,則在步驟S14620中,bSameSignExp被設(shè)置為0,然后,與x_min,y_min,z_min和max的指數(shù)相關(guān)的信息的編碼結(jié)束。
參看圖14E,浮點數(shù)編碼器1330在將x_min,y_min,z_min和max編碼成標(biāo)題信息之前,在步驟S14630中編碼經(jīng)轉(zhuǎn)換的浮點數(shù)的符號。
接著,在步驟S14640中,浮點數(shù)編碼器1330參照表3計算編碼浮點數(shù)所需的比特數(shù),并將具有與計算結(jié)果相同的比特的浮點數(shù)的尾數(shù)輸出給標(biāo)題編碼器400。
在步驟S14650中,浮點數(shù)編碼器1330參照表3計算編碼nMaxExp所需的比特數(shù)并將與計算結(jié)果具有相同比特的浮點數(shù)的指數(shù)輸出給標(biāo)題編碼器400。
在步驟S14660中,浮點數(shù)編碼器1330在bSameSignExp的基礎(chǔ)上檢查x_min,y_min,z_min和max的指數(shù)是否具有相同的符號。如果它們不具有相同的符號,則在步驟S14670中,將它們的符號輸出給標(biāo)題編碼器400并編碼,由此完成對從規(guī)范器1300輸入的x、y和z分量中每個分量的密鑰數(shù)據(jù)當(dāng)中最大值和最小值的編碼處理。
浮點數(shù)編碼器1330按照前述步驟,將從量化誤差最小化器1320輸入的并能夠使每個分量的量化誤差最小的最大和最小值編碼為標(biāo)題信息。
圖13C的框圖示出了按照本發(fā)明的優(yōu)選實施例的DPCM處理器1340的例子,圖14F示出了按照本發(fā)明的優(yōu)選實施例的DPCM操作方法的流程圖。
參看圖13C,DPCM處理器1340包括循環(huán)DPCM操作器1341,它包括用于執(zhí)行一般DPCM操作并輸出差分?jǐn)?shù)據(jù)的DPCM操作器1342和用于對輸入給它的差分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化操作從而減少它們的范圍的循環(huán)量化操作器1343;預(yù)測循環(huán)DPCM操作器1345,它包括用于對輸入給它的量化數(shù)據(jù)執(zhí)行預(yù)測DPCM操作并輸出預(yù)測的差分?jǐn)?shù)據(jù)的預(yù)測DPCM操作器1346以及用于對輸入給它的差分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化操作從而減少它們的范圍的循環(huán)量化器1347;以及選擇器1349,用于在輸入給它的差分?jǐn)?shù)據(jù)的值的基礎(chǔ)上從由循環(huán)DPCM操作器1341輸入的差分?jǐn)?shù)據(jù)和由預(yù)測循環(huán)DPCM操作器1345輸入的差分?jǐn)?shù)據(jù)之間選擇一個。
下面參照圖14F描述按照本發(fā)明的優(yōu)選實施例的DPCM操作。
在步驟S14720,量化的密鑰值數(shù)據(jù)被輸入給循環(huán)DPCM操作器1341和預(yù)測循環(huán)DPCM操作器1345。
在DPCM操作器1341中,通過對輸入給它的量化數(shù)據(jù)執(zhí)行一般DPCM操作產(chǎn)生差分?jǐn)?shù)據(jù),并將所產(chǎn)生的差分?jǐn)?shù)據(jù)輸出給循環(huán)量化器1343。然后,循環(huán)量化器1343步驟S14740a中對從DPCM操作器1342輸入的差分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化。
具體地說,DPCM操作器1342通過從當(dāng)前的量化數(shù)據(jù)中減去以前的量化數(shù)據(jù)來計算差分?jǐn)?shù)據(jù)。然后,循環(huán)量化器1343對所計算的差分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化。循環(huán)DPCM操作器1341的操作由下述等式表示。P^i=CircularQuantization(P~i-P~i-1)…(i=1,2,…,n)…(18)]]>在等式(18)中,n表示數(shù)據(jù)的數(shù)量。下面將描述循環(huán)量化。
在步驟S14740b中,在預(yù)測循環(huán)DPCM操作器1345中的預(yù)測DPCM操作器1346通過對輸入給它的差分?jǐn)?shù)據(jù)執(zhí)行預(yù)測DPCM操作計算預(yù)測差分?jǐn)?shù)據(jù),然后循環(huán)量化器1347對預(yù)測的差分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化。
具體地說,預(yù)測DPCM操作器1346通過從當(dāng)前量化數(shù)據(jù)中減去預(yù)測數(shù)據(jù)產(chǎn)生預(yù)測差分?jǐn)?shù)據(jù)并將其輸出。為了獲得與當(dāng)前量化數(shù)據(jù)有關(guān)的預(yù)測數(shù)據(jù),通過從在前的量化數(shù)據(jù)中減去在所述在前量化數(shù)據(jù)之前的量化數(shù)據(jù)獲得差分值,然后把它加到在前的差分?jǐn)?shù)據(jù)上,從而計算與當(dāng)前數(shù)據(jù)相關(guān)的預(yù)測數(shù)據(jù)。
由預(yù)測DPCM操作器1346計算的預(yù)測數(shù)據(jù)不能超過輸入給它的量化數(shù)據(jù)的最大范圍。換言之,如果預(yù)測數(shù)據(jù)超過了在輸入量化數(shù)據(jù)的量化范圍中的最大值,則預(yù)測DPCM操作器1346將預(yù)測數(shù)據(jù)設(shè)置為輸入量化數(shù)據(jù)的量化范圍中的最大值,并通過從預(yù)測數(shù)據(jù)中減去當(dāng)前數(shù)據(jù)產(chǎn)生與當(dāng)前數(shù)據(jù)相關(guān)的差分?jǐn)?shù)據(jù)。如果預(yù)測數(shù)據(jù)小于輸入數(shù)據(jù)的量化范圍中的最小值,則預(yù)測DPCM操作器1346將當(dāng)前的數(shù)據(jù)確定為預(yù)測差分?jǐn)?shù)據(jù)。此后,預(yù)測DPCM操作器1346的這個操作被稱之為“修改的預(yù)測DPCM操作”。
由預(yù)測DPCM操作器1346計算的預(yù)測差分?jǐn)?shù)據(jù)被輸入給循環(huán)量化器1347并被執(zhí)行循環(huán)量化操作。
預(yù)測循環(huán)DPCM操作器1346的操作可以由下述等式表示。P~^i=(2nQuaneBit-1)-P~i]]>(如果2×P~i-1-P~i-2>2nQuantBit-1]]>) ...(19)P~^i=P~i]]>(如果2×P~i-1-P~i-2<0]]>)P~^i=P~i-(2×P~i-1-P~i-2)]]>(否則)P^i=CircularQuantization(P~^i)]]>在等式(19)中,i是2和n-1之間的整數(shù),n表示數(shù)據(jù)的數(shù)量。
圖15A示出了對具有最大值為1024和最小值為0的50個量化數(shù)據(jù)執(zhí)行簡單預(yù)測DPCM操作的結(jié)果,圖15B示出了對與圖15A所示情況相同的數(shù)據(jù)執(zhí)行經(jīng)過修改的預(yù)測DPCM操作的結(jié)果,由此在與數(shù)據(jù)相關(guān)的預(yù)測數(shù)據(jù)值超過數(shù)據(jù)當(dāng)中的最大值或低于最小值的情況下,按照等式(19)調(diào)節(jié)與數(shù)據(jù)相關(guān)的差分?jǐn)?shù)據(jù)。
作為簡單預(yù)測DPCM操作的結(jié)果,如圖15A和15B所示,預(yù)測差分?jǐn)?shù)據(jù)具有大約3,000的寬范圍。作為經(jīng)過修改的預(yù)測DPCM操作的結(jié)果,如圖16B所示,預(yù)測差分?jǐn)?shù)據(jù)具有不大于2,000的窄范圍。這意味著在經(jīng)過修改的預(yù)測DPCM操作中比簡單預(yù)測DPCM操作中更容易獲得具有較窄范圍的預(yù)測差分?jǐn)?shù)據(jù)。
下面將描述循環(huán)量化。
圖16A示出了量化數(shù)據(jù),和圖16B示出了對圖16A所示數(shù)據(jù)執(zhí)行DPCM操作的結(jié)果。如圖16B所示,在DPCM操作之后,差分?jǐn)?shù)據(jù)的范圍可以增加到在DPCM操作之前使用的范圍的兩倍寬。因此可以說,使用循環(huán)量化操作,從而使得能夠在將已經(jīng)被執(zhí)行了DPCM操作的差分?jǐn)?shù)據(jù)范圍保持在輸入數(shù)據(jù)范圍之內(nèi)的同時,執(zhí)行DPCM操作。
在假設(shè)量化范圍中的最大值和最小值被彼此循環(huán)連接的基礎(chǔ)上,執(zhí)行循環(huán)量化操作。因此,如果作為對兩個連續(xù)的量化數(shù)據(jù)執(zhí)行線性DPCM的結(jié)果的差分?jǐn)?shù)據(jù)大于量化范圍中的最大值的一半,則可以通過從差分?jǐn)?shù)據(jù)的每一個當(dāng)中減去最大值來減小它們的值。
如果差分?jǐn)?shù)據(jù)小于量化范圍中的最小值的一半,則可以通過將量化范圍中的最大值加到差分?jǐn)?shù)據(jù)的每一個上,進一步減小它們的值。
假設(shè)X和 分別表示輸入差分?jǐn)?shù)據(jù)和循環(huán)量化的差分?jǐn)?shù)據(jù),循環(huán)量化可以由下述等式表示。CircularQuantization(Xi)=X^i=Min(|Xi|,|X′i|)…(20)]]>X′i=Xi-(2nQBits-1)(如果X≥0)X′i=Xi+(2nQBits-1)(否則)在等式(20)中,nQBits表示用于量化的比特尺寸。圖16C示出了對圖16B所示的差分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化的結(jié)果。
再次參看圖14F,循環(huán)量化的差分?jǐn)?shù)據(jù)和循環(huán)量化的預(yù)測差分?jǐn)?shù)據(jù)被輸出給選擇器1349,然后,選擇器1349在步驟S14760中對輸入的差分?jǐn)?shù)據(jù)執(zhí)行差分絕對值求和(SAD)操作。這里,執(zhí)行SAD操作以便使輸入數(shù)據(jù)的絕對值都被相加。在步驟S14760中,選擇器1349將循環(huán)量化差分?jǐn)?shù)據(jù)的所有絕對值相加并將循環(huán)量化預(yù)測差分?jǐn)?shù)據(jù)的所有絕對值相加。
然后,選擇器1349在步驟S14780中將量化差分?jǐn)?shù)據(jù)的絕對值的和與預(yù)測差分?jǐn)?shù)據(jù)的絕對值的和進行比較,在量化差分?jǐn)?shù)據(jù)和預(yù)測差分?jǐn)?shù)據(jù)之間,選擇具有較小絕對值和的差分?jǐn)?shù)據(jù)并輸出所選擇的差分?jǐn)?shù)據(jù)。選擇器1349選擇具有較小絕對值和的差分?jǐn)?shù)據(jù)的原因在于按照推理它們具有較窄范圍的值。例如,在熵編碼預(yù)測差分?jǐn)?shù)據(jù)中,可以期望編碼絕對值和較小的差分?jǐn)?shù)據(jù)所需的比特數(shù)少于編碼絕對值和較大的差分?jǐn)?shù)據(jù)所需的比特數(shù)。
對于本領(lǐng)域技術(shù)人員來講很明顯,SAD操作僅僅是選擇某一組差分?jǐn)?shù)據(jù)的方法中的一種,因此,選擇器1349可以采用不同方法來選擇差分?jǐn)?shù)據(jù)。
再次參看圖14A,在步驟S14800中,從DPCM處理器1340輸出的差分?jǐn)?shù)據(jù)在熵編碼器1350中被進行熵編碼。
參看圖14G,熵編碼器1350熵編碼x、y和z分量中每個分量的密鑰值數(shù)據(jù)的差分?jǐn)?shù)據(jù)。
熵編碼器1350參考x、y和z分量中每個分量的差分?jǐn)?shù)據(jù),檢查x、y和z分量的量化值是否相同,即,x、y和z分量的差分?jǐn)?shù)據(jù)是否是0,如果它們是相同,則在步驟S14810中完成熵編碼。例如,在三維動畫的情況下,一列火車在與x分量方向相同的水平方向運動,x分量的密鑰值數(shù)據(jù)是變化的。但是,在y和z分量中存在少量變化。所以,如果所述y和z分量被量化,估計它們將會具有相同的值。因此,不需要對實際相同的所有密鑰值數(shù)據(jù)進行編碼,由此,通過只將密鑰值數(shù)據(jù)中的一個編碼成標(biāo)題信息可以提高編碼效率。
如果x、y和z分量中每個分量的量化密鑰值數(shù)據(jù)不同,則熵編碼器1350在步驟S14820中讀出已經(jīng)被預(yù)先設(shè)置的預(yù)定值。此后,熵編碼器1350使用unaryAAC函數(shù)在步驟S14830中對x、y和z分量中每個分量的量化密鑰值數(shù)據(jù)的差分?jǐn)?shù)據(jù)進行編碼,或在步驟S14850中使用連續(xù)量化AAC函數(shù)對它們進行編碼。
下面結(jié)合圖17描述unaryAAC函數(shù)。unaryAAC函數(shù)把將被編碼的符號轉(zhuǎn)換為由多個0、一個用于指示所述多個0結(jié)束的標(biāo)記位1和表示所述符號的符號的一個比特組成的預(yù)定數(shù)量的比特。這里,所述多個0對應(yīng)于所述符號的幅值。例如,使用unaryAAC函數(shù)將256編碼為由256個0、用于指示所述0結(jié)束的一個標(biāo)記位1和表示256的符號即加號的0組成的一系列比特。由于unaryAAC函數(shù)使表示將被編碼的符號的比特的冗余度增加,由此提高了編碼符號的效率。
參考圖14H、18A和18B,將描述使用SQAAC函數(shù)編碼符號的方法。SQAAC函數(shù)編碼連續(xù)更新量化范圍的符號。
圖18A示出了使用SQAAC函數(shù)編碼符號的方法。如圖18A所示,將被編碼的輸入符號是1,和編碼范圍中的最小值和最大值分別是0和9。
參看圖18A,在編碼所述符號的第一步驟中,編碼范圍被分成兩個子域,即上界和下界,然后檢查將被編碼的符號,即1,是屬于上界還是屬于下界。由于1屬于下界,所以0被編碼并且下界被更新為一個新的編碼范圍。因此,用于第二步驟的新編碼范圍是從0到4。
在第二步驟中,從0到4的新編碼范圍被分成兩個子域,即上界和下界,然后檢查1是屬于上界還是屬于下界。由于1屬于下界,所以,0被編碼,編碼范圍中的最大值被更新為是下界中最大值的1。因此,用于第三步驟的、通常為下界的新編碼范圍是從0到1。
在第三步驟中,0-1的編碼范圍被分成上限值和下限值,然后檢查1是與上限值還是與下限值相同。由于1等于上限值,所以,1被編碼,然后相應(yīng)編碼范圍中的最小值被更新為1。因此,新的編碼范圍是[1,1],由此,它的最大值和最小值彼此相同。當(dāng)在一個編碼范圍中的最大和最小值相同時,使用SQAAC函數(shù)的編碼處理完成。
圖14H示出了在按照本發(fā)明的熵編碼器1350中執(zhí)行的,使用SQAAC函數(shù)編碼一個分量的密鑰值數(shù)據(jù)的差分?jǐn)?shù)據(jù)的處理的流程圖。
參看圖14H,熵編碼器1350在步驟S14920中接收密鑰值數(shù)據(jù)的差分?jǐn)?shù)據(jù)(此后稱之為符號)、熵編碼符號所需的比特數(shù)nQP、表示首先將被編碼成比特流的符號的下標(biāo)的nStartIndex和將被編碼的符號的數(shù)量(n)。
熵編碼器1350在步驟S14940中編碼符號的正負(fù)號并將符號轉(zhuǎn)換為正數(shù)。符號被轉(zhuǎn)換為正數(shù)的原因在于在后續(xù)處理中不允許負(fù)數(shù)。
熵編碼器1350在步驟S14960中識別正數(shù)當(dāng)中的最大值,將最大值存儲為nMax,并將nMax編碼成與nQP一樣多的比特。
熵編碼器1350在步驟S14980中初始化一個符號將在其中被編碼的范圍,并將該編碼范圍中的最小值 和最大值 分別設(shè)置為0和nMax。另外,熵編碼器1350將一個比特的標(biāo)記 分派給每個符號。標(biāo)記 被用于在編碼符號的過程中改變概率模型。在開始時,標(biāo)記 被設(shè)置為‘假’并且當(dāng)下一個將被編碼的值為1時被轉(zhuǎn)換為‘真’,此后,截止到目前為止用于編碼符號的概率模型被其他的模型取代。
接著,熵編碼器1350在步驟S15000中識別假設(shè)被首先編碼的x、y和z分量中每個分量的差分基準(zhǔn)點(i=nStartIndex)并將表示對所有符號的編碼是否已經(jīng)完成的標(biāo)記bDone設(shè)置為‘真’。
熵編碼器1350重復(fù)執(zhí)行將在下面描述的步驟S15020到S15180,直到用于每個符號編碼的編碼范圍中的最大值和最小值變得相同為止,即,直到?jīng)]有符號還需要被編碼為止。這里,當(dāng)在與一個符號相關(guān)的編碼范圍中的最大和最小值相同時,可以認(rèn)為對符號的編碼已經(jīng)完成。
熵編碼器1350在步驟S15020中檢查 是否等于 。如果 等于 ,則方法移動到編碼下一個符號的步驟,如果不等,在步驟S15040中,bDone被設(shè)置為‘假’,這意味著當(dāng)前符號(當(dāng)前正在被編碼的符號)的編碼還沒有完成。
熵編碼器1350在步驟S15060中計算在用于當(dāng)前符號的編碼范圍中的中間值nMid并在步驟S15080中將這個中間值nMid與當(dāng)前符號的值進行比較。在本發(fā)明的優(yōu)選實施例中,使用下述等式計算中間值nMid。nMid=P^i·max+P^i·min2+P^i·min+1]]>在步驟S15100中,作為比較的結(jié)果,如果當(dāng)前符號值不大于所述中間值nMid,這意味著當(dāng)前符號屬于下界,則向比特流發(fā)出一個0,并且用于當(dāng)前符號的編碼范圍中的最大范圍 被中間值nMid代替。
另一方面,如果當(dāng)前符號值大于中間值nMid,則發(fā)出一個1給比特流并且在用于當(dāng)前符號的編碼范圍中的最小值 被中間值nMid所取代。當(dāng)當(dāng)前正在被編碼的符號的值第一次超過中間值nMid時,換言之,當(dāng)1第一次被發(fā)給比特流時, 在步驟S15120中被設(shè)置為‘真’,從而改變了用于編碼符號的概率模型。
有兩種在SQAAC函數(shù)中使用的概率模型。一種是notFoundContext,用于熵編碼在從每個符號第一次發(fā)出1之前輸出的比特,另一種是FoundContext,用于熵編碼在從每個符號第一次發(fā)出1之后輸出的比特。使用兩種不同的概率模型的目的是增加在使用notFoundContext期間產(chǎn)生0的概率。由于產(chǎn)生0的概率增加,所述熵編碼符號的效率增加了。
然后,熵編碼器1350在步驟S15140中檢查 是真還是假。如果 是真,則熵編碼器1350在步驟S15160中使用FoundContext編碼符號,如果是假,熵編碼器1350在步驟S15180中使用notFoundContext編碼符號。
當(dāng)從步驟S15020到步驟S15180的用于編碼當(dāng)前符號范圍的處理被完成時,這意味著熵編碼器僅僅在一個階段中完成了當(dāng)前符號的編碼,在步驟S15200中,熵編碼器1350將編碼下標(biāo)增加1。接著,熵編碼器1350在步驟S15220中檢查當(dāng)前階段中的所有符號是否都已經(jīng)被編碼。如果在當(dāng)前階段中仍舊還有需要被編碼的符號,則熵編碼器1350再次執(zhí)行步驟S15020到步驟S15220。
當(dāng)在一階段中的所有符號都被完全編碼時,在步驟S15240中,熵編碼器1350根據(jù)標(biāo)記bDone檢查是否所有階段的編碼都已經(jīng)完成。如果bDone是真,則熵編碼器1350完成了對當(dāng)前分量的整個編碼處理并開始對后續(xù)的分量編碼,如果不是真,則熵編碼器1350再次執(zhí)行步驟S15000到S15220,以便編碼剩余的符號。
圖18B示出了使用SQAAC函數(shù)編碼多個符號的處理。特別是,圖18B示出了使用SQAAC函數(shù)編碼0、1、2、3、4和9的處理。
再次參看圖14B,如果按照本發(fā)明的、用于編碼數(shù)據(jù)的裝置通過熵編碼所有輸入的密鑰值數(shù)據(jù)產(chǎn)生一個比特流,那么,標(biāo)題編碼器400在步驟S15300中將譯碼編碼的密鑰值數(shù)據(jù)所需的信息編碼為標(biāo)題信息,并將密鑰值標(biāo)題信息加到比特流中,并輸出所生成的比特流。
標(biāo)題編碼器400編碼將被編碼的輸入密鑰值數(shù)據(jù)的數(shù)量與數(shù)位以及所述密鑰值數(shù)據(jù)的量化比特尺寸。接著,標(biāo)題編碼器400識別x、y和z分量中的每一個是否具有相同的量化值(例如,即使x、y和z分量中的每個分量的密鑰值數(shù)據(jù)是變化的,由于所述x分量的密鑰值數(shù)據(jù)的變化程度非常小,所以,x分量的量化密鑰值也具有相同的值)并將結(jié)果編碼為一個標(biāo)記。
例如,如果x分量的量化值不相同,那么,不管是循環(huán)DPCM操作還是預(yù)測循環(huán)DPCM操作都已經(jīng)被用于編碼x分量的密鑰值數(shù)據(jù),并且不管是將使用unaryAAC函數(shù)還是使用SQAAC函數(shù)編碼的x分量的密鑰值數(shù)據(jù)都將被編碼成標(biāo)記。如果不期望使用unaryAAC函數(shù)編碼x分量的密鑰值數(shù)據(jù),那么,x分量的編碼比特尺寸和將被熵編碼的x分量的開始下標(biāo)被編碼成密鑰值標(biāo)題。
類似的,如果y和z分量中每個分量的密鑰值數(shù)據(jù)不同,那么,與前述x分量的標(biāo)題信息正好對應(yīng)的y和z分量的標(biāo)題信息被編碼成一個標(biāo)題。
如果x分量的量化值不同,則unaryAAC函數(shù)不被用于對x分量的密鑰值數(shù)據(jù)編碼,并且將被編碼的x分量的開始下標(biāo)是1,然后,第一量化密鑰值的基準(zhǔn)點被編碼為內(nèi)部基準(zhǔn)點。按照相同的方式,y和z分量中每個分量的第一量化密鑰值基準(zhǔn)點被編碼為一個內(nèi)部基準(zhǔn)點。
標(biāo)題編碼器400識別x、y和z分量中的哪一個分量具有最大數(shù)據(jù)范圍。如果x分量具有最大數(shù)據(jù)范圍,則標(biāo)題編碼器400將變量nWhichAxis設(shè)置為0。如果y分量具有最大數(shù)據(jù)范圍,則標(biāo)題編碼器400將nWhichAxis設(shè)置為1。如果分量z具有最大數(shù)據(jù)范圍,則標(biāo)題編碼器400將nWhichAxis設(shè)置為2。然后,標(biāo)題編碼器400使用浮點數(shù)編碼器1330將nWhichAxis、x_min、y_min、z_min和max編碼成密鑰標(biāo)題。
再次參見圖3A和3B,按照本發(fā)明的、用于編碼位置內(nèi)插器的裝置編碼密鑰數(shù)據(jù)和密鑰值數(shù)據(jù),并使用標(biāo)題編碼器400編碼標(biāo)題信息(在步驟S380),并輸出其中所述位置內(nèi)插器已經(jīng)與編碼的密鑰數(shù)據(jù)、編碼的密鑰值數(shù)據(jù)和編碼的標(biāo)題信息一起被編碼的一個比特流。
下面結(jié)合圖19A到24詳細描述按照本發(fā)明的優(yōu)選實施例的,用于譯碼其中位置內(nèi)插器已經(jīng)被編碼的比特流的方法和裝置。
圖19A的框圖示出了按照本發(fā)明的優(yōu)選實施例的,用于譯碼編碼的位置內(nèi)插器的裝置,圖19B示出了按照本發(fā)明的優(yōu)選實施例的,用于譯碼編碼的位置內(nèi)插器的方法的流程圖。
參看圖19A,用于譯碼編碼的位置內(nèi)插器的裝置包括密鑰數(shù)據(jù)譯碼器1920,用于譯碼來自輸入比特流的密鑰數(shù)據(jù);密鑰值數(shù)據(jù)譯碼器1950,用于譯碼來自輸入比特流的密鑰值數(shù)據(jù);標(biāo)題譯碼器1910,用于譯碼來自輸入比特流的標(biāo)題信息并將譯碼的標(biāo)題信息輸出給密鑰數(shù)據(jù)譯碼器1920和密鑰值數(shù)據(jù)譯碼器1950;以及位置內(nèi)插器合成器1980,用于利用從標(biāo)題譯碼器1910輸入的譯碼的標(biāo)題信息,合成譯碼的密鑰數(shù)據(jù)和譯碼的密鑰值數(shù)據(jù)并輸出譯碼的位置內(nèi)插器。
參看圖19B,在步驟S19000中,被用于編碼圖3A所示的位置內(nèi)插器的裝置編碼的比特流被輸入給密鑰數(shù)據(jù)譯碼器1920、密鑰值數(shù)據(jù)譯碼器1950和標(biāo)題譯碼器1910。
在步驟S19100中,標(biāo)題譯碼器1910譯碼來自輸入比特流的標(biāo)題信息并將譯碼的標(biāo)題信息輸出給密鑰數(shù)據(jù)譯碼器1920、密鑰值數(shù)據(jù)譯碼器1950和位置內(nèi)插器合成器1980。
密鑰數(shù)據(jù)譯碼器1920熵譯碼來自輸入比特流的密鑰數(shù)據(jù),通過對密鑰數(shù)據(jù)執(zhí)行預(yù)定的逆DND操作、逆折疊操作和逆移位操作產(chǎn)生譯碼的密鑰數(shù)據(jù)并將譯碼的密鑰數(shù)據(jù)輸出給位置內(nèi)插器合成器1980。另外,在步驟S19200中,密鑰值譯碼器1950熵譯碼來自輸入比特流的密鑰值數(shù)據(jù),通過對密鑰值數(shù)據(jù)執(zhí)行預(yù)定的逆量化操作和逆DPCM操作產(chǎn)生譯碼的密鑰值數(shù)據(jù),并將譯碼的密鑰值數(shù)據(jù)輸出給位置內(nèi)插器合成器1980。
在步驟S19400中,位置內(nèi)插器合成器1980通過使用包括模式設(shè)置信號和密鑰選擇標(biāo)記在內(nèi)的譯碼的標(biāo)題信息合成從密鑰數(shù)據(jù)譯碼器1920輸入的譯碼的密鑰值數(shù)據(jù)和從密鑰值數(shù)據(jù)譯碼器1950輸入的譯碼的密鑰值數(shù)據(jù),恢復(fù)位置內(nèi)插器。
下面結(jié)合圖20到21B詳細描述密鑰數(shù)據(jù)譯碼器1920的結(jié)構(gòu)和操作。按照本發(fā)明的密鑰數(shù)據(jù)譯碼器1920接收編碼的比特流并將其組成譯碼的密鑰數(shù)據(jù)。
密鑰數(shù)據(jù)譯碼器1920包括熵譯碼器2060、逆DND處理器2050、逆折疊處理器2040、逆移位器2030、逆DPCM處理器2020、逆量化器2010、線性密鑰譯碼器200和浮點數(shù)逆轉(zhuǎn)換器2005。
圖21A示出了按照本發(fā)明的優(yōu)選實施例的用于譯碼密鑰數(shù)據(jù)的方法的流程圖。
將比特流輸入給標(biāo)題譯碼器1910和熵譯碼器2060。
標(biāo)題譯碼器1910在步驟S21000中譯碼用于譯碼的每個步驟所需的信息并將它們提供給它們相應(yīng)的譯碼步驟。下面將隨著每個譯碼步驟,描述由標(biāo)題譯碼器1910譯碼的信息。
在步驟S21100中,熵譯碼器2060從標(biāo)題譯碼器1910接收將被譯碼的差分?jǐn)?shù)據(jù)的數(shù)量以及已經(jīng)被用于編碼的比特數(shù),即將被用于譯碼的比特數(shù),并譯碼輸入的比特流。差分?jǐn)?shù)據(jù)的數(shù)量等于從密鑰數(shù)據(jù)的數(shù)量中減去通過執(zhí)行DPCM所獲得的內(nèi)部密鑰數(shù)據(jù)的數(shù)量的結(jié)果。
熵譯碼器2060根據(jù)包括在比特流中的預(yù)定信息,例如本發(fā)明中的bSignedAACFlag,識別將被譯碼的差分?jǐn)?shù)據(jù)是具有負(fù)值還是具有正值。如果編碼的差分?jǐn)?shù)據(jù)具有負(fù)值,則熵譯碼器2060使用函數(shù)decodeSignedAAC()對它們進行譯碼。另一方面,如果編碼的差分?jǐn)?shù)據(jù)僅具有正值,則熵譯碼器2060使用函數(shù)decodeUnsignedAAC()對它們進行譯碼。此后,譯碼的差分?jǐn)?shù)據(jù)被發(fā)送給逆DND處理器2050。
逆DND處理器2050從標(biāo)題譯碼器1910中接收DND的階數(shù)和在每個DND循環(huán)中的最大值nKeyMax。
如果DND的階數(shù)是-1,這意味著正在被譯碼的編碼差分?jǐn)?shù)據(jù)已經(jīng)經(jīng)過DPCM操作和移位操作而不是經(jīng)過DND被進行熵譯碼,并且該方法直接進入到執(zhí)行逆移位操作的步驟。如果DND的階數(shù)是0,這意味著正在被譯碼的編碼差分?jǐn)?shù)據(jù)已經(jīng)經(jīng)過折疊操作而不是DND被進行熵譯碼,由此該方法直接進入到執(zhí)行逆折疊操作的步驟。如果所述DND的數(shù)階大于0,則在步驟S21200中執(zhí)行逆DND操作。
逆DND處理器2050在步驟S21300中確定正在被譯碼的編碼差分?jǐn)?shù)據(jù)是否已經(jīng)經(jīng)過上移位操作被編碼。在本發(fā)明的優(yōu)選實施例中,通過檢查包括在比特流中的nKeyInvertDown是否大于0來確定正在被譯碼的編碼差分?jǐn)?shù)據(jù)是否已經(jīng)經(jīng)過上移位操作被編碼。
如果正在被譯碼的編碼差分?jǐn)?shù)據(jù)還沒有經(jīng)過上移位操作,則該方法進入到執(zhí)行逆DND的步驟。另一方面,如果正在被譯碼的編碼差分?jǐn)?shù)據(jù)已經(jīng)經(jīng)過上移位操作,則在步驟S21400中通過執(zhí)行上移位操作已經(jīng)從正數(shù)區(qū)域變換到負(fù)數(shù)區(qū)域的差分?jǐn)?shù)據(jù)被移回到負(fù)數(shù)區(qū)域。在本發(fā)明的優(yōu)選實施例中,通過執(zhí)行由下述等式表示的下移位操作(反向向下的操作)恢復(fù)已經(jīng)經(jīng)過上移位操作的差分?jǐn)?shù)據(jù)。
invert-down(v) ...(22)=v (如果v≤nKeyInvertDown)=nKeyInvertDown-v(如果v>nKeyInvertDown)這里,nKeyInvertDown與在上移位操作中使用的最大值nKeyMax具有相同的值。作為上移位操作的結(jié)果,具有高于nKeyInvertDown的值的差分?jǐn)?shù)據(jù)被轉(zhuǎn)換為低于-1的負(fù)值。
根據(jù)在每個DND循環(huán)中的最大值nKeyMax,對已經(jīng)經(jīng)過下移位操作的差分?jǐn)?shù)據(jù)有選擇地執(zhí)行逆下分頻操作或逆上分頻操作。
參看圖21B,逆DND處理器2050執(zhí)行與差分?jǐn)?shù)據(jù)在編碼過程中被執(zhí)行的DND操作次數(shù)相同次數(shù)的逆DND操作。換言之,逆DND處理器2050將逆DND的階數(shù)的初始值設(shè)置為等于DND的階數(shù)。接著,逆DND處理器2050每執(zhí)行一次逆DND操作,即從逆DND的階數(shù)的初始值中減1,并保持執(zhí)行DND操作直到逆DND的階數(shù)變成1為止。在步驟S21510中,逆DND處理器2050搜索每個DND循環(huán)中的nKeyMax并檢查每個nKeyMax是否不小于0。
如果nKeyMax小于0,則意味著在編碼處理中已經(jīng)執(zhí)行了上分頻操作,由此,逆DND處理器2050在步驟S21530中通過執(zhí)行逆上分頻操作將正在被譯碼的差分?jǐn)?shù)據(jù)的范圍擴展到負(fù)數(shù)區(qū)域。在本發(fā)明的優(yōu)選實施例中,可以使用由下述等式(23)定義的逆上分頻操作。
inverse-divide-up(v) ...(23)=v (如果v≥0)=(nKeyMaxi-1)-v-12]]>(如果v<0,v mod 2≠0)=v2]]>(如果v<0,v mod 2=0)但是,如果nKeyMax不小于0,則逆DND處理器2050檢查逆DND的階數(shù)是否是1。如果逆DND的階數(shù)不是1,則意味著對在編碼處理過程中正在被譯碼的差分?jǐn)?shù)據(jù)已經(jīng)執(zhí)行了下分頻操作,因此逆DND處理器2050通過在步驟S21570中執(zhí)行逆下分頻操作將差分?jǐn)?shù)據(jù)的范圍擴展到正數(shù)區(qū)域。
在本發(fā)明的優(yōu)選實施例中,使用由下述等式定義的逆下分頻操作。
inverse-divide-down(v) ...(24)=v (如果v≥0)=(nKeyMaxi+1)+v-12]]>(如果v<0,v mod2≠0)=v2]]>(如果v<0,v mod2=0)如果nKeyMax不小于0并且逆DND的階數(shù)是1,那么,逆DND處理器2050在步驟S21590中執(zhí)行逆分頻操作之后,完成全部逆DND操作。在本發(fā)明的優(yōu)選實施例中,使用由下述等式(25)定義的逆分頻操作。
inverse-divide(v) ...(25)=v(如果v≥0)=v+(nKeyMax0+1) (如果v<0)在步驟S21600中,已經(jīng)經(jīng)過逆DND操作的密鑰數(shù)據(jù)的差分?jǐn)?shù)據(jù)被輸入給逆折疊處理器2040,逆折疊處理器2040對差分?jǐn)?shù)據(jù)執(zhí)行逆折疊操作,因此,一直在正數(shù)區(qū)域中的差分?jǐn)?shù)據(jù)被分成正值和負(fù)值。在本發(fā)明的優(yōu)選實施例中,使用等式(26)定義的逆折疊操作。inverse-fold(v)=-(v+1)2]]>(如果v mod 2≠0) ...(26)=v2]]>(如果v mod 2=0)=0 (如果v=0)已經(jīng)經(jīng)過逆折疊操作的差分?jǐn)?shù)據(jù)被輸出給逆移位器2030,逆移位器2030在步驟S21700中將已經(jīng)在編碼過程中使用并從標(biāo)題譯碼器1910輸入的模式nKeyShift加到差分?jǐn)?shù)據(jù)上。下述等式表示這個操作。
inverse-shift(v)=v+nKeyShift ...(27)在步驟S21800中,逆DPCM處理器2020使用從標(biāo)題譯碼器1910輸入的DPCM的階數(shù)將從逆移位器2030輸入的差分?jǐn)?shù)據(jù)復(fù)原成量化的密鑰數(shù)據(jù)。逆移位器2030執(zhí)行次數(shù)與下述等式(28)規(guī)定的DPCM的階數(shù)相同的逆DPCM操作。
v(i+1)=v(i)+delta(i)...(28)這里,i表示差分?jǐn)?shù)據(jù)和密鑰數(shù)據(jù)的下標(biāo),v表示整數(shù)數(shù)組,delta(i)表示差分?jǐn)?shù)據(jù)。
已經(jīng)經(jīng)過逆DPCN操作的量化密鑰數(shù)據(jù)被輸入給逆量化器2010。然后,在步驟S21900中,逆量化器2010從標(biāo)題譯碼器1910接收關(guān)于浮點數(shù)轉(zhuǎn)換器905是否對用于逆量化的量化比特尺寸nKeyQBit以及最大和最小值進行編碼的信息,并使用下述等式將所述量化密鑰數(shù)據(jù)轉(zhuǎn)換成逆量化的密鑰數(shù)據(jù)。inverse-quantize(v)=fKeyMin+v2nKeyQBit-1×(fKeyMax-fKeyMin)…(29)]]>如果在編碼密鑰數(shù)據(jù)的處理中用于量化的最大和最小值還沒有被浮點數(shù)轉(zhuǎn)換器905轉(zhuǎn)換,等式(29)中所示的fKeyMin和fKeyMax分別被設(shè)置為0和1。但是,如果浮點數(shù)轉(zhuǎn)換器905已經(jīng)對用于量化的最大和最小值進行了轉(zhuǎn)換,那么,被浮點數(shù)逆轉(zhuǎn)換器2005逆轉(zhuǎn)換的最大和最小值被分別用做用于逆量化的最大和最小值。
從逆量化器2010輸出的譯碼的密鑰數(shù)據(jù)被加到在線性密鑰譯碼器2000中譯碼的密鑰數(shù)據(jù)上,由此,構(gòu)成經(jīng)過譯碼的密鑰數(shù)據(jù)。
下面將描述線性密鑰譯碼處理。
標(biāo)題譯碼器1910譯碼來自比特流的密鑰標(biāo)題信息。如果與線性密鑰數(shù)據(jù)區(qū)域相關(guān)的信息存在于比特流中,則標(biāo)題譯碼器1910將譯碼線性密鑰數(shù)據(jù)區(qū)域的開始和結(jié)束密鑰所需的信息輸出給浮點數(shù)逆轉(zhuǎn)換器2005,并將被編碼為線性密鑰的密鑰的數(shù)量輸出給線性密鑰譯碼器2000。
浮點數(shù)逆轉(zhuǎn)換器2005將由十進制數(shù)表示的所述線性密鑰數(shù)據(jù)區(qū)域的開始和結(jié)束密鑰逆轉(zhuǎn)換為二進制數(shù),并將該二進制數(shù)輸出給線性密鑰譯碼器2000。
假設(shè)將被譯碼的兩個浮點數(shù)分別被稱做fKeyMin和fKeyMax,下面描述譯碼fKeyMin的處理。
標(biāo)題譯碼器1910從比特流中讀出fKeyMin的數(shù)位。如果fKeyMin的數(shù)位是0,則fKeyMin被設(shè)置為0,并從比特流中讀出fKeyMax的數(shù)位,以便譯碼fKeyMax。如果fKeyMax的數(shù)位不小于8,則意味著fKeyMax已經(jīng)被遵循IEEE標(biāo)準(zhǔn)754進行了譯碼。因此,在它的32比特被讀出以后譯碼浮點數(shù)的fKeyMax。
但是,如果fKeyMax的數(shù)位位于1和7之間,則標(biāo)題譯碼器1910從比特流中讀出一個符號位。在本發(fā)明的優(yōu)選實施例中,如果符號位是1,則MinKeyMantissaSign被設(shè)置為-1。相反,如果符號位是0,則MinKeyMantissaSign被設(shè)置為1。此后,參考示出了尾數(shù)的數(shù)位和編碼所需比特數(shù)之間關(guān)系的表3,獲得譯碼所需的比特數(shù)。接著,和譯碼所需比特數(shù)相同的比特流的比特被讀出并存儲在nMinKeyMantissa中。然后,讀出比特流的下一位并以與尾數(shù)的符號被存儲在MinKeyMantissaSign中相同的方式將其存儲在MinKeyExponentSign中。與指數(shù)值對應(yīng)的比特流的下面6位被讀出并存儲在nMinKeyExponent中。
浮點數(shù)逆轉(zhuǎn)換器2005通過將從標(biāo)題譯碼器1910輸入的值代入等式(30)復(fù)原fKeyMin。fKeyMin=MinKeyMantissaSign*nMinKeyMantissa10MinKeyExponentSign*nMinKeyExponent…(30)]]>復(fù)原fKeyMax的處理與復(fù)原fKeyMin的處理相同。具體地說,它確定在從比特流中讀出fKeyMax的指數(shù)之前,與fKeyMin的指數(shù)相同的值是否被用做fKeyMax的指數(shù)。如果與fKeyMin的指數(shù)相同的值沒有被用做fKeyMin的指數(shù),則以和從比特流中讀出fKeyMin的指數(shù)相同的方式從比特流中讀出fKeyMax的指數(shù)。
線性密鑰譯碼器2000從浮點數(shù)逆轉(zhuǎn)換器2005中讀出線性密鑰數(shù)據(jù)區(qū)域的開始和結(jié)束密鑰,并按照下述等式(31)譯碼線性密鑰數(shù)據(jù)區(qū)域。Keyi=fKeyMin+(fKeyMax-fKeyMin)*i(nNumberOfLinearKey-1)…(31)]]>(i=0,...,nNumberOfL inearKey-1)這里,fKeyMin和fKeyMax分別表示線性密鑰數(shù)據(jù)區(qū)域的開始和結(jié)束密鑰數(shù)據(jù)。
使用前述方法譯碼的在線性密鑰數(shù)據(jù)區(qū)域中的密鑰數(shù)據(jù)被加到從逆量化器2010輸出的密鑰數(shù)據(jù)上,然后加法的結(jié)果被輸出為最后的密鑰數(shù)據(jù)。
下面結(jié)合圖22A和23E描述按照本發(fā)明的優(yōu)選實施例的密鑰值數(shù)據(jù)譯碼器1950的結(jié)構(gòu)和操作。
參看圖22A,密鑰值數(shù)據(jù)譯碼器1950包括熵譯碼器2220,用于對輸入給它的比特流熵譯碼并輸出差分?jǐn)?shù)據(jù);逆DPCM處理器2230,用于對從熵譯碼器2220輸入的差分?jǐn)?shù)據(jù)執(zhí)行逆循環(huán)DPCM操作或逆預(yù)測循環(huán)DPCM操作并輸出量化的密鑰值數(shù)據(jù);逆量化器2240,用于逆量化從逆DPCM處理器2230輸入的量化密鑰值數(shù)據(jù)并輸出規(guī)范的密鑰值數(shù)據(jù);浮點數(shù)譯碼器2260,用于從標(biāo)題譯碼器1910接收最小和最大值,將x、y和z分量中每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和具有最大范圍的分量的最大值轉(zhuǎn)換成二進制數(shù),并將該二進制數(shù)輸出給逆量化器2240;和逆規(guī)范器2250,用于從浮點數(shù)譯碼器2260接收x、y和z分量中每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和具有最大范圍的分量的最大值,根據(jù)來自浮點數(shù)譯碼器1160的最小值和最大值計算最大范圍,然后逆規(guī)范從逆量化器2250輸入的密鑰值數(shù)據(jù)。
下面結(jié)合圖23A描述按照本發(fā)明的優(yōu)選實施例的,用于譯碼密鑰值數(shù)據(jù)的方法。參看圖23A,經(jīng)過編碼的密鑰值數(shù)據(jù)的比特流被輸入給熵譯碼器1120和標(biāo)題譯碼器1910。然后,在步驟S23000中,標(biāo)題譯碼器1910譯碼來自比特流的、譯碼所需的標(biāo)題信息并輸出譯碼的標(biāo)題信息給熵譯碼器2220、逆DPCM處理器2230和逆量化器2240。
在步驟S23200中,熵譯碼器2220熵譯碼比特流并輸出差分?jǐn)?shù)據(jù)給逆DPCM處理器2230。
圖23A詳細地示出了熵譯碼處理的流程圖。參見圖23A,在步驟S23200中,將比特流Pi輸入給熵譯碼器2220。
在步驟S23220中,熵譯碼器2220檢查分量,例如x,的密鑰值數(shù)據(jù)是否具有相同的量化值。如果分量的密鑰值數(shù)據(jù)具有相同的量化值,則在步驟S23230中,該分量的所有符號都被譯碼并將它們設(shè)置為從標(biāo)題譯碼器1910輸入的最小值,例如,fMin_X。
如果分量的密鑰值數(shù)據(jù)不具有相同的量化值,則在步驟S23240中,熵譯碼器2220檢查是否已經(jīng)使用unary AAC函數(shù)編碼了該密鑰值數(shù)據(jù)。如果已經(jīng)使用unary AAC函數(shù)編碼了該密鑰值數(shù)據(jù),則在步驟S23250中使用unaryAAC函數(shù)對它們譯碼。
unary AAC函數(shù)從比特流中讀出0直到比特1出現(xiàn)為止,將0的數(shù)量轉(zhuǎn)換成絕對值,讀出比特‘1’的下一位作為值的正負(fù)號,如果該位是‘0’,則該值的正負(fù)號為正,如果該位是‘1’,則該值的正負(fù)號為負(fù),然后輸出被譯碼的值。
如果分量的密鑰值數(shù)據(jù)還未被用unary AAC函數(shù)編碼,則熵譯碼器2220在步驟S23300中使用將在下面描述的SQ AAC函數(shù)譯碼其中分量的密鑰值數(shù)據(jù)已經(jīng)被編碼的比特流。
在步驟S23310中,熵譯碼器2220譯碼來自比特流的所有符號的正負(fù)號,譯碼最大值nMax,并且初始化所有符號的譯碼范圍(從0到nMax的范圍)和將標(biāo)記 設(shè)置為‘假’。
然后,熵譯碼器2220在步驟S23320中確定首先將被譯碼的密鑰值基準(zhǔn)點(i=nStartIndex)并將bDone設(shè)置為‘真’。
熵譯碼器2220再次執(zhí)行步驟S23330到S23430以便譯碼符號。
具體地說,熵譯碼器2220在步驟S23330中檢查在譯碼范圍中的最大值 和最小值 是否相同。
如果 和 相同,則在步驟S23340中,將被編碼的符號被確定為譯碼范圍中的最大值(或最小值),如果不同,則在步驟S23350中,熵譯碼器2220將bDone設(shè)置為‘假’并利用下述等式(32)更新譯碼范圍中的中間值nMid。 熵譯碼器2220在步驟S23360中檢查上下文標(biāo)記 是否是真以便確定用于譯碼的概率模型。如果所述上下文標(biāo)記 是真,熵譯碼器2220在步驟S23370中使用FoundContext譯碼比特流,如果是假,則熵譯碼器2220在步驟S23380中使用notFoundContext譯碼比特流。
已經(jīng)對來自比特流的一個比特譯碼的熵譯碼器2220在步驟S23390中檢查從比特流中譯碼的比特是否是1,如果不是,熵譯碼器2220在步驟S23400中利用中間值nMid代替譯碼范圍中的最大值 。如果述比特流中譯碼的比特是1,熵譯碼器2220在步驟S23410中利用中間值nMid替換在譯碼范圍中的最小值 并將上下文標(biāo)記 設(shè)置為‘真’。
熵譯碼器2220在步驟S23420中將譯碼下標(biāo)i加1,在步驟S23430中檢查當(dāng)前階段的分量的所有密鑰值數(shù)據(jù)是否都已經(jīng)被譯碼,如果還有剩余的符號需要被譯碼,則執(zhí)行步驟S23330到S23420。
如果當(dāng)前階段中所有的密鑰值數(shù)據(jù)都已經(jīng)被譯碼,則熵譯碼器2220在步驟S22440中檢查是否需要附加階段去譯碼當(dāng)前分量的密鑰值數(shù)據(jù),如果是,則再次執(zhí)行步驟S23320到S23430。熵譯碼器檢查當(dāng)前分量的所有密鑰值數(shù)據(jù)是否都已經(jīng)被譯碼,熵譯碼器開始譯碼下一個分量的密鑰值數(shù)據(jù)。
參看圖22A和23B,由熵譯碼器2220譯碼的密鑰值數(shù)據(jù)的差分?jǐn)?shù)據(jù)被輸入給逆DPCM處理器2230,然后,逆DPCM處理器2230依據(jù)對輸入的差分?jǐn)?shù)據(jù)執(zhí)行的DPCM的類型,對輸入的差分?jǐn)?shù)據(jù)執(zhí)行逆循環(huán)DPCM操作或逆預(yù)測循環(huán)DPCM操作。
下面結(jié)合圖23D描述在步驟S23500中的逆DPCM操作。參看圖23D,已經(jīng)被執(zhí)行了逆DPCM操作的差分?jǐn)?shù)據(jù)被輸入給確定單元1132。然后,在步驟S23520中,確定單元1132識別對輸入的差分?jǐn)?shù)據(jù)執(zhí)行的DPCM的種類,在識別結(jié)果的基礎(chǔ)上確定將對輸入的差分?jǐn)?shù)據(jù)執(zhí)行哪種逆DPCM,并將差分?jǐn)?shù)據(jù)輸出給逆循環(huán)DPCM操作器2234或逆預(yù)測循環(huán)DPCM操作器2238。
如果差分?jǐn)?shù)據(jù)被輸入給逆循環(huán)DPCM操作器2234,并且nMax是差分?jǐn)?shù)據(jù)量化范圍中的最大值,則逆循環(huán)DPCM操作器2234在步驟S23540中通過對輸入的差分?jǐn)?shù)據(jù) 執(zhí)行逆循環(huán)量化,獲得逆循環(huán)量化的差分?jǐn)?shù)據(jù) ,這由下述等式表示。 (如果 )...(33) (如果 )此后,逆循環(huán)DPCM操作器2234通過分別將輸入的差分?jǐn)?shù)據(jù) 和逆循環(huán)量化的差分?jǐn)?shù)據(jù) 代入等式(34),獲得逆DPCM的差分基準(zhǔn)點的值A(chǔ)和逆DPCM的差分基準(zhǔn)點的值B。
在等式(34)中,n表示數(shù)據(jù)的數(shù)量,和i表示1和n-1之間的整數(shù)。
如果A不小于0且不大于nMax,則逆循環(huán)DPCM操作器2234輸出A作為逆循環(huán)DPCM數(shù)據(jù) 。如果A小于0或大于nMax,則在步驟S23580中,逆循環(huán)DPCM操作器2234輸出B。
逆預(yù)測循環(huán)DPCM操作器2238在步驟S23540中通過使用等式(33),對預(yù)測的差分?jǐn)?shù)據(jù) 執(zhí)行逆預(yù)測循環(huán)量化,獲得逆循環(huán)量化的預(yù)測差分?jǐn)?shù)據(jù) 。
在步驟S23560中,如果P=2×P~i-1+P~i-2]]>,其中,P表示用于譯碼的預(yù)測數(shù)據(jù),逆預(yù)測循環(huán)DPCM操作器2338通過將 代入等式(35)計算A和將 代入等式(36)計算B。 (如果P>nMax) ...(35) (如果P<0) (否則) (如果P>nMax)...(36) (如果P<0) (否則)在等式(35)和(36)中,n表示數(shù)據(jù)的數(shù)量,i是1和n-1之間的一個整數(shù)。
如果A不小于0并且不大于nMax,則逆預(yù)測循環(huán)DPCM操作器2238輸出A作為逆預(yù)測循環(huán)DPCM的數(shù)據(jù) 。如果A小于0或大于nMax,則逆預(yù)測循環(huán)DPCM操作器2238在步驟S23580中輸出B作為 。
逆DPCM處理器2230輸出由逆DPCM操作產(chǎn)生的量化密鑰值數(shù)據(jù) 給逆量化器2240,然后,逆量化器2240在步驟S23700中使用從標(biāo)題譯碼器1910輸入的量化比特nKeyValueQBit逆量化 。當(dāng)n表示從標(biāo)題譯碼器1910輸入的密鑰值數(shù)據(jù)的數(shù)量時,在逆量化器2240中執(zhí)行的逆量化可以由下述等式表示。P^ij=P~ij(2nKeyValueQBits-1)]]>(i=nStartIndex,...,n;j=x,y,z)...(37)逆量化器2240通過對x、y和z分量中每個分量的密鑰值數(shù)據(jù)執(zhí)行逆量化,產(chǎn)生規(guī)范的數(shù)據(jù)并將x、y和z分量中每個分量的規(guī)范的密鑰值數(shù)據(jù)輸出給逆規(guī)范器2250。
逆規(guī)范器2250在步驟S23800中使用從浮點數(shù)譯碼器2260輸入的信息,逆規(guī)范規(guī)范的密鑰值數(shù)據(jù)。下面將結(jié)合圖23E更加詳細地描述在逆規(guī)范器2250中執(zhí)行的逆規(guī)范。
浮點數(shù)譯碼器2260在步驟S23820中從標(biāo)題譯碼器1910中接收將被用于逆規(guī)范的最大值fMax,并且分別接收x、y和z分量的最小值fMin_X、fMin_Y和fMin_Z,以及與哪個分量軸具有最大值相關(guān)的信息nWhichAxis和與編碼類型相關(guān)的信息bUse32Float。
浮點數(shù)譯碼器2260在步驟S23840中將以十進制數(shù)表示的fMax、fMin_X、fMin_Y和fMin_Z轉(zhuǎn)換為二進制數(shù)并將該二進制數(shù)輸出給逆規(guī)范器2250。
在步驟S23860中,逆規(guī)范器2250根據(jù)bUse32Float識別fMax、fMin_X、fMin_Y和fMin_Z是否是被用IEEE標(biāo)準(zhǔn)754的浮點數(shù)格式編碼的,如果它們不是被用IEEE標(biāo)準(zhǔn)754的浮點數(shù)格式編碼的,則逆規(guī)范器2250使用下述等式計算在最大數(shù)據(jù)范圍中的最大值Rangemax。如果fMax、fMin_X,fMin_Y和fMin_Z是被用IEEE標(biāo)準(zhǔn)754的浮點數(shù)格式編碼的,則逆規(guī)范器2250確定fMax為Rangemax。
Rangemax=fMax-fMin_X(如果nWhichAxis=0)...(38)Rangemax=fMax-fMin_Y(如果nWhichAxis=1)Rangemax=fMax-fMin_Z(如果nWhichAxis=2)如果Rangemax被確定,則逆規(guī)范器2250在步驟S23880中根據(jù)Rangemax使用下述等式逆規(guī)范x、y和z分量中每個分量的數(shù)據(jù)。P^i,x=P~^i,x×Rangemax+fMin_X…(39)]]>P^i,y=P~^i,y×Rangemax+fMin_Y]]>P^i,z=P~^i,z×Rangemax+fMin_Z(i=0,1,…n)]]>在等式(39)中,n表示數(shù)據(jù)的數(shù)量。
逆規(guī)范器2250在步驟S23900中將逆規(guī)范的密鑰值數(shù)據(jù)輸出給位置內(nèi)插器合成器1980。
下面將描述用于合成譯碼的密鑰數(shù)據(jù)和譯碼的密鑰值數(shù)據(jù)的位置內(nèi)插器合成器1980。
圖24示出了位置內(nèi)插器合成器1980的操作流程圖。
位置內(nèi)插器合成器1980在步驟S24000中接收譯碼的密鑰數(shù)據(jù)和譯碼的密鑰值數(shù)據(jù),并從標(biāo)題譯碼器1910接收密鑰數(shù)據(jù)的數(shù)量、斷點產(chǎn)生模式和密鑰選擇標(biāo)記。
當(dāng)所述斷點產(chǎn)生模式是動畫路徑保存模式時,在步驟S24100中,位置內(nèi)插器合成器1980輸出譯碼的密鑰數(shù)據(jù)和譯碼的密鑰值數(shù)據(jù)。在已經(jīng)以動畫路徑保存模式提取了斷點的情況下,密鑰數(shù)據(jù)對應(yīng)于密鑰值數(shù)據(jù),因此不需要使用內(nèi)插產(chǎn)生新的密鑰值數(shù)據(jù)。但是,如果已經(jīng)以動畫密鑰保存模式提取了斷點,則意味著在所有密鑰數(shù)據(jù)都已經(jīng)被編碼和譯碼的同時,只有與斷點對應(yīng)的密鑰值數(shù)據(jù)被編碼。因此,在這種情況下,密鑰數(shù)據(jù)不對應(yīng)于密鑰值數(shù)據(jù),由此需要內(nèi)插密鑰值數(shù)據(jù),這將在下面的段落中描述。
當(dāng)斷點產(chǎn)生模式是動畫密鑰保存模式時,為了標(biāo)記出是否存在與密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù),在步驟S24200中設(shè)置一個用于指示密鑰選擇標(biāo)記數(shù)組的下標(biāo)的計數(shù)器,以便與密鑰數(shù)據(jù)對應(yīng)。
步驟S24300中,位置內(nèi)插器合成器1980檢查是否存在由計數(shù)器指示的、與密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)。如果存在由計數(shù)器指示的、與密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù),則位置內(nèi)插器合成器1980進入到步驟S24500。
如果不存在由計數(shù)器指示的、與密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù),則位置內(nèi)插器合成器1980在步驟S24400中,通過使用與由兩個連續(xù)斷點指示的密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù),線性內(nèi)插當(dāng)前的密鑰值數(shù)據(jù)產(chǎn)生密鑰值數(shù)據(jù),所述兩個連續(xù)斷點包括在由計數(shù)器指示的密鑰數(shù)據(jù)之前的一個斷點和由計數(shù)器指示的密鑰數(shù)據(jù)之后的一個斷點。
此后,位置內(nèi)插器合成器1980在步驟S24500中檢查所有的密鑰數(shù)據(jù)是否都具有它們的對應(yīng)密鑰值數(shù)據(jù)以及是否已經(jīng)對不具有它們對應(yīng)的密鑰值數(shù)據(jù)的所有密鑰數(shù)據(jù)執(zhí)行了線性內(nèi)插。如果仍然存在沒有被檢查的密鑰數(shù)據(jù),則位置內(nèi)插器合成器1980在步驟S24600中更新計數(shù)器并再次執(zhí)行步驟S24300到S24500。如果所有的密鑰數(shù)據(jù)都已經(jīng)被檢查,位置內(nèi)插器合成器1980輸出密鑰數(shù)據(jù)和合成的密鑰值數(shù)據(jù)作為位置內(nèi)插器。
下面結(jié)合圖25A到27描述測量動畫路徑之間的誤差的方法。
圖25A和25B示出了測量動畫路徑之間的誤差的方法,該方法是在本發(fā)明第一到第三最佳實施例中任何一個的分析器40中執(zhí)行的。
使用在動畫路徑之間的面積計算在動畫路徑之間的誤差,如圖25A和25B所示。
在圖25中,原始位置內(nèi)插器的路徑點和通過內(nèi)插從分析器40的誤差計算器154提取的路徑點產(chǎn)生的位置內(nèi)插器的路徑點分別被稱之為Pi,j和 。另外,在圖25中,原始動畫路徑和使用內(nèi)插的位置內(nèi)插器產(chǎn)生的動畫路徑分別使用實線和虛線標(biāo)記。這里,i和j表示位置內(nèi)插器的密鑰值數(shù)據(jù)的分量。
如圖25A和25B所示,原始動畫路徑和使用內(nèi)插的位置內(nèi)插器產(chǎn)生的動畫路徑之間的誤差可以由包括規(guī)則梯形和扭轉(zhuǎn)的梯形的兩個不同形狀的梯形表示。分析器40的誤差計算器154通過根據(jù)構(gòu)成每個動畫路徑的密鑰數(shù)據(jù),將每個分量的兩個動畫路徑分成預(yù)定數(shù)量的部分,計算每個部分中兩個動畫路徑之間的誤差,并將所有的誤差相加,來產(chǎn)生兩個動畫路徑之間的最后誤差。
特別是,誤差計算器154通過在時間軸上安排原始位置內(nèi)插器和輸入給它的內(nèi)插的位置內(nèi)插器產(chǎn)生兩個動畫路徑。此后,誤差計算器154將兩個動畫路徑中的每一個分成預(yù)定數(shù)量的部分。
誤差計算器154檢查在每個部分中的兩個動畫路徑之間的誤差是形成梯形還是扭轉(zhuǎn)的梯形。如果在一個部分中的兩個動畫路徑之間的誤差形成一個梯形,則誤差計算器154使用等式(40)計算梯形的面積。如果在該部分中的兩個動畫路徑之間的誤差形成扭轉(zhuǎn)的梯形,則誤差計算器154使用等式(41)計算扭轉(zhuǎn)的梯形的面積。ei,j=12(|P^i-1,j-Pi-1,j|+|P^i,j-Pi,j|)×(|ti,j-ti-1,j|)…(40)]]>ei,j=(P^i-1,j-Pi-1,j)2+(P^i,j-Pi,j)22(|P^i-1,j-Pi-1,j|+|P^i,j-Pi,j|)×(|ti,j-ti-1,j|)…(41)]]>利用下述等式(42)計算在一個分量的所有部分中的兩個動畫路徑之間的誤差和。ej=Σi=0n-1ei,j]]>(j=x,y,z)...(42)誤差計算器154將從等式(42)獲得的誤差的和輸出給確定單元156,確定單元156在將從誤差計算器154輸入的誤差和與一個可允許的誤差極限比較之后,確定斷點。
另外,可以通過將與密鑰值數(shù)據(jù)的x、y和z分量中每個分量相關(guān)的兩個動畫路徑之間的誤差相加并且根據(jù)空間對誤差進行規(guī)范,計算在所有部分中的兩個動畫路徑之間的誤差,如等式(43)所示。Maxj=Maxi=0n-1(P-i,j)…(43)]]>Minj=Mini=0n-1(P-i,j)]]>Rangemax=Max(Maxx-Minx,Maxy-Miny,Maxz-Minz)ei,j=ex+ey+ez3×Rangemax]]>(i=0,...,n-1),j=x,y,z)根據(jù)本發(fā)明的用于測量兩個動畫路徑之間的誤差的方法,可以被用于計算在使用輸入給用于編碼位置內(nèi)插器的一個裝置的位置內(nèi)插器產(chǎn)生的第一動畫路徑和使用譯碼的位置內(nèi)插器產(chǎn)生的第二動畫路徑之間的誤差。
圖26A到26C示出了計算第一和第二動畫路徑之間的誤差的處理,圖27示出了計算第一和第二動畫路徑之間的誤差的處理的流程圖。
下面結(jié)合圖26A到26C以及圖27描述計算第一和第二動畫路徑之間的誤差的方法。
由于譯碼的位置內(nèi)插器的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)在編碼處理過程中已經(jīng)經(jīng)過了加法、減法、內(nèi)插和量化,所以,譯碼的位置內(nèi)插器與原始位置內(nèi)插器不同。具體地說,由于與在分析器40中執(zhí)行的計算兩個動畫路徑之間的誤差的處理不同,密鑰數(shù)據(jù)是變化的,所以,必須對所述密鑰數(shù)據(jù)的位置進行補償。
圖26A示出了在第一和第二動畫路徑之間形成的規(guī)則梯形,圖26B示出了在第一和第二動畫路徑之間形成的扭轉(zhuǎn)的梯形。如上所述,必須使構(gòu)成第一動畫路徑的密鑰數(shù)據(jù)對應(yīng)于構(gòu)成第二動畫路徑的密鑰數(shù)據(jù),以便通過將第一和第二動畫路徑分成多個部分,測量在第一和第二動畫路徑之間的誤差,如等式(40)到(42)所示。
參看圖26C和27,在步驟S27000中,在第一動畫路徑上不存在但在第二動畫路徑上存在的、與密鑰數(shù)據(jù)對應(yīng)的路徑點被插入到第一動畫路徑中,并且,在第二動畫路徑上不存在但在第一動畫路徑上存在的與密鑰數(shù)據(jù)對應(yīng)的路徑點被插入到第二動畫路徑中。
然后,在步驟S27100中,根據(jù)存在的路徑點和內(nèi)插的路徑點,將第一和第二動畫路徑分成多個部分。
首先驗證在每個部分中的第一和第二動畫路徑之間的誤差是形成梯形還是扭轉(zhuǎn)的梯形,然后,在步驟S27200中使用等式(40)和(41)計算在第一和第二動畫路徑之間的誤差。
此后,在步驟S27300中,通過相加以及在時間上和空間上對所有部分中的第一和第二動畫路徑之間的誤差進行規(guī)范,來計算使用原始位置內(nèi)插器產(chǎn)生的第一動畫路徑和使用譯碼的位置內(nèi)插器產(chǎn)生的第二動畫路徑之間的誤差。第一和第二動畫路徑之間誤差的規(guī)范可以由下述等式規(guī)定。ei,j=ex+ey+ez2(tmax-tmin)Rangemax]]>(i=0,...,n-1,j=x,y,z)...(44)在等式(44)中,tMax和tMin分別表示動畫路徑的開始密鑰數(shù)據(jù)和結(jié)束密鑰數(shù)據(jù),Rangemax是從等式(43)獲得的值。
此后,圖28A到28J示出了SDL程序代碼的例子,利用該程序代碼實現(xiàn)按照本發(fā)明的優(yōu)選實施例的、用于譯碼位置內(nèi)插器的裝置。
圖28A示出了一個類CompressedPositionInterpolator。CompressedPositionInterpolator是用于讀出定向內(nèi)插器的編碼比特流的最高級。CompressedPositionInterpolator包括子類KeyHeader、PoslKeyValueHeader、KeySelectionFlag、Key和PoslKeyValue。KeyHeader和PoslKeyValueHeader包括用于譯碼Key和PoslKeyValue的標(biāo)題信息。當(dāng)與密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)被包括在PoslKeyValue中時,KeySelectionFlag具有一系列用于指示每個密鑰數(shù)據(jù)的標(biāo)記。Key和PoslKeyValue是用于從一個比特流中分別讀出密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的類。
圖28B示出了用于譯碼密鑰標(biāo)題的類,密鑰標(biāo)題是譯碼處理所需的信息。
密鑰標(biāo)題類包括密鑰數(shù)據(jù)、量化比特、內(nèi)部密鑰數(shù)據(jù)、DND標(biāo)題的數(shù)量以及實際用于譯碼的比特數(shù)。nKeyQBit表示在逆量化中用于復(fù)原浮點數(shù)密鑰值的量化比特。NNumberCodingBit表示代表密鑰數(shù)據(jù)數(shù)量的nNumberOfKey的比特尺寸。NKeyDigit表示原始密鑰數(shù)據(jù)最高有效位的數(shù)量并被用于完成譯碼值。
當(dāng)與線性密鑰子區(qū)域相關(guān)的信息被包括在密鑰標(biāo)題中時,標(biāo)記blsLinearKeySubRegion被設(shè)置為1。在這種情況下,可以使用在標(biāo)記blsLinearKeySubRegion后的譯碼標(biāo)題信息計算包括在整個密鑰區(qū)域內(nèi)的特定線性密鑰子區(qū)域中的密鑰。BRangeFlag表示密鑰數(shù)據(jù)的范圍是否是從0到1。如果密鑰數(shù)據(jù)的范圍不是從0到1,則從類KeyMinMax中譯碼密鑰數(shù)據(jù)范圍內(nèi)的最小和最大值。KeyMinMax復(fù)原進行逆量化所需的最小和最大值。前述值中的每一個都能夠被分成其各自的尾數(shù)和指數(shù)。
nBitSize是nQIntraKey的比特尺寸,和nKeyShift是nKeyMax的初始比特尺寸。NQIntraKey表示第一量化內(nèi)部數(shù)據(jù)的幅值并與表示nQIntraKey的正負(fù)的nQIntraKeySign相結(jié)合。nQIntraKey被用做復(fù)原其他量化密鑰數(shù)據(jù)的基礎(chǔ)。在內(nèi)插器壓縮中使用的所有正負(fù)號位中,值‘0’表示正號,值‘1’表示負(fù)號。NKDPCMOrder表示DPCM的階數(shù)減1的值。DPCM的階數(shù)可以是1、2或3。量化的內(nèi)部數(shù)據(jù)的數(shù)量與DPCM的階數(shù)相同。
nKeyShift與正負(fù)號位nKeyShiftSign一起是表示在密鑰數(shù)據(jù)譯碼器中移位量的整數(shù)。如果bShiftFlag被設(shè)置為‘真’,則nKeyShift和nKeyShiftSign被譯碼。nDNDOrder是分頻-和-分頻(DND)操作的階數(shù)。上面已經(jīng)利用密鑰數(shù)據(jù)譯碼器描述了DND操作。如果nDNDOrder的值是7,則bNoDND被譯碼。BNoDND表示是否將執(zhí)行逆DND操作。nKeyMax是在逆DND操作的連續(xù)循環(huán)中使用的最大值或最小值。NkeyCodingBit表示用于編碼密鑰數(shù)據(jù)的比特。BSignedAACFlag表示在AAC譯碼中將被執(zhí)行的譯碼處理。如果bSignedAACFlag被設(shè)置為0,則將執(zhí)行一個沒有正負(fù)號的AAC譯碼處理。反之,將執(zhí)行有正負(fù)號的AAC譯碼處理。bKeyInvertDownFlag是一個用于表示是否將使用nKeyInvertDown的布爾值。nKeylnvertDown是一個用于把所有大于其本身的量化密鑰數(shù)據(jù)轉(zhuǎn)換成不大于-1的負(fù)值的整數(shù)。如果nKeyInvertDown被設(shè)置為-1,則將不執(zhí)行下移位操作。
圖28C示出了類LinearKey。在圖28C中,nNumLinearKeyCodingBit是表示編碼預(yù)定數(shù)量的線性可預(yù)測密鑰所需的比特數(shù)的值。nNumberOfLinearKey是表示線性可預(yù)測密鑰的數(shù)量的值。
圖28D示出了類KeyMinMax。在圖28D中,bMinKeyDigitSame是表示所有密鑰的最高有效位的數(shù)量(nKeyDigit)和密鑰中的最小值的最高有效位的數(shù)量是否相同的標(biāo)記。nMinKeyDigit是表示密鑰中的最小值的最高有效位的數(shù)量的值。nMinKeyMantissaSign是表示nMinKeyMantissaSign的正負(fù)號的值。
nMinKeyMantissa是表示在密鑰中的最小值的尾數(shù)的值。nMinKeyExponentSign是表示nMinKeyExponent的正負(fù)號的值。
nMinKeyExponent是表示密鑰中的最小值的指數(shù)的值。fKeyMin是表示密鑰中的最小值的值。bMaxKeyDigitSame是表示所有密鑰的最高有效位的數(shù)量nKeyDigit和密鑰中的最大值的最高有效位的數(shù)量是否相同的標(biāo)記。nMaxKeyDigit是表示密鑰中的最大值的最高有效位的數(shù)量的值。nMaxKeyMantissaSign是表示nMaxKeyMantissa的正負(fù)號的值。nMaxKeyMantissa是表示密鑰中的最大值的尾數(shù)的值。
bSameExponent是表示密鑰中的最大值的指數(shù)是否與nMinKeyExponent相同的標(biāo)記。nMaxKeyExponentSign是表示nMaxKeyExponent的正負(fù)號的值。nMaxKeyExponent是表示密鑰中的最大值的指數(shù)的值。FkeyMax是表示密鑰中的最大值的值。
圖28E示出了類PoslKeyValueHeader。在圖28E中,bPreserveKey表示當(dāng)前的譯碼模式是否是動畫密鑰保存模式,nKVQBit表示密鑰值數(shù)據(jù)的量化比特尺寸。
x_keyvalue_flag,y_keyvalue_flag和z_keyvalue_flag分別表示x、y和z分量,和nKVDigit表示密鑰值數(shù)據(jù)中每一個的最高有效位的最大數(shù)量。NKVDPCMOrder_X,nKVDPCMOrder_Y和nKVDPCMOrder_Z分別對應(yīng)于用于x、y和z分量中每個分量的密鑰值數(shù)據(jù)的DPCM的階數(shù)。如果已經(jīng)執(zhí)行DPCM,則標(biāo)記被設(shè)置為0,如果已經(jīng)執(zhí)行預(yù)測DPCM,則該標(biāo)記被設(shè)置為1。
blsUnaryAAC_X,blsUnaryAAC_Y和blsUnaryAAC_Z中的每一個都表示在熵編碼期間已經(jīng)使用了unary AAC函數(shù)。nKVCodingBit_X,nKVCodingBit_Y和nKVCodingBit_Z表示分別用于x、y和z分量的量化比特。nStartIndex_X,nStartIndex_Y和nStartIndex_Z表示每個分量軸的開始下標(biāo)。firstKV_X,firstKV_Y和firstKV_Z分別表示已經(jīng)被首先量化的x、y和z分量中每個分量的密鑰值基準(zhǔn)點。
圖28F示出了類KeyValueMinMax。參看圖28F,類KeyValueMin復(fù)原已經(jīng)被用于規(guī)范密鑰值數(shù)據(jù)的最大和最小值。bUse32float表示32位浮點數(shù)是否已經(jīng)被用于存儲最大和最小值。如果bUse32Float是0,則十進制的浮點數(shù)已經(jīng)被用于存儲所述最大和最小值。
nWhichAxis表示在x、y和z分量中具有最大數(shù)據(jù)范圍的分量。在本實施例中,如果nWhichAxis是0,則X軸具有最大數(shù)據(jù)范圍。如果nWhichAxis是1,則Y軸具有最大數(shù)據(jù)范圍,和如果nWhichAxis是2,則Z軸具有最大數(shù)據(jù)范圍。
BAllSameMantissaDigitFlag表示x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值的尾數(shù)是否具有相同的數(shù)位,bSameKVDigitFlag表示最小值的尾數(shù)的數(shù)位與nKeyDigit相同。nMantissaDigit_X,nMantissaDigit_Y和nMantissaDigit_Z表示x、y和z分量中的每個分量的密鑰值數(shù)據(jù)中的最小值的尾數(shù)的數(shù)位。
BMaxDigitFlag表示最大值的尾數(shù)是否與最小值的尾數(shù)具有相同的數(shù)位。如果最大值的尾數(shù)的數(shù)位不同于最小值的尾數(shù)的數(shù)位,則從比特流中讀出最大值的尾數(shù)的數(shù)位。
nMantissaDigit_M表示最大值的尾數(shù)的數(shù)位,nExponentBits表示用于編碼最大值的指數(shù)所需的比特數(shù)。BAllSameExponentSign表示x、y和z分量的正負(fù)號是否相同,nExponentSign表示當(dāng)bAllSaneExponentSign是真時的指數(shù)的正負(fù)號。
fpnMin_X、fpnMin_Y、fpnMin_Z和fpnMax表示在十進制系統(tǒng)中被譯碼的浮點數(shù)。下面將利用FloatingPointNumber描述譯碼fpnMin_X,fpnMin_Y和fpnMin_Z和fpnMax的方法。fMin_X,fMin_Y和fMin_Z表示x、y和z分量中每個分量的密鑰值當(dāng)中的最小值,fMax表示具有最大范圍的分量的密鑰值數(shù)據(jù)當(dāng)中的最大值。
圖28G示出了類FloatingPointNumber。類FloatingPointNumber表示使用十進制系統(tǒng)的浮點數(shù)。nMantissa表示十進制系統(tǒng)中的浮點數(shù)的尾數(shù),nExponent表示浮點數(shù)的指數(shù)。
nSign表示十進制系統(tǒng)中的浮點數(shù)的正負(fù)號,nExponentSign表示十進制系統(tǒng)中的浮點數(shù)的指數(shù)的正負(fù)號。
圖28H示出了類KeySelectionFlag。在圖28H中,KeyFlag表示第i個密鑰數(shù)據(jù)的密鑰值數(shù)據(jù)是否已經(jīng)被編碼,nNumOfKeyValue是表示將被譯碼的密鑰值數(shù)據(jù)的數(shù)量的整數(shù)。
圖28I示出了類Key。在圖28I中,nQKey是來自比特流的、將被譯碼的量化密鑰數(shù)據(jù)的數(shù)組。KeyContext是用于讀出nQKey的幅值的上下文,KeySignContext是用于讀出nQKey的正負(fù)號的上下文。
decodeUnsignedAAC是用于對自適應(yīng)算術(shù)編碼的數(shù)據(jù)執(zhí)行無符號譯碼處理的函數(shù),decodeSignedAAC是對自適應(yīng)算術(shù)編碼的數(shù)據(jù)執(zhí)行有符號譯碼處理的函數(shù)。
圖28J示出了類PoslKeyValue。參看圖28J,在存儲在PoslKeyValue中的變量中,KeyValue_X,KeyValue_Y和KeyValue_Z分別表示在位置內(nèi)插器中x、y和z分量的每個分量的密鑰值數(shù)據(jù)的數(shù)組。如果nStartIndex_X被設(shè)置為0,則使用算術(shù)譯碼器從比特流中譯碼KeyValue_X
。以相同的方式確定KeyValue_Y
和KeyValue_Z
。當(dāng)從比特流中算術(shù)譯碼KeyValue_X
、KeyValue_Y
和KeyValue_Z
時,使用decodeUnaryAAC或decodeSQAAC函數(shù)。
上下文模型kVXSignContext、kVYSignContext和kVZSignContext被分別用于譯碼KeyValue_X、KeyValue_Y和KeyValue_Z的正負(fù)號。上下文模型kVXSignContext、kVYSignContext和kVZSignContext被傳輸給decodeUnaryAAC或decodeSQAAC函數(shù)。
MaxValueContext、FoundContext和NotFoundContext被用于熵譯碼密鑰值的絕對值。例如,kVXMaxValueContext、kVXFoundContext和kVXNotFoundContext被用于譯碼KeyValue_X。MaxValueContext、FoundContext和NotFoundContext被傳輸給decodeUnaryAAC或decodeSQAAC函數(shù)。
上下文模型kVXUContext、kVYUContext和kVZUContext被用于譯碼KeyValue_X,KeyValue_Y和KeyValue_Z,并被傳輸給decodeUnaryAAC函數(shù)。
本發(fā)明可以利用寫在計算機可讀記錄介質(zhì)上的計算機可讀代碼實現(xiàn)。這里,計算機可讀記錄介質(zhì)包括任何一種可以被計算機系統(tǒng)讀出的記錄介質(zhì)。例如,計算機可讀記錄介質(zhì)包括ROM、RAM、CD-ROM、磁帶、軟盤、光數(shù)據(jù)存儲器和載波(經(jīng)過互聯(lián)網(wǎng)傳輸)。計算機可讀記錄介質(zhì)可以被分散到經(jīng)過互聯(lián)網(wǎng)連接的計算機系統(tǒng)中,并且一臺計算機可以以分散的方式閱讀記錄介質(zhì)。
按照用于編碼本發(fā)明的位置內(nèi)插器的方法和裝置,可以在保持高質(zhì)量動畫的同時高效率地編碼和譯碼密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)。另外,通過使用測量在動畫路徑之間的誤差的方法可以保持高質(zhì)量的動畫數(shù)據(jù)。此外,通過使用本發(fā)明的重取樣方法和斷點提取方法可以明顯減少將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的數(shù)量。
盡管本發(fā)明是參照其優(yōu)選實施例來具體描述的,但是本領(lǐng)域的技術(shù)人員應(yīng)該理解,在不脫離由所附權(quán)利要求限定的本發(fā)明的精神和范圍的情況下,可以對其進行形式和細節(jié)的各種修改。
權(quán)利要求
1.一種用于對位置內(nèi)插器進行編碼的裝置,所述位置內(nèi)插器包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)位置的密鑰值數(shù)據(jù),該裝置包括一個斷點提取器,用于從由輸入給它的位置內(nèi)插器構(gòu)成的第一動畫路徑中提取最小數(shù)量的斷點,這些斷點能夠在第一動畫路徑和由所提取的斷點生成的第二動畫路徑之間引起不大于預(yù)定的可允許誤差極限的誤差;一個密鑰數(shù)據(jù)編碼器,用于對從所述斷點提取器輸入的密鑰數(shù)據(jù)進行編碼;以及一個密鑰值數(shù)據(jù)編碼器,用于對從所述斷點提取器輸入的密鑰值數(shù)據(jù)進行編碼。
2.如權(quán)利要求1所述的裝置,其中,所述斷點提取器包括一個線性內(nèi)插器,用于提取輸入動畫路徑的開始路徑點和結(jié)束路徑點,在所述開始和結(jié)束路徑點之間選擇路徑點,并用所選擇的路徑點和所提取的路徑點對還未被選擇的其他路徑點進行內(nèi)插;一個誤差計算器,用于計算在輸入動畫路徑和由所述線性內(nèi)插器利用內(nèi)插生成的內(nèi)插動畫路徑之間的誤差;以及一個確定單元,用于提取斷點,利用這些斷點可以使輸入動畫路徑和內(nèi)插動畫路徑之間的誤差最小,并且如果對應(yīng)的誤差不大于預(yù)定的可允許誤差極限,則輸出所提取的斷點。
3.如權(quán)利要求2所述的裝置,其中,如果與所提取的斷點對應(yīng)的誤差大于預(yù)定的可允許誤差極限,則所述確定單元向所述線性內(nèi)插器輸出所提取的斷點,然后,所述線性內(nèi)插器通過選擇除從所述確定單元輸入的被提取的斷點以外的路徑點執(zhí)行內(nèi)插。
4.如權(quán)利要求2所述的裝置,其中,所述誤差計算器根據(jù)由兩個動畫路徑的路徑點構(gòu)成的一個參考分量,將輸入動畫路徑和內(nèi)插動畫路徑分成預(yù)定數(shù)量的部分,并通過測量每個部分中的輸入動畫路徑和內(nèi)插動畫路徑之間的面積,計算在每個部分中的輸入動畫路徑和內(nèi)插動畫路徑之間的誤差。
5.如權(quán)利要求2所述的裝置,其中,所述誤差計算器根據(jù)由多個路徑點表示的密鑰數(shù)據(jù)之間的距離和分別與密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)之間的距離,測量輸入動畫路徑和內(nèi)插動畫路徑之間的誤差。
6.如權(quán)利要求1所述的裝置,還包括一個重取樣器,用于將所述第一動畫路徑取樣為預(yù)定數(shù)量的具有預(yù)定時間間隔的多個部分,并輸出包括重取樣的密鑰數(shù)據(jù)和重取樣的密鑰值數(shù)據(jù)的位置內(nèi)插器;以及一個選擇器,用于依據(jù)外部輸入信號,將輸入給它的位置內(nèi)插器輸出給重取樣器或斷點提取器。
7.如權(quán)利要求6所述的裝置,其中,所述斷點提取器包括一個線性內(nèi)插器,用于提取輸入動畫路徑的開始路徑點和結(jié)束路徑點,在所述開始和結(jié)束路徑點之間選擇路徑點,并利用所選擇的路徑點和所提取的路徑點對還未被選擇的其他路徑點進行內(nèi)插;一個誤差計算器,用于計算輸入動畫路徑和由線性內(nèi)插器利用內(nèi)插產(chǎn)生的內(nèi)插動畫路徑之間的誤差;以及一個確定單元,用于提取斷點,利用這些斷點可以使輸入動畫路徑和內(nèi)插動畫路徑之間的誤差最小,如果對應(yīng)的誤差不大于預(yù)定可允許誤差極限,則輸出所提取的斷點。
8.如權(quán)利要求6所述的裝置,其中,所述重取樣器將由位置內(nèi)插器的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)構(gòu)成的動畫路徑分成預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,將每個部分的結(jié)束點作為將被編碼的密鑰數(shù)據(jù)輸出,并將存在于每個部分中的動畫路徑上的密鑰值數(shù)據(jù)作為將被編碼的密鑰值數(shù)據(jù)輸出。
9.如權(quán)利要求1所述的裝置,還包括一個重取樣器,用于將所述第一動畫路徑取樣為預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,并輸出包括重取樣的密鑰數(shù)據(jù)和重取樣的密鑰值數(shù)據(jù)的位置內(nèi)插器,其中,所述斷點提取器從由從所述重取樣器輸入的位置內(nèi)插器構(gòu)成的動畫路徑中提取斷點。
10.如權(quán)利要求9所述的裝置,其中,所述斷點提取器包括一個線性內(nèi)插器,用于提取輸入動畫路徑的開始路徑點和結(jié)束路徑點,在所述開始和結(jié)束路徑點之間選擇路徑點,并用所選擇的路徑點和所提取的路徑點對還未被選擇的其他路徑點進行內(nèi)插;一個誤差計算器,用于計算在輸入動畫路徑和由所述線性內(nèi)插器利用內(nèi)插生成的內(nèi)插動畫路徑之間的誤差;以及一個確定單元,用于提取斷點,利用這些斷點可以使輸入動畫路徑和內(nèi)插動畫路徑之間的誤差最小,并且如果對應(yīng)的誤差不大于預(yù)定可允許誤差極限,則輸出所提取的斷點。
11.如權(quán)利要求9所述的裝置,其中,所述重取樣器將由位置內(nèi)插器的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)構(gòu)成的動畫路徑分成預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,將每個部分的結(jié)束點作為將被編碼的密鑰數(shù)據(jù)輸出,并將存在于每個部分中的動畫路徑上的密鑰值數(shù)據(jù)作為將被編碼的密鑰值數(shù)據(jù)輸出。
12.如權(quán)利要求1所述的裝置,還包括一個重取樣器,用于將由從所述斷點提取器提取的位置內(nèi)插器構(gòu)成的動畫路徑取樣為預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,并將包括重取樣的密鑰數(shù)據(jù)和重取樣的密鑰值數(shù)據(jù)的位置內(nèi)插器輸出給所述密鑰數(shù)據(jù)編碼器和密鑰值數(shù)據(jù)編碼器。
13.如權(quán)利要求12所述的裝置,其中,所述斷點提取器包括一個線性內(nèi)插器,用于提取輸入動畫路徑的開始路徑點和結(jié)束路徑點,在所述開始和結(jié)束路徑點之間選擇路徑點,并利用所選擇的路徑點和所提取的路徑點對還未被選擇的其他路徑點進行內(nèi)插;一個誤差計算器,用于計算輸入動畫路徑和由線性內(nèi)插器利用內(nèi)插產(chǎn)生的內(nèi)插動畫路徑之間的誤差;和一個確定單元,用于提取斷點,利用這些斷點可以使輸入動畫路徑和內(nèi)插動畫路徑之間的誤差最小,檢查對應(yīng)的誤差是否不大于預(yù)定的可允許誤差極限,并且輸出所提取的斷點。
14.如權(quán)利要求13所述的裝置,其中,所述重取樣器將由位置內(nèi)插器的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)構(gòu)成的動畫路徑分成預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,將每個部分的結(jié)束點作為將被編碼的密鑰數(shù)據(jù)輸出,并將存在于每個部分中動畫路徑上的密鑰值數(shù)據(jù)作為將被編碼的密鑰值數(shù)據(jù)輸出。
15.如權(quán)利要求1所述的裝置。其中,所述密鑰數(shù)據(jù)編碼器包括一個量化器,用于利用多個量化比特量化輸入的差分?jǐn)?shù)據(jù);一個DPCM處理器,用于產(chǎn)生量化密鑰數(shù)據(jù)的差分?jǐn)?shù)據(jù);一個移位器,用于獲得差分?jǐn)?shù)據(jù)中具有最高頻率的差分基準(zhǔn)點(模式),并從每個差分?jǐn)?shù)據(jù)中減去該模式;一個折疊處理器,用于將差分?jǐn)?shù)據(jù)轉(zhuǎn)換為正數(shù)區(qū)域或負(fù)數(shù)區(qū)域;一個DND處理器,用于根據(jù)轉(zhuǎn)換后的差分?jǐn)?shù)據(jù)與它們當(dāng)中的最大和最小值的關(guān)系,對轉(zhuǎn)換后的差分?jǐn)?shù)據(jù)執(zhí)行DND操作,以減少它們的范圍,在從所述移位器輸入的差分?jǐn)?shù)據(jù)、從所述折疊處理器輸入的差分?jǐn)?shù)據(jù)和已經(jīng)被執(zhí)行了DND操作的差分?jǐn)?shù)據(jù)中選擇一個差分?jǐn)?shù)據(jù),并且輸出所選擇的差分?jǐn)?shù)據(jù);以及一個熵編碼器,用于對從所述DND處理器輸入的差分?jǐn)?shù)據(jù)進行熵編碼。
16.如權(quán)利要求1所述的裝置,其中,所述密鑰值數(shù)據(jù)編碼器包括一個量化器,用于利用預(yù)定的量化比特對輸入給它的數(shù)據(jù)進行量化;一個DPCM處理器,用于獲得量化數(shù)據(jù)的差分?jǐn)?shù)據(jù)和預(yù)測差分?jǐn)?shù)據(jù),并且對差分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化操作,以便輸出減少了尺寸的差分?jǐn)?shù)據(jù);以及一個熵編碼器,用于對從所述DPCM處理器輸入的差分?jǐn)?shù)據(jù)進行熵編碼。
17.一種用于對位置內(nèi)插器進行編碼的裝置,所述位置內(nèi)插器包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)位置的密鑰值數(shù)據(jù),該裝置包括一個重取樣器,用于將由密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)構(gòu)成的動畫路徑取樣為預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,并且輸出包括重取樣的密鑰數(shù)據(jù)和重取樣的密鑰值數(shù)據(jù)的位置內(nèi)插器;一個密鑰數(shù)據(jù)編碼器,用于對從所述重取樣器輸入的密鑰數(shù)據(jù)進行編碼;以及一個密鑰值數(shù)據(jù)編碼器,用于對從所述重取樣器輸入的密鑰值數(shù)據(jù)進行編碼,其中,所述密鑰值編碼器包括一個量化器,用于利用預(yù)定的量化比特對輸入給它的數(shù)據(jù)進行量化;一個DPCM處理器,用于獲得量化數(shù)據(jù)的差分?jǐn)?shù)據(jù)和預(yù)測差分?jǐn)?shù)據(jù),并且對差分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化操作,以便輸出減少了尺寸的差分?jǐn)?shù)據(jù);以及一個熵編碼器,用于對從所述DPCM處理器輸入的差分?jǐn)?shù)據(jù)進行熵編碼。
18.如權(quán)利要求17所述的裝置,其中,所述重取樣器將由位置內(nèi)插器的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)構(gòu)成的動畫路徑分成預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,將每個部分的結(jié)束點作為將被編碼的密鑰數(shù)據(jù)輸出,并將存在于每個部分中的動畫路徑上的密鑰值數(shù)據(jù)作為將被編碼的密鑰值數(shù)據(jù)輸出。
19.一種用于對比特流進行譯碼的裝置,在所述比特流中,包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)位置的密鑰值數(shù)據(jù)的位置內(nèi)插器被編碼,所述裝置包括一個密鑰數(shù)據(jù)譯碼器,用于對來自輸入比特流的密鑰數(shù)據(jù)進行譯碼;一個密鑰值數(shù)據(jù)譯碼器,用于對來自輸入比特流的密鑰值數(shù)據(jù)進行譯碼;以及一個位置內(nèi)插器合成器,用于通過合成譯碼的密鑰值數(shù)據(jù)和被用譯碼的密鑰值數(shù)據(jù)線性內(nèi)插的密鑰值數(shù)據(jù),生成位置內(nèi)插器。
20.如權(quán)利要求19所述的裝置,其中,如果不存在與當(dāng)前正在被執(zhí)行位置內(nèi)插器合成的密鑰數(shù)據(jù)對應(yīng)的譯碼的密鑰值數(shù)據(jù),則所述位置內(nèi)插器合成器使用與在前合成的密鑰數(shù)據(jù)對應(yīng)的譯碼的密鑰值數(shù)據(jù)和與下一個將被合成的密鑰數(shù)據(jù)對應(yīng)的譯碼的密鑰值數(shù)據(jù),對與當(dāng)前正在被執(zhí)行位置內(nèi)插器合成的密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)進行內(nèi)插。
21.如權(quán)利要求19所述的裝置,其中,所述密鑰數(shù)據(jù)譯碼器包括一個熵譯碼器,用于通過對輸入比特流進行熵譯碼產(chǎn)生差分?jǐn)?shù)據(jù);一個逆DPCM處理器,用于通過對差分?jǐn)?shù)據(jù)執(zhí)行預(yù)定的逆DPCM操作,產(chǎn)生量化的密鑰數(shù)據(jù);以及一個逆量化器,用于通過對量化的密鑰數(shù)據(jù)進行逆量化,產(chǎn)生復(fù)原的密鑰數(shù)據(jù)。
22.如權(quán)利要求19所述的裝置,其中,所述密鑰值數(shù)據(jù)譯碼器包括一個熵譯碼器,用于通過對輸入比特流進行熵譯碼產(chǎn)生差分?jǐn)?shù)據(jù);一個逆DPCM處理器,用于通過對差分?jǐn)?shù)據(jù)執(zhí)行預(yù)定的逆DPCM操作,產(chǎn)生量化的密鑰值數(shù)據(jù);以及一個逆量化器,用于通過對量化的密鑰值數(shù)據(jù)進行逆量化,產(chǎn)生復(fù)原的密鑰值數(shù)據(jù)。
23.一種用于對位置內(nèi)插器進行編碼的方法,所述位置內(nèi)插器包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)位置的密鑰值數(shù)據(jù),所述方法包括如下步驟(b)通過從由所述位置內(nèi)插器構(gòu)成的第一動畫路徑中提取最小數(shù)量的斷點產(chǎn)生將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù),這些斷點會在所述第一動畫路徑和將通過所提取的斷點產(chǎn)生的第二動畫路徑之間引起一個不大于預(yù)定的可允許誤差極限的誤差;(d)對在步驟(b)中產(chǎn)生的密鑰數(shù)據(jù)進行編碼;以及(e)對在步驟(b)中產(chǎn)生的密鑰值數(shù)據(jù)進行編碼。
24.如權(quán)利要求23所述的方法,其中,步驟(b)包括如下步驟(b1)提取第一動畫路徑的開始路徑點和結(jié)束路徑點;(b2)選擇在開始和結(jié)束路徑點之間的路徑點,并且用所選擇的路徑點和所提取的路徑點對還未被提取的其他路徑點進行內(nèi)插;(b3)計算在第一動畫路徑和通過在步驟(b2)中的內(nèi)插產(chǎn)生的第二動畫路徑之間的誤差;以及(b4)提取多個斷點,利用這些斷點可以使第一動畫路徑與第二動畫路徑之間的誤差最小,如果對應(yīng)的誤差不大于預(yù)定的可允許誤差極限,則確定將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)。
25.如權(quán)利要求24所述的方法,其中,在步驟(b3)中,根據(jù)由第一和第二動畫路徑的路徑點構(gòu)成的一個參考分量,將第一動畫路徑和第二動畫路徑中的每一個都分成預(yù)定數(shù)量的部分,并通過測量每個部分中第一動畫路徑和第二動畫路徑之間的面積,計算每個部分中第一動畫路徑和第二動畫路徑之間的誤差。
26.如權(quán)利要求25所述的方法,其中,在步驟(b3)中,根據(jù)在由路徑點指示的密鑰數(shù)據(jù)之間的距離和在分別與密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)之間的距離,測量在第一動畫路徑和第二動畫路徑之間的面積。
27.如權(quán)利要求25所述的方法,其中,在步驟(b4)中,如果與所提取的斷點對應(yīng)的誤差大于預(yù)定的可允許誤差極限,則再次執(zhí)行步驟(b2)到(b4)。
28.如權(quán)利要求23所述的方法,還包括(a)在步驟(b)之前,通過將第一動畫路徑取樣為預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,生成包括重取樣的密鑰數(shù)據(jù)和重取樣的密鑰值數(shù)據(jù)的位置內(nèi)插器,其中,在步驟(b)中,從由在步驟(a)中生成的位置內(nèi)插器構(gòu)成的動畫路徑中提取斷點。
29.如權(quán)利要求28所述的方法,其中,在步驟(a)中,將第一動畫路徑分成預(yù)定數(shù)量的具有預(yù)定時間間隔的多個部分,將每個部分的結(jié)束點設(shè)置為取樣的密鑰數(shù)據(jù),并且將在每個部分中第一動畫路徑上的密鑰值數(shù)據(jù)設(shè)置為取樣的密鑰值數(shù)據(jù)。
30.如權(quán)利要求23所述的方法,還包括(c)通過在步驟(b)之后將用所提取的斷點構(gòu)成的第二動畫路徑取樣為預(yù)定數(shù)量的具有預(yù)定時間間隔的多個部分,生成將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)。
31.如權(quán)利要求30所述的方法,其中,在步驟(c)中,將第二動畫路徑分成預(yù)定數(shù)量的具有預(yù)定時間間隔的多個部分,將每個部分的結(jié)束點設(shè)置為將被編碼的密鑰數(shù)據(jù),并且將在每個部分中的第一動畫路徑上的密鑰值數(shù)據(jù)設(shè)置為將被編碼的密鑰值數(shù)據(jù)。
32.如權(quán)利要求23所述的方法,其中,步驟(d)包括如下步驟利用預(yù)定數(shù)量的量化比特,對密鑰數(shù)據(jù)進行量化;通過對量化的數(shù)據(jù)執(zhí)行預(yù)定的DPCM操作產(chǎn)生差分?jǐn)?shù)據(jù);以及對該差分?jǐn)?shù)據(jù)進行熵編碼。
33.如權(quán)利要求23所述的方法,其中,步驟(e)包括如下步驟利用預(yù)定數(shù)量的量化比特,對密鑰值數(shù)據(jù)進行量化;通過對量化的密鑰值數(shù)據(jù)執(zhí)行預(yù)定的DPCM操作產(chǎn)生差分?jǐn)?shù)據(jù);以及對該差分?jǐn)?shù)據(jù)進行熵編碼。
34.一種用于對位置內(nèi)插器進行編碼的方法,所述位置內(nèi)插器包括用于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和用于指示目標(biāo)位置的密鑰值數(shù)據(jù),所述方法包括如下步驟(b)將由所述位置內(nèi)插器構(gòu)成的動畫路徑取樣為預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,并生成包括重取樣的密鑰數(shù)據(jù)和重取樣的密鑰值數(shù)據(jù)的位置內(nèi)插器;(d)對在步驟(b)中生成的密鑰數(shù)據(jù)進行編碼;以及(e)對在步驟(b)中生成的密鑰值數(shù)據(jù)進行編碼,其中,步驟(e)包括如下步驟用預(yù)定的量化比特,對在步驟(b)中生成的密鑰數(shù)據(jù)進行量化;獲得差分?jǐn)?shù)據(jù)和預(yù)測差分?jǐn)?shù)據(jù),并通過對插分?jǐn)?shù)據(jù)執(zhí)行循環(huán)量化操作,生成減少了尺寸的差分?jǐn)?shù)據(jù);以及對減少了尺寸的差分?jǐn)?shù)據(jù)進行熵編碼。
35.如權(quán)利要求34所述的方法,其中,在步驟(b)中,將動畫路徑分成預(yù)定數(shù)量的具有預(yù)定時間間隔的部分,將每個部分的結(jié)束點設(shè)置為取樣的密鑰數(shù)據(jù),并且將在每個部分中的第一動畫路徑上的密鑰值數(shù)據(jù)設(shè)置為取樣的密鑰值數(shù)據(jù)。
36.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求23所述方法的計算機可讀程序代碼。
37.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求24所述方法的計算機可讀程序代碼。
38.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求28所述方法的計算機可讀程序代碼。
39.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求30所述方法的計算機可讀程序代碼。
40.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求34所述方法的計算機可讀程序代碼。
41.一種用于對比特流進行譯碼的方法,在所述比特流中,包括指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和指示目標(biāo)位置的密鑰值數(shù)據(jù)的位置內(nèi)插器已經(jīng)被編碼,所述方法包括如下步驟(a)對來自輸入比特流的密鑰數(shù)據(jù)進行譯碼;(b)對來自輸入比特流的密鑰值數(shù)據(jù)進行譯碼;(c)通過合成譯碼的密鑰值數(shù)據(jù)和被用具有譯碼的密鑰數(shù)據(jù)的譯碼的密鑰值數(shù)據(jù)線性內(nèi)插的密鑰值數(shù)據(jù),生成位置內(nèi)插器。
42.如權(quán)利要求41所述的方法,其中,在步驟(c)中,如果不存在與當(dāng)前正在被執(zhí)行位置內(nèi)插器合成的密鑰數(shù)據(jù)對應(yīng)的譯碼的密鑰值數(shù)據(jù),用與在前合成的密鑰數(shù)據(jù)對應(yīng)的譯碼的密鑰值數(shù)據(jù)和與下一個將被合成的密鑰數(shù)據(jù)對應(yīng)的譯碼的密鑰值數(shù)據(jù),對與當(dāng)前正在被執(zhí)行位置內(nèi)插器合成的密鑰數(shù)據(jù)對應(yīng)的密鑰值數(shù)據(jù)進行內(nèi)插。
43.如權(quán)利要求41所述的方法,其中步驟(a)包括通過對輸入比特流進行熵譯碼,生成差分?jǐn)?shù)據(jù);通過對差分?jǐn)?shù)據(jù)執(zhí)行預(yù)定的DPCM操作和逆DND操作,生成量化的密鑰數(shù)據(jù);以及通過對量化的密鑰數(shù)據(jù)進行逆量化,生成復(fù)原的密鑰數(shù)據(jù)。
44.如權(quán)利要求41所述的方法,其中步驟(b)包括通過對輸入比特流進行熵譯碼,生成差分?jǐn)?shù)據(jù);通過對差分?jǐn)?shù)據(jù)執(zhí)行預(yù)定的逆DPCM操作,生成量化的密鑰值數(shù)據(jù);以及通過對量化的密鑰值數(shù)據(jù)進行逆量化,生成復(fù)原的密鑰值數(shù)據(jù)。
45.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求41所述方法的計算機可讀程序代碼。
46.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求42所述方法的計算機可讀程序代碼。
47.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求43所述方法的計算機可讀程序代碼。
48.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求44所述方法的計算機可讀程序代碼。
49.一種方法,用于計算第一路徑和第二路徑之間的誤差,其中,由其中的每一個都包括多個數(shù)據(jù)分量的多個第一路徑點構(gòu)成的第一路徑,由其中的每一個都包括多個數(shù)據(jù)分量的多個第二路徑點構(gòu)成的第二路徑,該方法包括如下步驟(a)將多個路徑點插入到第一和第二動畫路徑中,從而使第一和第二動畫路徑就包括在每個路徑點中的參考數(shù)據(jù)分量而言具有相同路徑點;(b)根據(jù)參考數(shù)據(jù)分量,將第一和第二路徑中的每一個分成預(yù)定數(shù)量的部分,從而使預(yù)定數(shù)量的部分分別對應(yīng)于路徑點;(c)計算在每個部分中的第一和第二動畫路徑之間的誤差;以及(d)檢查是否已經(jīng)對所有預(yù)定數(shù)量的部分執(zhí)行了步驟(c),并對在步驟(c)中得到的誤差進行規(guī)范。
50.如權(quán)利要求49所述的方法,其中,在步驟(c)中,利用參考數(shù)據(jù)之間的距離和除參考分量數(shù)據(jù)以外的分量數(shù)據(jù)之間的距離,計算在每個部分中的第一和第二路徑之間的誤差。
51.如權(quán)利要求50所述的方法,其中,參考分量數(shù)據(jù)是包括在位置內(nèi)插器節(jié)點中的密鑰數(shù)據(jù),并且在步驟(c)中,通過將密鑰數(shù)據(jù)之間的距離設(shè)置為梯形的高度并且將其他分量數(shù)據(jù)之間的距離設(shè)置為梯形的上邊和下邊來計算在每個部分中第一和第二動畫路徑之間的誤差。
52.如權(quán)利要求49所述的方法,其中,在步驟(d)中,獲得路徑點的參考分量數(shù)據(jù)的極值,然后,利用該極值對在步驟(c)中獲得的誤差進行規(guī)范。
53.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求49所述方法的計算機可讀程序代碼。
54.一種方法,用于利用線性逼近從由包括多個分量數(shù)據(jù)的路徑點組成的數(shù)據(jù)中提取斷點,該方法包括如下步驟(a)提取原始路徑的開始點和結(jié)束點;(b)選擇一個未被提取的路徑點,并且利用所選擇的路徑點和所提取的路徑點對其他未被選擇的路徑點進行線性內(nèi)插;(c)計算原始路徑和利用內(nèi)插的路徑點生成的內(nèi)插動畫路徑之間的誤差;(d)對所有未被選擇的路徑點執(zhí)行步驟(b)和(c),并提取導(dǎo)致原始動畫路徑和內(nèi)插路徑之間最小誤差的路徑點;以及(e)將原始路徑和利用包括在步驟(d)中提取的路徑點在內(nèi)的所提取的路徑點生成的路徑之間的誤差與預(yù)定的可允許誤差極限進行比較,然后重復(fù)執(zhí)行步驟(b)到(d)。
55.如權(quán)利要求54所述的方法,其中,步驟(c)包括如下步驟(c1)將原始路徑和內(nèi)插路徑分成預(yù)定數(shù)量的部分,從而使預(yù)定數(shù)量的部分分別與路徑點對應(yīng);以及(c2)利用每個路徑點的參考分量數(shù)據(jù)之間的距離和在每個路徑點的其他分量數(shù)據(jù)之間的距離,計算原始路徑和內(nèi)插路徑之間的誤差。
56.如權(quán)利要求55所述的方法,其中,路徑點對應(yīng)于表示三維動畫的位置內(nèi)插器,參考分量數(shù)據(jù)對應(yīng)于包括在位置內(nèi)插器節(jié)點中的密鑰數(shù)據(jù),并且在步驟(c2)中,通過將密鑰數(shù)據(jù)之間的距離設(shè)置為梯形的高并且將其他分量數(shù)據(jù)之間的距離設(shè)置為該梯形的上邊和下邊,計算在每個部分中的原始動畫路徑和內(nèi)插動畫路徑之間的誤差。
57.如權(quán)利要求55所述的方法,其中,路徑點對應(yīng)于表示三維動畫的位置內(nèi)插器,參考分量數(shù)據(jù)對應(yīng)于指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù),而其他分量數(shù)據(jù)對應(yīng)于指示目標(biāo)在動畫中的位置的密鑰值數(shù)據(jù)。
58.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求54所述方法的計算機可讀程序代碼。
59.一種計算機可讀記錄介質(zhì),其中記錄有實現(xiàn)權(quán)利要求55所述方法的計算機可讀程序代碼。
60.一種方法,用于利用線性逼近從由路徑點構(gòu)成的動畫路徑中提取斷點,其中,路徑點包括多個關(guān)鍵幀在時間軸上的位置和目標(biāo)在每個關(guān)鍵幀中的位置,該方法包括如下步驟(a)提取與原始動畫路徑的開始點和結(jié)束點對應(yīng)的關(guān)鍵幀;(b)選擇未被提取的關(guān)鍵幀,并且利用所選擇的關(guān)鍵幀和所提取的關(guān)鍵幀對其他關(guān)鍵幀進行線性內(nèi)插;(c)計算原始動畫路徑和利用內(nèi)插的關(guān)鍵幀生成的內(nèi)插動畫路徑之間的誤差;(d)對所有未被選擇的關(guān)鍵幀執(zhí)行步驟(b)和(c),并提取導(dǎo)致原始動畫路徑和內(nèi)插動畫路徑之間最小誤差的關(guān)鍵幀;以及(e)將原始動畫路徑和利用與在步驟(d)中選擇的關(guān)鍵幀對應(yīng)的路徑點生成的動畫路徑之間的誤差與預(yù)定的可允許誤差極限進行比較,然后重復(fù)執(zhí)行步驟(b)到(d)。
61.如權(quán)利要求60所述的方法,其中,步驟(c)包括如下步驟(c1)將原始動畫路徑和內(nèi)插動畫路徑分成預(yù)定數(shù)量的部分,從而使預(yù)定數(shù)量的部分分別與關(guān)鍵幀對應(yīng);以及(c2)利用用于分割每個動畫路徑的關(guān)鍵幀之間的間隔和關(guān)于目標(biāo)在關(guān)鍵幀中的位置的信息段之間的差,計算在原始動畫路徑和內(nèi)插動畫路徑之間的誤差。
62.如權(quán)利要求61所述的方法,其中,在步驟(c2)中,通過將在關(guān)鍵幀之間用于分割每個動畫路徑的間隔設(shè)置為梯形的高并且將關(guān)于目標(biāo)在關(guān)鍵幀中的位置的信息段之間的差分別設(shè)置為梯形的上邊和下邊,計算每個部分中原始動畫路徑和內(nèi)插動畫路徑之間的誤差。
63.一種比特流,在所述比特流中,對包括指示關(guān)鍵幀在時間軸上的位置的密鑰數(shù)據(jù)和指示目標(biāo)位置的密鑰值數(shù)據(jù)的位置內(nèi)插器進行編碼,所述比特流包括對密鑰數(shù)據(jù)進行編碼/譯碼所需的密鑰數(shù)據(jù)編碼/譯碼信息;以及對密鑰值數(shù)據(jù)進行編碼/譯碼所需的密鑰值數(shù)據(jù)編碼/譯碼信息,其中,密鑰數(shù)據(jù)編碼/譯碼信息包括逆DND操作信息,包括說明將要對差分?jǐn)?shù)據(jù)執(zhí)行預(yù)定數(shù)量的逆DND循環(huán)的逆DND的階數(shù)和在逆DND操作的每個循環(huán)中使用的差分?jǐn)?shù)據(jù)當(dāng)中的最大和最小值,其中,差分?jǐn)?shù)據(jù)是通過對該比特流進行熵譯碼生成的,以便擴展差分?jǐn)?shù)據(jù)的范圍;第一逆DPCM操作信息,包括將要對經(jīng)過逆DND的差分?jǐn)?shù)據(jù)執(zhí)行的逆DPCM操作的階數(shù),對經(jīng)過逆DND的差分?jǐn)?shù)據(jù)執(zhí)行的逆DPCM操作,從而將經(jīng)過逆DND的差分?jǐn)?shù)據(jù)轉(zhuǎn)換為量化密鑰數(shù)據(jù)和用于逆DPCM操作的每個循環(huán)的內(nèi)部密鑰數(shù)據(jù);以及第一逆量化信息,用于在逆量化中通過對量化密鑰數(shù)據(jù)執(zhí)行逆量化,生成復(fù)原的密鑰數(shù)據(jù),并且密鑰值數(shù)據(jù)編碼/譯碼信息包括熵譯碼信息,包括一個標(biāo)記,用于指示將被執(zhí)行的熵譯碼操作,通過對來自比特流的密鑰值數(shù)據(jù)執(zhí)行熵譯碼操作,生成第二插分?jǐn)?shù)據(jù);第二逆DPCM操作信息,包括關(guān)于對差分?jǐn)?shù)據(jù)執(zhí)行逆DPCM操作以便在逆DPCM操作的每個循環(huán)中將第二差分?jǐn)?shù)據(jù)轉(zhuǎn)換為量化的密鑰值數(shù)據(jù)和內(nèi)部密鑰值數(shù)據(jù)的信息;第二逆量化信息,包括用于通過對量化的密鑰值數(shù)據(jù)進行逆量化,復(fù)原原始密鑰值數(shù)據(jù)的預(yù)定數(shù)量的逆量化比特;和逆規(guī)范信息,用于對通過利用逆量化比特進行逆量化而被復(fù)原的復(fù)原密鑰值數(shù)據(jù)進行逆規(guī)范,逆規(guī)范信息包括說明具有最大密鑰值數(shù)據(jù)范圍的分量的標(biāo)記、在最大密鑰值數(shù)據(jù)范圍中的最大值和在每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值。
64.如權(quán)利要求63所述的比特流,其中,逆DND操作信息還包括一個標(biāo)記,用于說明是否對將被執(zhí)行逆DND操作的差分?jǐn)?shù)據(jù)執(zhí)行下移位操作。
65.如權(quán)利要求63所述的比特流,其中,第一量化信息包括用于對量化密鑰數(shù)據(jù)和量化密鑰數(shù)據(jù)當(dāng)中的最大和最小值進行逆量化的逆量化比特尺寸。
66.如權(quán)利要求65所述的比特流,其中,量化密鑰數(shù)據(jù)當(dāng)中的最大和最小值被用于使量化的密鑰數(shù)據(jù)的量化誤差最小。
67.如權(quán)利要求63所述的比特流,其中,密鑰數(shù)據(jù)編碼/譯碼信息還包括用于對在比特流中的、密鑰數(shù)據(jù)線性增加的線性密鑰區(qū)域進行譯碼的線性密鑰譯碼信息,該線性密鑰譯碼信息包括用于說明在整個密鑰數(shù)據(jù)范圍中是否存在線性密鑰區(qū)域的標(biāo)記、包括在線性密鑰區(qū)域中的密鑰數(shù)據(jù)的數(shù)量以及線性密鑰區(qū)域的開始和結(jié)束密鑰數(shù)據(jù)。
68.如權(quán)利要求63所述的比特流,其中,密鑰值數(shù)據(jù)編碼/譯碼信息還包括被包括在比特流中的、經(jīng)過編碼的密鑰值數(shù)據(jù)的數(shù)量和密鑰值數(shù)據(jù)的最大數(shù)位。
69.如權(quán)利要求63所述的比特流,其中,第二逆量化信息包括在每個分量的密鑰值數(shù)據(jù)當(dāng)中的、用于使量化的密鑰值數(shù)據(jù)的量化誤差最小的最小值。
全文摘要
提供了一種用于對包括密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)的位置內(nèi)插器進行編碼和譯碼的方法和裝置。用于對位置內(nèi)插器進行編碼的方法包括(b)通過從由位置內(nèi)插器構(gòu)成的第一動畫路徑中提取最小數(shù)量的斷點,生成將被編碼的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù),這些斷點可以在第一動畫路徑和將由所提取的斷點生成的第二動畫路徑之間引起不大于預(yù)定的可允許誤差極限的誤差;(d)對在步驟(b)中生成的密鑰數(shù)據(jù)進行編碼;以及(e)對在步驟(b)中生成的密鑰值數(shù)據(jù)進行編碼。
文檔編號H04N7/32GK1432971SQ0215429
公開日2003年7月30日 申請日期2002年11月27日 優(yōu)先權(quán)日2001年11月27日
發(fā)明者金道均, 鄭錫潤, 張義善, 禹相玉, 李信俊, 韓萬鎮(zhèn), 張敬子 申請人:三星電子株式會社