專利名稱:對數(shù)據(jù)進行編碼和譯碼的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于對數(shù)據(jù)進行編碼和譯碼的裝置和方法,更具體講,涉及一種差分脈沖碼調(diào)制(DPCM)操作、一種規(guī)范數(shù)據(jù)的方法以及一種使用所述DPCM操作和所述規(guī)范數(shù)據(jù)的方法對數(shù)據(jù)進行編碼和譯碼的方法和裝置。
背景技術(shù):
圖1的框圖示出了常規(guī)的用于對數(shù)據(jù)進行編碼的裝置以及常規(guī)的用于對數(shù)據(jù)進行譯碼的裝置的結(jié)構(gòu)。參照圖1,常規(guī)的用于對數(shù)據(jù)進行編碼的裝置包括量化器100、DPCM操作器110和熵編碼器120。按照常規(guī)的用于對數(shù)據(jù)進行編碼的方法,在量化器100中,利用預(yù)定數(shù)量的比特量化輸入數(shù)據(jù)并將其輸入給DPCM操作器110。DPCM操作器110通過從在先量化的數(shù)據(jù)中減掉從量化器100輸入的當(dāng)前量化數(shù)據(jù),生成差分數(shù)據(jù)并將該差分數(shù)據(jù)輸出給熵編碼器120。熵編碼器120使用預(yù)定的熵編碼方法,將該差分數(shù)據(jù)編碼成比特流。
參照圖1,傳統(tǒng)的用于對數(shù)據(jù)進行譯碼的裝置包括熵譯碼器130、逆DPCM操作器140和逆量化器150。將數(shù)據(jù)編碼在其中的比特流被輸入給熵譯碼器130。熵譯碼器130逆向執(zhí)行由熵編碼器執(zhí)行的處理,輸出差分數(shù)據(jù),然后,逆DPCM操作器140將從熵譯碼器130輸入的差分數(shù)據(jù)轉(zhuǎn)換為量化數(shù)據(jù)并將該量化數(shù)據(jù)輸出給逆量化器150。逆量化器150對從逆DPCM操作器140輸入的量化數(shù)據(jù)進行逆量化,然后輸出譯碼的數(shù)據(jù)。
但是,由于前述常規(guī)的用于對數(shù)據(jù)進行編碼的方法僅僅執(zhí)行簡單的DPCM操作,以至于減少了將被編碼的數(shù)據(jù)量,并且這種方法對具有多個分量的數(shù)據(jù)進行編碼而沒有考慮數(shù)據(jù)的x、y和z分量中每個分量的特性,特別是當(dāng)數(shù)據(jù)被連續(xù)輸入時,它的編碼效率不夠高。
發(fā)明內(nèi)容
為了解決上述和其他問題,本發(fā)明的一個目的就是要提供一種能夠顯著地減少將被編碼的數(shù)據(jù)的尺寸的DPCM操作和DPCM操作器。
本發(fā)明的另一個方面是提供一種用于編碼和對數(shù)據(jù)進行譯碼的方法和裝置,它們能夠使得在量化處理期間生成的量化誤差最小并能夠?qū)?shù)據(jù)的正負號進行編碼。
本發(fā)明的另一個方面是提供一種利用對數(shù)據(jù)進行規(guī)范的方法,對數(shù)據(jù)進行編碼和譯碼的方法和裝置,所述規(guī)范數(shù)據(jù)的方法通過根據(jù)一個分量來對x、y和z分量中的每一個分量的數(shù)據(jù)進行規(guī)范,可以減少具有多個分量的數(shù)據(jù)的尺寸。
本發(fā)明的另一個方面是提供一種用于對數(shù)據(jù)進行編碼的方法和裝置,其中,按照本發(fā)明的DPCM操作、誤差最小化方法和數(shù)據(jù)規(guī)范方法被應(yīng)用于用于編碼和譯碼位置內(nèi)插器的密鑰值數(shù)據(jù)的方法,所述密鑰值數(shù)據(jù)用于表示出現(xiàn)在三維動畫中的目標的位置,還提供一種用于對比特流進行譯碼的方法和裝置,該比特流已經(jīng)被按照用于對數(shù)據(jù)進行編碼的方法和裝置進行了編碼。
因此,為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于生成差分數(shù)據(jù)的裝置,該裝置包括一個循環(huán)DPCM操作器,用于對量化數(shù)據(jù)執(zhí)行DPCM操作,以便生成差分數(shù)據(jù),對差分數(shù)據(jù)執(zhí)行循環(huán)量化操作以便減少它們的范圍,然后,輸出循環(huán)量化的差分數(shù)據(jù);一個預(yù)測循環(huán)DPCM操作器,用于對量化數(shù)據(jù)執(zhí)行預(yù)測DPCM操作,以便生成預(yù)測的差分數(shù)據(jù),對所述預(yù)測的差分數(shù)據(jù)執(zhí)行循環(huán)量化操作,以便減少它們的范圍,然后輸出循環(huán)量化預(yù)測的差分數(shù)據(jù);以及一個選擇器,用于根據(jù)輸入給它的差分數(shù)據(jù)的值,選擇循環(huán)量化的差分數(shù)據(jù)和預(yù)測差分數(shù)據(jù)中的一個。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于生成差分數(shù)據(jù)的方法。該方法包括(a)通過對量化數(shù)據(jù)執(zhí)行DPCM操作,生成差分數(shù)據(jù),通過對量化數(shù)據(jù)執(zhí)行預(yù)測DPCM操作,生成預(yù)測差分數(shù)據(jù),(b)通過對差分數(shù)據(jù)和預(yù)測的差分數(shù)據(jù)執(zhí)行循環(huán)量化操作,生成循環(huán)量化差分數(shù)據(jù)和循環(huán)量化預(yù)測差分數(shù)據(jù),以便減少它們的范圍,以及(c)根據(jù)它們的幅值選擇循環(huán)量化差分數(shù)據(jù)和循環(huán)量化預(yù)測差分數(shù)據(jù)中的一個。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種使用差分數(shù)據(jù)生成量化數(shù)據(jù)的裝置。該裝置包括一個逆循環(huán)DPCM操作器,用于對輸入給它的差分數(shù)據(jù)執(zhí)行逆循環(huán)量化操作,以便擴展它們的范圍,對逆循環(huán)量化操作的結(jié)果執(zhí)行逆DPCM操作,然后輸出量化數(shù)據(jù);一個逆預(yù)測循環(huán)DPCM操作器,用于對輸入給它的差分數(shù)據(jù)執(zhí)行逆循環(huán)量化操作便擴展它們的范圍,對逆循環(huán)量化操作的結(jié)果執(zhí)行逆預(yù)測DPCM操作,然后輸出量化數(shù)據(jù);以及一個確定單元,用于根據(jù)對差分數(shù)據(jù)已經(jīng)執(zhí)行的DPCM的種類,將差分數(shù)據(jù)輸出給逆循環(huán)DPCM操作器或逆預(yù)測循環(huán)DPCM操作器。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種利用差分數(shù)據(jù)生成量化數(shù)據(jù)的方法。該方法包括(a)識別已經(jīng)對輸入的差分數(shù)據(jù)執(zhí)行的DPCM的種類,(b)對輸入差分數(shù)據(jù)執(zhí)行逆循環(huán)量化操作,以便擴展它們的范圍,以及(c)如果輸入差分數(shù)據(jù)已經(jīng)被執(zhí)行了DPCM操作,則通過對逆循環(huán)量化的差分數(shù)據(jù)執(zhí)行逆循環(huán)DPCM操作來生成量化數(shù)據(jù),而如果輸入差分數(shù)據(jù)已經(jīng)被執(zhí)行了預(yù)測DPCM操作,則通過對逆循環(huán)量化的差分數(shù)據(jù)執(zhí)行逆預(yù)測循環(huán)DPCM操作來生成量化數(shù)據(jù)。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對數(shù)據(jù)進行編碼的裝置。所述裝置包括一個量化器,用于將輸入給它的數(shù)據(jù)量化為預(yù)定的量化比特;一個DPCM操作器,用于通過對量化數(shù)據(jù)執(zhí)行DPCM操作生成差分數(shù)據(jù);一個熵編碼器,用于對從DPCM操作器輸入給它的差分數(shù)據(jù)執(zhí)行熵編碼,并將經(jīng)過熵編碼的差分數(shù)據(jù)輸出為比特流;一個量化誤差極小化器,用于接收輸入數(shù)據(jù)和量化數(shù)據(jù),調(diào)節(jié)輸入數(shù)據(jù)中的最大和最小值,從而使量化誤差最小并且輸出最大和最小值;以及一個標題編碼器,用于對將被包括在比特流中的最大和最小值進行編碼。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對數(shù)據(jù)進行編碼的方法。該方法包括(a)利用預(yù)定的量化比特,量化輸入數(shù)據(jù);(b)通過對量化數(shù)據(jù)執(zhí)行DPCM操作,生成差分數(shù)據(jù);(c)通過對在步驟(b)中生成的差分數(shù)據(jù)進行熵編碼,生成比特流;(d)利用輸入數(shù)據(jù)和量化數(shù)據(jù)調(diào)節(jié)在輸入數(shù)據(jù)中的最大和最小值,從而使量化誤差最??;以及(e)對將被包括在比特流中的最大和最小值進行編碼。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對具有多個分量的數(shù)據(jù)進行編碼的裝置。該裝置包括一個規(guī)范器,用于計算分量的數(shù)據(jù)范圍中的最大范圍,并根據(jù)該最大范圍,規(guī)范每個分量的數(shù)據(jù);一個量化器,用于用預(yù)定的量化比特,對經(jīng)過規(guī)范的數(shù)據(jù)進行量化;一個DPCM操作器,用于對量化數(shù)據(jù)執(zhí)行DPCM操作,然后輸出差分數(shù)據(jù);和一個熵編碼器,用于對差分數(shù)據(jù)執(zhí)行熵編碼,并輸出差分數(shù)據(jù)已經(jīng)被編碼進其中的比特流。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對數(shù)據(jù)進行編碼的方法,該方法用于對具有多個分量的數(shù)據(jù)進行編碼。該方法包括(a)計算分量的數(shù)據(jù)范圍當(dāng)中的最大范圍,并根據(jù)該最大范圍規(guī)范每個分量的數(shù)據(jù);(b)利用預(yù)定的量化比特,量化經(jīng)過規(guī)范的數(shù)據(jù);(c)通過對量化數(shù)據(jù)執(zhí)行DPCM操作生成差分數(shù)據(jù);以及(d)通過對差分數(shù)據(jù)執(zhí)行熵編碼,生成數(shù)據(jù)已經(jīng)被編碼進其中的比特流。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對數(shù)據(jù)進行譯碼的裝置,該裝置對將具有多個分量的數(shù)據(jù)編碼進其中的比特流進行譯碼。該裝置包括一個熵譯碼器,用于對輸入給它的比特流進行熵譯碼并輸出差分數(shù)據(jù);一個逆DPCM操作器,用于對差分數(shù)據(jù)執(zhí)行逆DPCM操作并輸出量化數(shù)據(jù);一個逆量化器,用于對量化數(shù)據(jù)執(zhí)行逆量化并輸出規(guī)范數(shù)據(jù);以及一個逆規(guī)范器,用于從比特流中接收每個分量數(shù)據(jù)當(dāng)中的最小值以及每個分量數(shù)據(jù)當(dāng)中的最大值,得到規(guī)范數(shù)據(jù)的最大范圍,并根據(jù)該最大范圍和最小值,對規(guī)范數(shù)據(jù)進行逆規(guī)范。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對數(shù)據(jù)進行譯碼的方法,該方法對將具有多個分量的數(shù)據(jù)編碼進其中的比特流進行譯碼。該方法包括(a)通過對輸入比特流執(zhí)行熵譯碼,生成差分數(shù)據(jù);(b)通過對差分數(shù)據(jù)執(zhí)行逆DPCM操作,生成量化數(shù)據(jù);(c)通過對量化數(shù)據(jù)執(zhí)行逆量化,生成規(guī)范數(shù)據(jù);以及(d)利用從比特流中譯碼的每個分量數(shù)據(jù)當(dāng)中的最小值和每個分量數(shù)據(jù)當(dāng)中的最大值,得到規(guī)范數(shù)據(jù)的最大范圍,并根據(jù)最大范圍和最小值,對規(guī)范數(shù)據(jù)執(zhí)行逆規(guī)范。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對數(shù)據(jù)進行編碼的裝置,該裝置用于對表示具有x、y和z分量的目標的位置的位置內(nèi)插器的密鑰值數(shù)據(jù)進行編碼。所述裝置包括一個規(guī)范器,用于計算分量的數(shù)據(jù)范圍當(dāng)中的最大范圍,根據(jù)該最大范圍,規(guī)范x、y和z分量中的每個分量的密鑰值數(shù)據(jù)并輸出規(guī)范的密鑰值數(shù)據(jù);一個量化器,用于利用預(yù)定的量化比特,量化規(guī)范的密鑰值數(shù)據(jù);一個浮點數(shù)編碼器,用于接收在規(guī)范操作中使用的最小值和最大范圍并將輸入值轉(zhuǎn)換成十進制數(shù);一個DPCM處理器,用于獲得量化密鑰值數(shù)據(jù)的差分數(shù)據(jù)和預(yù)測差分數(shù)據(jù),并對差分數(shù)據(jù)和預(yù)測差分數(shù)據(jù)執(zhí)行循環(huán)量化操作,從而減少它們的范圍;一個熵編碼器,用于對差分數(shù)據(jù)執(zhí)行熵編碼,并輸出將密鑰值數(shù)據(jù)編碼進其中的比特流;以及一個密鑰值標題編碼器,用于對對比特流進行譯碼所需的、將被包括在比特流中的信息進行編碼。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對數(shù)據(jù)進行編碼的方法,該方法用于對表示具有x、y和z分量的目標的位置的位置內(nèi)插器的密鑰值數(shù)據(jù)進行編碼。。所述方法包括(a)計算分量的數(shù)據(jù)范圍當(dāng)中的一個最大范圍,根據(jù)該最大范圍,規(guī)范x、y和z分量中的每個分量的密鑰值數(shù)據(jù),然后生成規(guī)范的密鑰值數(shù)據(jù);(b)利用預(yù)定的量化比特,量化規(guī)范的密鑰值數(shù)據(jù);(c)將在規(guī)范操作中使用的最小值和最大范圍轉(zhuǎn)換成十進制數(shù);(d)獲得量化密鑰值數(shù)據(jù)的差分數(shù)據(jù)和預(yù)測差分數(shù)據(jù),并對差分數(shù)據(jù)和預(yù)測差分數(shù)據(jù)執(zhí)行循環(huán)量化操作,從而減少它們的范圍;(e)通過對差分數(shù)據(jù)執(zhí)行熵編碼,生成將密鑰值數(shù)據(jù)編碼進其中的比特流;以及(f)對對比特流進行譯碼所需的、將被包括在比特流中的信息進行編碼。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對數(shù)據(jù)進行譯碼的裝置,該裝置用于對將用x、y和z分量表示目標的位置的位置內(nèi)插器的密鑰值數(shù)據(jù)編碼進其中的比特流進行譯碼。該裝置包括一個密鑰值標題譯碼器,用于對來自比特流的、譯碼所需的信息進行譯碼;一個熵譯碼器,用于對比特流進行熵譯碼并輸出差分數(shù)據(jù);一個逆DPCM處理器,用于根據(jù)對差分數(shù)據(jù)執(zhí)行的DPCM的類型,對差分數(shù)據(jù)執(zhí)行逆循環(huán)DPCM操作或逆預(yù)測循環(huán)DPCM操作,并由此輸出量化的密鑰值數(shù)據(jù);一個逆量化器,用于對量化的密鑰值數(shù)據(jù)進行逆量化并輸出規(guī)范的密鑰值數(shù)據(jù);一個浮點數(shù)譯碼器,用于從密鑰值標題譯碼器中接收x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和x、y和z分量的數(shù)據(jù)范圍當(dāng)中的最大范圍,將最小值和最大范圍轉(zhuǎn)換成二進制數(shù),并將該二進制數(shù)輸出給逆規(guī)范器;以及一個逆規(guī)范器,用于從浮點數(shù)譯碼器中接收x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和x、y和z分量的數(shù)據(jù)范圍當(dāng)中的最大范圍,并對x、y和z分量的密鑰值數(shù)據(jù)進行逆規(guī)范。
為了實現(xiàn)本發(fā)明的上述和其他方面,提供了一種用于對數(shù)據(jù)進行譯碼的方法,該方法用于對將用x、y和z分量表示目標的位置的位置內(nèi)插器的密鑰值數(shù)據(jù)編碼進其中的比特流進行譯碼。所述方法包括(a)對來自比特流的、進行譯碼所需的標題信息進行譯碼;(b)通過對比特流進行熵譯碼生成差分數(shù)據(jù);(c)通過根據(jù)對差分數(shù)據(jù)執(zhí)行的DPCM的類型,對差分數(shù)據(jù)執(zhí)行逆循環(huán)DPCM操作或逆預(yù)測循環(huán)DPCM操作,生成量化的密鑰值數(shù)據(jù);(d)將已經(jīng)在步驟(a)中譯碼的、x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和x、y和z分量的數(shù)據(jù)范圍當(dāng)中的最大范圍轉(zhuǎn)換成二進制數(shù),并將x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和x、y和z分量的所有密鑰值數(shù)據(jù)當(dāng)中的最大值轉(zhuǎn)換成二進制數(shù);(e)通過根據(jù)預(yù)定的量化比特,對量化的密鑰值數(shù)據(jù)執(zhí)行逆量化,生成規(guī)范的密鑰值數(shù)據(jù);以及(f)根據(jù)已經(jīng)在步驟(d)中被轉(zhuǎn)換的、x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和x、y和z分量的數(shù)據(jù)范圍當(dāng)中的最大范圍,對密鑰值數(shù)據(jù)進行逆規(guī)范。
通過結(jié)合附圖對本發(fā)明的優(yōu)選實施例進行詳細描述,本發(fā)明的上述目的和優(yōu)點將變得更加清楚,其中圖1的框圖示出了用于對數(shù)據(jù)進行編碼的常規(guī)裝置和用于對數(shù)據(jù)進行譯碼的常規(guī)裝置的結(jié)構(gòu);
圖2A的框圖示出了按照本發(fā)明的優(yōu)選實施例的、用于執(zhí)行DPCM操作的裝置,并且圖2B示出了按照本發(fā)明的優(yōu)選實施例的DPCM操作的流程圖;圖3A的框圖示出了按照本發(fā)明的優(yōu)選實施例的、用于利用DPCM操作器對數(shù)據(jù)進行編碼的裝置,并且圖3B示出了圖3A所示的、用于對數(shù)據(jù)進行編碼裝置的操作流程圖;圖4A的框圖示出了按照本發(fā)明的優(yōu)選實施例的、用于對數(shù)據(jù)進行編碼的裝置,該裝置能夠使量化誤差最小。圖4B示出了使量化誤差最小的方法的流程圖;圖5A的框圖示出了按照本發(fā)明的優(yōu)選實施例的、用于對數(shù)據(jù)進行編碼的裝置,該裝置對具有多個分量的輸入數(shù)據(jù)進行規(guī)范,然后對規(guī)范的數(shù)據(jù)進行編碼,并且圖5B示出了對數(shù)據(jù)進行規(guī)范的方法的流程圖;圖6A的框圖示出了按照本發(fā)明的優(yōu)選實施例的、用于對數(shù)據(jù)進行編碼的裝置,該裝置用于對位置內(nèi)插器的密鑰值數(shù)據(jù)進行編碼,并且圖6B示出了用于對密鑰值數(shù)據(jù)進行編碼的方法的流程圖;圖7A和7B示出了圖6A所示的浮點數(shù)編碼器的操作流程圖;圖7C和7D示出了按照本發(fā)明的優(yōu)選實施例的熵譯碼器的操作流程圖;圖8示出了圖7C中所示的步驟S683;圖9A和9B示出了圖7D中所示的步驟;圖10A的框圖示出了按照本發(fā)明的優(yōu)選實施例的逆DPCM操作器;并且圖10B示出了逆DPCM操作的流程圖;圖11的框圖示出了按照本發(fā)明的優(yōu)選實施例的、用于利用逆DPCM操作器對數(shù)據(jù)進行譯碼的裝置;圖12A的框圖示出了按照本發(fā)明的優(yōu)選實施例的、用于利用逆規(guī)范器對數(shù)據(jù)進行譯碼的裝置,并且圖12B示出了逆規(guī)范器的操作流程圖;圖13A的框圖示出了按照本發(fā)明的優(yōu)選實施例的、用于對密鑰值數(shù)據(jù)進行譯碼的裝置,和圖13B示出了用于對密鑰值數(shù)據(jù)進行譯碼的方法的流程圖;圖14A示出了圖13B中所示的步驟S1320的詳細流程圖;圖14B示出了圖14A中所示的步驟S1330的詳細流程圖;
圖14C示出了圖13B中所示的步驟S1380的詳細流程圖;圖15示出了按照本發(fā)明的優(yōu)選實施例的、被輸入給熵譯碼器的比特流的分量順序;圖16A和16B示出了按照本發(fā)明的優(yōu)選實施例的預(yù)測DPCM操作的結(jié)果;圖17A到17C示出了按照本發(fā)明的優(yōu)選實施例的循環(huán)DPCM操作的結(jié)果;圖18A和18B示出了位置內(nèi)插器的密鑰和密鑰值數(shù)據(jù);以及圖19到27示出了程序代碼的例子,通過這些程序代碼,可以實現(xiàn)在按照本發(fā)明的優(yōu)選實施例的、用于對數(shù)據(jù)進行譯碼的方法中的讀取比特流的過程。
具體實施例方式
下面將結(jié)合附圖更充分地描述本發(fā)明。
圖2A的框圖示出了按照本發(fā)明的優(yōu)選實施例的、用于執(zhí)行DPCM操作的裝置,并且圖2B示出了按照本發(fā)明的優(yōu)選實施例的DPCM操作的流程圖。
參照圖2A,按照本發(fā)明的優(yōu)選實施例的、用于執(zhí)行DPCM操作的裝置包括一個循環(huán)DPCM操作器200,它包括用于執(zhí)行一般DPCM操作、然后輸出差分數(shù)據(jù)的DPCM操作器210和對輸入給它的差分數(shù)據(jù)執(zhí)行循環(huán)量化操作以便減少它們的范圍的循環(huán)量化操作器220;一個預(yù)測循環(huán)DPCM操作器230,它包括用于對輸入給它的量化數(shù)據(jù)執(zhí)行預(yù)測DPCM操作、然后輸出預(yù)測差分數(shù)據(jù)的預(yù)測DPCM操作器和用于對輸入給它的差分數(shù)據(jù)執(zhí)行循環(huán)量化操作以便減少它們的范圍的循環(huán)量化器250;以及一個選擇器260,用于根據(jù)輸入給它差分數(shù)據(jù)的值,在從循環(huán)DPCM操作器200輸入的差分數(shù)據(jù)和從預(yù)測循環(huán)DPCM操作器230輸入的差分數(shù)據(jù)之間選擇一個差分數(shù)據(jù)。
下面將參照圖2B,描述按照本發(fā)明的優(yōu)選實施例的DPCM操作。
在步驟S210中,被按照任何一種量化方法進行量化的數(shù)據(jù)被輸入給循環(huán)DPCM操作器200和預(yù)測循環(huán)DPCM操作器230。
在循環(huán)DPCM操作器200中,DPCM操作器210通過對輸入給它的量化數(shù)據(jù)執(zhí)行一般的DPCM操作,生成差分數(shù)據(jù),并將所生成的差分數(shù)據(jù)輸出給循環(huán)量化器220。然后,循環(huán)量化器220在步驟S220a中對從DPCM操作器210輸入的差分數(shù)據(jù)執(zhí)行循環(huán)量化。
具體來說,DPCM操作器210通過從在步驟S210中輸入的當(dāng)前量化數(shù)據(jù)中減去在前量化數(shù)據(jù),計算的差分數(shù)據(jù)。此后,循環(huán)量化器220對所計算的差分數(shù)據(jù)執(zhí)行循環(huán)量化。循環(huán)DPCM操作器200的操作由下述等式表示。
p^i=CircularQuantization(p~i-p~i)(i=1,2,...,n)---(1)]]>在等式(1)中,n表示數(shù)據(jù)的數(shù)量。隨后將描述循環(huán)量化。
在預(yù)測循環(huán)DPCM操作器230中的預(yù)測DPCM操作器240通過對輸入給它的差分數(shù)據(jù)執(zhí)行預(yù)測DPCM操作計算預(yù)測差分數(shù)據(jù),然后,循環(huán)量化器250在步驟S220b中對預(yù)測差分數(shù)據(jù)執(zhí)行循環(huán)量化。
具體來說,預(yù)測DPCM操作器240通過從當(dāng)前的量化數(shù)據(jù)中減去預(yù)測數(shù)據(jù),生成預(yù)測的差分數(shù)據(jù)并將其輸出。為了獲得用于當(dāng)前量化數(shù)據(jù)的預(yù)測數(shù)據(jù),通過從在前的量化數(shù)據(jù)中減去在在前的量化數(shù)據(jù)之前的量化數(shù)據(jù)獲得差分值,然后將該差分值加到在前的差分數(shù)據(jù)上,從而計算用于當(dāng)前數(shù)據(jù)的預(yù)測數(shù)據(jù)。
由預(yù)測DPCM操作器240計算的預(yù)測數(shù)據(jù)不可以超過輸入給它的量化數(shù)據(jù)的最大范圍。換言之,如果預(yù)測數(shù)據(jù)超過輸入量化數(shù)據(jù)的量化范圍中的最大值,那么,預(yù)測DPCM操作器240將把該預(yù)測數(shù)據(jù)設(shè)置成輸入量化數(shù)據(jù)的量化范圍中的最大值并通過從該預(yù)測數(shù)據(jù)中減去當(dāng)前數(shù)據(jù),生成用于當(dāng)前數(shù)據(jù)的差分數(shù)據(jù)。如果預(yù)測數(shù)據(jù)小于在輸入數(shù)據(jù)的量化范圍中的最小值,那么,預(yù)測DPCM操作器240將當(dāng)前數(shù)據(jù)確定為預(yù)測差分數(shù)據(jù)。此后,預(yù)測DPCM操作器240的操作將被稱為“經(jīng)過修改的預(yù)測DPCM操作”。
由預(yù)測DPCM操作器230計算的預(yù)測差分數(shù)據(jù)被輸入給循環(huán)量化器250,并被執(zhí)行循環(huán)量化操作。
預(yù)測循環(huán)DPCM操作器230的操作可以由下述等式表示。
p~^=(2nQuantBit-1)-p~i]]>(如果2×p~i-1-p~i-2>2nQuantBit-1]]>)…(2)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)]]>在等式(2)中,i是一個位于2和n-1之間的整數(shù),n表示數(shù)據(jù)的數(shù)量。
圖16A示出了對50個具有最大值為1024和最小值為0的量化數(shù)據(jù)執(zhí)行簡單預(yù)測DPCM操作的結(jié)果,并且圖16B示出了對與圖16A的情況的數(shù)據(jù)相同的數(shù)據(jù)執(zhí)行經(jīng)過修改的預(yù)測DPCM操作的結(jié)果,從而,在用于數(shù)據(jù)的預(yù)測數(shù)據(jù)超過數(shù)據(jù)當(dāng)中的最大值或低于數(shù)據(jù)當(dāng)中的最小值的情況下,將用于數(shù)據(jù)的差分數(shù)據(jù)按照等式(2)進行調(diào)節(jié)。
作為簡單預(yù)測DPCM操作的結(jié)果,預(yù)測差分數(shù)據(jù)具有大約3,000寬的范圍,如圖16A所示。作為經(jīng)過修改的預(yù)測DPCM操作的結(jié)果,預(yù)測差分數(shù)據(jù)具有不大于2,000的窄范圍,如圖16B所示。這意味著在經(jīng)過修改的預(yù)測DPCM操作中比在簡單預(yù)測DPCM操作中更容易獲得具有較窄范圍的預(yù)測差分數(shù)據(jù)。
下面將描述循環(huán)量化。
圖17A示出了量化數(shù)據(jù),并且圖17B示出了對圖17A中所示的量化數(shù)據(jù)執(zhí)行DPCM操作的結(jié)果。如圖17B所示,在DPCM操作之后的差分數(shù)據(jù)的范圍可以增加到執(zhí)行DPCM操作之前的兩倍寬。因此,可以說,使用循環(huán)量化操作可以使得在將被執(zhí)行DPCM操作的差分數(shù)據(jù)的范圍保持在輸入數(shù)據(jù)的范圍以內(nèi)的同時,執(zhí)行DPCM操作。
在假設(shè)量化范圍內(nèi)的最大值和最小值彼此循環(huán)連接的基礎(chǔ)上,執(zhí)行循環(huán)量化操作。因此,如果作為對兩個連續(xù)的量化數(shù)據(jù)執(zhí)行線性DPCM的結(jié)果的差分數(shù)據(jù)大于量化范圍中的最大值的一半,則可以通過從差分數(shù)據(jù)的每一個當(dāng)中減去最大值來減小它們的值。
如果差分數(shù)據(jù)小于量化范圍中的最小值的一半,則通過將量化范圍中的最大值加到差分數(shù)據(jù)的每一個上,可以進一步減小它們的值。
假定X和 分別表示輸入差分數(shù)據(jù)和循環(huán)量化的差分數(shù)據(jù),則循環(huán)量化可以由下列等式表示。
CircularQuantization(Xi)=X^i=Min(|Xi|,|Xi′|)---(3)]]>X′i=Xi-(2nQBits-1) (如果X≥0)
X′i=Xi+(2nOBits-1)(否則)在等式(3)中,nQBits表示用于量化的比特尺寸。圖17C示出了對圖17B所示的差分數(shù)據(jù)執(zhí)行循環(huán)量化的結(jié)果。
再次參照圖2B,循環(huán)量化的差分數(shù)據(jù)和循環(huán)量化的預(yù)測差分數(shù)據(jù)被輸出給選擇器260,然后,選擇器260在步驟S230中對輸入的差分數(shù)據(jù)執(zhí)行差分絕對值求和(SAD)操作。這里,執(zhí)行SAD操作從而使輸入數(shù)據(jù)的絕對值都被相加。在步驟S230中,選擇器將所有循環(huán)量化的差分數(shù)據(jù)的絕對值相加并將所有循環(huán)量化的預(yù)測差分數(shù)據(jù)的絕對值相加。
此后,選擇器260將量化的差分數(shù)據(jù)的絕對值之和與預(yù)測的差分數(shù)據(jù)的絕對值之和進行比較,從量化的差分數(shù)據(jù)和預(yù)測的差分數(shù)據(jù)之間選擇具有較小絕對值和的差分數(shù)據(jù)并在步驟S240中輸出所選擇的差分數(shù)據(jù)。選擇器260選擇具有較小絕對值和的差分數(shù)據(jù)的原因在于按照推測它們具有較窄范圍的值。例如,在對預(yù)測差分數(shù)據(jù)進行熵編碼的過程中,可以期望對具有較小絕對值和的差分數(shù)據(jù)進行編碼所需的比特數(shù)少于對具有較大絕對值和的差分數(shù)據(jù)進行編碼所需的比特數(shù)。
對于本領(lǐng)域內(nèi)普通技術(shù)人員來講很明顯,SAD操作只不過是多種用于選擇某組差分數(shù)據(jù)的方法中的一種,由此,選擇器260可以采用不同的方法選擇差分數(shù)據(jù)。
圖3A的框圖示出了按照本發(fā)明的第一實施例的、用于對數(shù)據(jù)進行編碼的裝置,和圖3B示出了按照本發(fā)明的第一實施例的、用于對數(shù)據(jù)進行編碼的裝置的操作的流程圖。按照本發(fā)明的第一實施例的、用于對數(shù)據(jù)進行編碼的裝置包括前述的本發(fā)明的DPCM操作器。
圖3A所示的用于對數(shù)據(jù)進行編碼的裝置包括一個量化器310,用于利用預(yù)定的量化比特對輸入數(shù)據(jù)進行量化;一個DPCM處理器340,用于對量化數(shù)據(jù)執(zhí)行循環(huán)DPCM操作和預(yù)測DPCM操作、然后輸出差分數(shù)據(jù);以及一個熵編碼器350,用于對從DPCM處理器340輸入的差分數(shù)據(jù)執(zhí)行預(yù)定的熵編碼操作,然后輸出比特流。DPCM處理器340包括前述的本發(fā)明的DPCM操作器。
參照圖3A和3B,在步驟S310中,要被編碼的數(shù)據(jù)被輸入給用于對數(shù)據(jù)進行編碼的裝置,并在步驟S320中,被在量化器310中利用預(yù)定數(shù)量的量化比特進行量化并且被輸出給DPCM處理器340。
在DPCM處理器340中的循環(huán)DPCM操作器200對從量化器310輸入的量化數(shù)據(jù)執(zhí)行DPCM操作和循環(huán)量化操作,然后將結(jié)果輸出到選擇器260。另外,所述預(yù)測循環(huán)DPCM操作器在步驟S330中對從量化器310輸入的量化數(shù)據(jù)執(zhí)行預(yù)測DPCM操作和循環(huán)量化。
選擇器260對從循環(huán)DPCM操作器200輸入的差分數(shù)據(jù)和從預(yù)測循環(huán)DPCM操作器230輸入的差分數(shù)據(jù)執(zhí)行SAD操作,選擇將被輸出給熵譯碼器350的差分數(shù)據(jù),并在步驟S340中將所選擇的差分數(shù)據(jù)輸出。
熵編碼器350對從選擇器260輸入的差分數(shù)據(jù)執(zhí)行預(yù)定的熵編碼操作,從而對它們進行熵編碼并在步驟S350中生成比特流。
圖4A的框圖示出了按照本發(fā)明第二實施例用于對數(shù)據(jù)進行編碼的裝置,和圖4B的流程圖示出了圖4A所示量化誤差最小化器的操作。
按照本發(fā)明第二實施例用于對數(shù)據(jù)進行編碼的裝置包括用于使一個比特流中的量化誤差最小化的最大值和最小值,并對該比特流進行編碼從而當(dāng)對對數(shù)據(jù)進行編碼進行譯碼時使所述量化誤差可以被最小化。
參照圖4A,按照本發(fā)明優(yōu)選實施例的、用于對數(shù)據(jù)進行編碼的裝置包括量化器310、DPCM操作器110/340、熵編碼器350、量化誤差最小化器320以及標題編碼器370,其中,量化誤差最小化器320用于接收數(shù)據(jù)和量化數(shù)據(jù),調(diào)節(jié)數(shù)據(jù)中的最大值和最小值以便能夠使量化誤差最小,并且輸出經(jīng)過調(diào)節(jié)的最大和最小值,標題編碼器370用于將從量化誤差最小化器320輸入的最大值和最小值編碼成標題信息,并且使該信息包括在比特流中。
量化誤差最小化器32O包括一個初始值設(shè)置單元321,用于設(shè)置最小誤差值emin、經(jīng)過調(diào)節(jié)的最小值min’以及量化誤差最小值minmin;一個經(jīng)過調(diào)節(jié)的最小值更新單元323,用于通過執(zhí)行一個預(yù)定的操作更新經(jīng)過調(diào)節(jié)的最小值min’;一個確定單元325,用于根據(jù)經(jīng)過更新和調(diào)節(jié)的最小值的數(shù)字數(shù)和值,將量化誤差最小值minmin確定為將被用于逆量化的最小值;一個誤差值更新單元327,用于利用經(jīng)過更新和調(diào)節(jié)的最小值,計算量化誤差值,如果所計算的誤差值小于最小誤差值emin,將經(jīng)過調(diào)節(jié)的最小值min’和所計算的誤差值分別更新成量化誤差最小值minmin和最小誤差值emin,并將更新的結(jié)果輸出給經(jīng)過調(diào)節(jié)的最小值更新單元323。
量化誤差最小化器320通過對輸入數(shù)據(jù)執(zhí)行量化和逆量化來控制量化范圍,以便使量化誤差最小。
具體地說,當(dāng)Max表示將被用于量化的固定最大值、Min表示將被用于量化的經(jīng)過調(diào)節(jié)的最小值、Xi表示輸入值、和nQuanBit表示用于量化的比特數(shù),則利用等式(4)對量化輸入值 逆量化值 以及誤差ei進行計算。
x~i=floor(Xi-MinMax-Min)*(2nQuantBit-1)+0.5---(4)]]>x^i=X~i*(Max-Min)2nQuantBit-1+Min]]>ei=Xi-X^i]]>為了減少誤差和∑ei,量化誤差最小化器320控制Min,從而能夠使誤差和∑ei最小并使用能夠使在對數(shù)據(jù)進行譯碼的過程中的量化誤差最小的最小值,對量化數(shù)據(jù)進行譯碼。
量化器310、DPCM操作器110/340及熵編碼器350和用于對數(shù)據(jù)進行編碼的前述裝置的對應(yīng)元件幾乎相同,因此這里不再重復(fù)。下面結(jié)合圖4B更充分地描述量化誤差最小化器320的操作。
初始值設(shè)置單元321在步驟S402中接收與輸入給量化器310的數(shù)據(jù)相同的數(shù)據(jù)以及從量化器310輸出的量化數(shù)據(jù)。
初始值設(shè)置單元321從輸入數(shù)據(jù)當(dāng)中獲得最大值max和最小值min并計算最小值min的數(shù)字數(shù)。接著,初始值設(shè)置單元321在步驟S404中通過利用最大值max和最小值min對量化數(shù)據(jù)進行逆量化來計算量化誤差e并將該量化誤差e設(shè)置為初始最小誤差值emin。
初始值設(shè)置單元321從輸入數(shù)據(jù)當(dāng)中的最小值中減去將量化步長QuantSpace除以2所得到的結(jié)果并將該減法結(jié)果設(shè)置為初始調(diào)節(jié)的最小值min’。然后,初始值設(shè)置單元321將所述初始調(diào)節(jié)的最小值min’設(shè)置為量化誤差最小值mmin并在步驟S406中將經(jīng)過調(diào)節(jié)的最小值min’輸出給經(jīng)過調(diào)節(jié)的最小值更新單元323。
經(jīng)過調(diào)節(jié)的最小值更新單元323通過執(zhí)行預(yù)定的操作,更新從初始值設(shè)置單元321輸入的經(jīng)過調(diào)節(jié)的最小值min’。按照本發(fā)明的優(yōu)選實施例,經(jīng)過調(diào)節(jié)的最小值更新單元323按照等式(5)更新從初始值設(shè)置單元321輸入的經(jīng)過調(diào)節(jié)的最小值min’并在步驟S408中將經(jīng)過更新和調(diào)節(jié)的最小值min’輸出給確定單元325。
min′=Mantissa(min′)+110Exponent(min′)---(5)]]>在步驟S410中,確定單元325計算經(jīng)過更新和調(diào)節(jié)的最小值min’的數(shù)字數(shù),將該計算的結(jié)果與由初始值設(shè)置單元321計算的輸入數(shù)據(jù)當(dāng)中的最小值min的數(shù)字數(shù)進行比較,并將經(jīng)過更新和調(diào)節(jié)的最小值min’與將輸入數(shù)據(jù)當(dāng)中的最小值min加到將量化比特尺寸QuantSpace除以2所得結(jié)果上的結(jié)果進行比較。
如果經(jīng)過更新和調(diào)節(jié)的最小值min’的數(shù)字數(shù)大于輸入數(shù)據(jù)當(dāng)中的最小值min的數(shù)字數(shù),或者如果經(jīng)過更新和調(diào)節(jié)的最小值min’大于 則確定單元325將當(dāng)前所存儲的量化誤差最小值minmin確定為將被用于逆量化的最小值,并將該量化誤差最小值minmin輸出給輸出單元329。如果經(jīng)過更新和調(diào)節(jié)的最小值min’的數(shù)字數(shù)不大于輸入數(shù)據(jù)當(dāng)中的最小值min的數(shù)字數(shù)并且經(jīng)過更新和調(diào)節(jié)的的最小值min’不大于 則確定單元325將經(jīng)過更新和調(diào)節(jié)的最小值min’輸出給誤差值更新單元327。
在步驟S414中,誤差值更新單元327利用經(jīng)過更新和調(diào)節(jié)的最小值min’和由初始值設(shè)置單元321獲得最大值max對量化數(shù)據(jù)進行逆量化,并計算量化誤差e。
在步驟S446中,誤差值更新單元327將新計算的誤差值e與最小誤差值emin進行比較。作為比較結(jié)果,如果新計算的誤差值e小于最小誤差值emin,則在步驟S418中,誤差值更新單元327利用新計算的誤差值e更新最小誤差值emin,并利用經(jīng)過更新和調(diào)節(jié)的最小值min’更新量化誤差最小值minmin。另一方面,如果新計算的誤差值e大于最小誤差值emin,則誤差值更新單元327將再次執(zhí)行步驟S408而不對最小誤差值emin和量化誤差最小值minmin進行更新。
經(jīng)過上述處理獲得的用于使量化誤差最小的最大和最小值被輸出給標題編碼器370并被編碼為標題信息。然后,該標題信息被包括在由熵編碼器350生成的比特流中。
圖5A的框圖示出了按照本發(fā)明第三實施例的、用于對數(shù)據(jù)進行編碼的裝置,圖5B的示出了圖5A所示規(guī)范器的操作流程圖。按照本發(fā)明第三實施例的、用于對數(shù)據(jù)進行編碼的裝置通過對具有多個分量的輸入數(shù)據(jù)進行規(guī)范,提高了對數(shù)據(jù)進行編碼的效率。
如圖5A所示,按照本發(fā)明第三實施例的、用于對數(shù)據(jù)進行編碼的裝置包括規(guī)范器300,用于計算輸入給用于對數(shù)據(jù)進行編碼的裝置的分量的數(shù)據(jù)范圍當(dāng)中的最大范圍,并根據(jù)該最大范圍對x、y和z分量中每個分量的數(shù)據(jù)進行規(guī)范;量化器310,用于利用預(yù)定數(shù)量的量化比特對經(jīng)過規(guī)范的數(shù)據(jù)進行量化;DPCM操作器110/340,用于對量化數(shù)據(jù)執(zhí)行DPCM操作并輸出差分數(shù)據(jù);以及熵編碼器350,用于對差分數(shù)據(jù)進行熵編碼并輸出經(jīng)過編碼的比特流。
量化器310、DPCM操作器110/340及熵編碼器350和按照本發(fā)明第一實施例的、用于對數(shù)據(jù)進行編碼的裝置的對應(yīng)元件相同,因此關(guān)于它們的詳細描述這里不再重復(fù)。下面僅僅結(jié)合圖5B描述規(guī)范器300的操作。
在將被編碼的數(shù)據(jù)包括多個分量的情況下,例如,如果輸入數(shù)據(jù)包括表示目標在三維空間中的位置的三個分量x、y和z,則將x、y和z分量中的每一個分量輸入給用于對數(shù)據(jù)進行編碼的裝置的規(guī)范器300。然后,規(guī)范器300計算x、y和z分量的范圍當(dāng)中的最大范圍,并根據(jù)該最大范圍對x、y和z分量中每一個分量的數(shù)據(jù)進行規(guī)范。
在步驟S512中,規(guī)范器300接收每個分量的數(shù)據(jù)并按照等式(6)計算x、y和z分量的數(shù)據(jù)范圍。然后,在步驟S514中,規(guī)范器300通過比較,計算x、y和z分量的數(shù)據(jù)范圍當(dāng)中的最大范圍。
Maxj=Maxi=0n(p‾ij)---(6)]]>Minj=Mini=0n(p‾ij)]]>Rangemax=Max(Maxx-Minx,Maxy-Miny,Maxz-Minz)此后,在步驟S516中,規(guī)范器300利用下述等式x、y和z分量中的每一個分量的數(shù)據(jù)進行規(guī)范。
在等式(6)和(7)中,n表示數(shù)據(jù)的數(shù)量,i=0,1,...,n-1,并且j表示x、y和z分量中的每一個分量。如等式(7)所示,使用它們數(shù)據(jù)范圍當(dāng)中的最大范圍Rangemax對x、y和z分量進行規(guī)范。作為這種規(guī)范的結(jié)果,有關(guān)不具有最大范圍Rangemax的分量的數(shù)據(jù)的冗余度增加,所以,提高了對數(shù)據(jù)進行編碼的效率。
規(guī)范器300對輸入分量中的每個分量進行規(guī)范,并將規(guī)范的結(jié)果輸出給量化器310,然后,量化器320利用預(yù)定數(shù)量的量化比特,對從規(guī)范器300輸入的規(guī)范數(shù)據(jù)進行量化,并將量化的結(jié)果輸出給DPCM操作器110/340。此后,DPCM操作器110/340通過對從量化器310輸入的量化數(shù)據(jù)執(zhí)行DPCM操作生成差分數(shù)據(jù),并將該差分數(shù)據(jù)輸出給熵編碼器350,從而能夠?qū)λ鼈冞M行編碼。
下面將描述按照本發(fā)明第四實施例的用于對數(shù)據(jù)進行編碼的裝置,在該裝置中集成了本發(fā)明前述的DPCM操作器、用于按照本發(fā)明對數(shù)據(jù)進行編碼的能夠使量化誤差最小的前述裝置以及用于按照本發(fā)明對數(shù)據(jù)進行編碼的能夠?qū)哂卸鄠€分量的數(shù)據(jù)進行編碼的前述裝置。
盡管按照本發(fā)明第四實施例的用于對數(shù)據(jù)進行編碼的裝置被專門描述為對在三維動畫數(shù)據(jù)當(dāng)中的位置內(nèi)插器的密鑰值數(shù)據(jù)進行編碼,但是很明顯,它也可以對其它一般類型的數(shù)據(jù)進行編碼。
位置內(nèi)插器是關(guān)于表示在基于關(guān)鍵幀的動畫中的動畫路徑的信息,基于關(guān)鍵幀的動畫是表示計算機合成3D動畫的基本技術(shù)之一?;陉P(guān)鍵幀的動畫被用于根據(jù)密鑰數(shù)據(jù)出現(xiàn)的時刻,規(guī)定動畫的順序。與密鑰數(shù)據(jù)出現(xiàn)的瞬間相對應(yīng)的幀被稱之為關(guān)鍵幀。
在基于關(guān)鍵幀的動畫中,多個關(guān)鍵幀和在關(guān)鍵幀之間的多個幀構(gòu)成了一個動畫,并且這些幀被內(nèi)插到關(guān)鍵幀之間(或使用內(nèi)插法生成關(guān)鍵幀之間的幀)。
諸如用于景物的MPEG-4二進制格式(BIFS)和虛擬現(xiàn)實造型語言(VRML)等國際多媒體標準,支持使用內(nèi)插器節(jié)點的基于關(guān)鍵幀的動畫。在MPEG-4BIFS和VRML中,有包括標量內(nèi)插器、位置內(nèi)插器、坐標內(nèi)插器、定向內(nèi)插器、標準內(nèi)插器和顏色內(nèi)插器在內(nèi)的各種內(nèi)插器。這些內(nèi)插器和它們的功能以及特征示于表1中。
表1
表1所示的位置內(nèi)插器被用于表示基于關(guān)鍵幀的動畫的位置信息并包括密鑰和密鑰值字段。密鑰字段用范圍在-∞和∞之間的不連續(xù)數(shù)表示每個關(guān)鍵幀在時間軸上的位置。密鑰值字段中的每一個規(guī)定目標在由每個密鑰表示的時刻的位置的信息,并且包括x、y和z三個分量。密鑰值字段中的每一個都包括與密鑰字段中的每一個所具有的密鑰值的數(shù)量相同的密鑰值。
關(guān)于位置內(nèi)插器的例子示于圖18A和18B中。具體地說,圖18A示出了密鑰數(shù)據(jù),圖18B示出了密鑰值數(shù)據(jù)。
在MPEG-4BIFS和VRML中已經(jīng)使用了線性內(nèi)插。但是,為了利用線性內(nèi)插平滑并且自然地表示動畫,需要相當(dāng)大數(shù)量的密鑰數(shù)據(jù)和密鑰值數(shù)據(jù)。另外,為了存儲和傳輸這種動畫,需要具有大容量的存儲器和大量的時間。因此,最好壓縮內(nèi)插器以便存儲和傳輸這些內(nèi)插器。
在MPEG4-BIFS中,使用了對被稱之為預(yù)測MF編碼(PMFC)的內(nèi)插器節(jié)點進行編碼和譯碼的方法。在PMFC方法中,與圖1所示的、用于對數(shù)據(jù)進行編碼的常規(guī)裝置的操作類似,利用量化器、DPCM操作器和熵編碼器對位置內(nèi)插器的密鑰值數(shù)據(jù)進行編碼。量化器和DPCM操作器減少了冗余的密鑰值數(shù)據(jù),DPCM操作器的輸出被輸入給熵編碼器。但是,在PMFC方法中,對由DPCM操作器獲得的差分數(shù)據(jù)進行熵編碼,所以,其編碼效率不夠高。另外,由于熵編碼器所具有的限制,它幾乎不可能提供高質(zhì)量的動畫。
因此,本發(fā)明提供一種用于對密鑰值進行編碼的裝置,在該裝置中集成了按照本發(fā)明的前述DPCM操作器、用于按照本發(fā)明對數(shù)據(jù)進行編碼的能夠使量化誤差最小的前述裝置以及用于按照本發(fā)明對數(shù)據(jù)進行編碼的能夠?qū)哂卸鄠€分量的數(shù)據(jù)進行編碼的前述裝置,由此增加了對密鑰值數(shù)據(jù)進行編碼的效率。
圖6A的框圖示出了按照本發(fā)明第四實施例的、用于對密鑰值數(shù)據(jù)進行編碼的裝置,圖6B為用于對密鑰值數(shù)據(jù)進行編碼的裝置的操作流程圖。
參照圖6A,用于對密鑰值數(shù)據(jù)進行編碼的裝置包括規(guī)范器300,用于根據(jù)x、y和z分量的數(shù)據(jù)范圍當(dāng)中一個最大范圍,對每個分量的輸入密鑰值數(shù)據(jù)進行規(guī)范;量化器310,用于利用預(yù)定的量化比特,對規(guī)范的密鑰值數(shù)據(jù)進行量化;量化誤差最小化器320,用于從規(guī)范器300接收最小值和最大范圍,并調(diào)節(jié)和輸出最大和最小值,以便能夠使量化誤差最??;浮點數(shù)編碼器330,用于從量化誤差最小化器320接收最小值和最大范圍,并將用于使量化誤差最小的最大范圍和最小值轉(zhuǎn)換成十進制數(shù);DPCM處理器340,用于獲得量化密鑰值數(shù)據(jù)的差分數(shù)據(jù)和預(yù)測差分數(shù)據(jù)并執(zhí)行循環(huán)量化操作以便減少差分數(shù)據(jù)的范圍;熵編碼器350,用于對差分數(shù)據(jù)進行熵編碼,然后輸出將密鑰值數(shù)據(jù)編碼進其中的比特流;以及密鑰值標題編碼器360,用于對譯碼比特流所需的信息進行編碼并使該信息能被包括在比特流中。
下面結(jié)合圖6B描述按照本發(fā)明的用于對密鑰值數(shù)據(jù)進行編碼的裝置的操作。
在步驟S600中,x、y和z分量中每一個分量的密鑰值數(shù)據(jù)被輸入給用于對密鑰值數(shù)據(jù)進行編碼的裝置的規(guī)范器300。然后,在步驟S610中,規(guī)范器300計算x、y和z分量的數(shù)據(jù)范圍當(dāng)中的最大范圍,并根據(jù)該最大范圍對所輸入的x、y和z分量的密鑰值數(shù)據(jù)進行規(guī)范。上面已經(jīng)描述了對輸入給規(guī)范器300的密鑰值數(shù)據(jù)進行規(guī)范的處理,這里將不再重復(fù)。
被規(guī)范的x、y和z分量的密鑰值數(shù)據(jù)被輸入給量化器310,然后在步驟S620中,量化器310利用預(yù)定數(shù)量的量化比特nQuanBit,按照等式(8)對規(guī)范的密鑰值數(shù)據(jù)進行。
p~ij=floor(p‾ij×(2nQuantBit-1)+0.5---(8)]]>在等式(8)中,floor()是一個用于將輸入的浮點數(shù)轉(zhuǎn)換成不大于該輸入的浮點數(shù)的最大整數(shù)的函數(shù)。量化器310向DPCM處理器340和量化誤差最小化器320輸出量化的密鑰值數(shù)據(jù)。
在步驟S630中,量化誤差最小化器320從規(guī)范器300接收最小值和最大范圍,利用從規(guī)范器300輸入的最小值和最大范圍計算最小值和最大值,確定一個最小值和一個最大值以便使量化誤差最小化,利用所確定的最小和最大值計算最小值和最大范圍,并且向浮點數(shù)轉(zhuǎn)換器330輸出該最小值和最大范圍,由此將它們編碼成密鑰值標題。這里,由量化誤差最小化器320確定的最小和最大值被用于使量化誤差最小。
下面結(jié)合圖7A描述由浮點數(shù)編碼器330執(zhí)行的步驟S650。
在步驟S651中,浮點數(shù)編碼器330接收x、y和z分量的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值x_min、y_min、z_min、具有最大范圍的分量的最大值max、關(guān)于最大值max屬于哪個分量的信息nWhichAxis以及原始密鑰值數(shù)據(jù)的數(shù)字數(shù)nKeyValueDigit。
為了通過減少編碼所需比特數(shù)來提高對密鑰值數(shù)據(jù)進行編碼的效率,浮點數(shù)編碼器330在步驟S652中將由二進制數(shù)表示的x_min、y_min、z_min和max轉(zhuǎn)換成十進制數(shù)。
計算機以32位二進制數(shù)的形式存儲浮點數(shù)。當(dāng)輸入二進制系統(tǒng)的浮點數(shù)時,浮點數(shù)編碼器330按照等式(9)將該浮點數(shù)轉(zhuǎn)換成十進制系統(tǒng)的尾數(shù)和它的指數(shù)。
例如,十進制系統(tǒng)的浮點數(shù)12.34可以由計算機轉(zhuǎn)換成如下所示的二進制數(shù)。
01100010101110000101000112100000103]]>1正負號2二進制系統(tǒng)中的尾數(shù)3二進制系統(tǒng)中的指數(shù)如下所示,該二進制數(shù)可以按照等式(9)被轉(zhuǎn)換回原始的十進制數(shù)。
011234223]]>1正負號2十進制系統(tǒng)中的尾數(shù)3十進制系統(tǒng)中的指數(shù)為了將十進制系統(tǒng)的尾數(shù)和指數(shù)包括在比特流中,必須計算表示尾數(shù)所需的比特數(shù)和表示指數(shù)所需的比特數(shù)。指數(shù)具有-38和38之間的值,由此可以利用7位和正負號一起來表示指數(shù)。表示尾數(shù)所需的比特數(shù)取決于該尾數(shù)的數(shù)字數(shù)。下表示出了各種范圍的值和表示各種范圍的值的尾數(shù)所需的比特數(shù)。
表2
浮點數(shù)編碼器330在步驟S453中檢查x_min、y_min和z_min的數(shù)字數(shù)是否相同。如果它們不相同,則在步驟S654中輸出給密鑰值標題編碼器360并將它們編碼為密鑰值標題。
如果x_min、y_min和z_min的數(shù)字數(shù)相同,則在步驟S655中,浮點數(shù)編碼器330檢查它們是否與原始密鑰值數(shù)據(jù)的數(shù)字數(shù)相同。如果x_min、y_min和z_min的數(shù)字數(shù)與原始密鑰值數(shù)據(jù)的數(shù)字數(shù)不同,那么,在步驟S656,x_min、y_min和z_min的數(shù)字數(shù)中的一個被輸出給密鑰值標題編碼器360并被編碼為密鑰標題。
此后,浮點數(shù)編碼器330在步驟S657中檢查x、y和z分量的所有密鑰值數(shù)據(jù)當(dāng)中的最大值max是從哪個分量的密鑰值數(shù)據(jù)當(dāng)中選擇的,并確定max的數(shù)字數(shù)是否與得到最大值max的分量的密鑰值數(shù)據(jù)當(dāng)中的最小值的數(shù)字數(shù)相同。
如果max的數(shù)字數(shù)與得到最大值max的分量的密鑰值數(shù)據(jù)當(dāng)中的最小值的數(shù)字數(shù)不同,則max的數(shù)字數(shù)被輸出給密鑰值標題編碼器360并被編碼為一個密鑰值標題。另一方面,如果max的數(shù)字數(shù)與最大值max所屬的分量的密鑰值數(shù)據(jù)當(dāng)中最小值的數(shù)字數(shù)相同,則在步驟S658中,描述它們相同的狀態(tài)信息被輸出給密鑰值標題編碼器360。
浮點數(shù)編碼器330的前述操作是用于對經(jīng)過轉(zhuǎn)換的浮點數(shù)的尾數(shù)進行編碼。下面描述將與浮點數(shù)的指數(shù)相關(guān)的信息編碼成密鑰值標題的處理。
在步驟S659中,浮點數(shù)編碼器330識別在x_min、y_min、z_min以及max的指數(shù)的絕對值當(dāng)中哪一個是最大值,將所識別的最大值存儲為nMaxExp,并將nMaxExp編碼到若干比特的密鑰值標題中。
此后,浮點數(shù)編碼器330在步驟S660中檢查x_min、y_min、z_min以及max的指數(shù)的正負號是否相同。如果它們相同,則在步驟S661中將bSameSignExp設(shè)置為1并將它們的正負號輸出給密鑰值標題編碼器360。另一方面,如果它們不相同,則在步驟S662中將bSameSignExp設(shè)置為0,然后完成對與x_min、y_min、z_min以及max的指數(shù)相關(guān)信息的編碼。
參照圖7B,浮點數(shù)編碼器330在將x_min,y_min,z_min以及max編碼成密鑰值標題之前,在步驟S663中對經(jīng)過轉(zhuǎn)換的浮點數(shù)的正負號進行編碼。
接著,在步驟S664中,浮點數(shù)編碼器330參照表2計算對浮點數(shù)進行編碼所需的比特數(shù),并將具有與計算結(jié)果同樣多比特的浮點數(shù)的尾數(shù)輸出給密鑰值標題編碼器360。
在步驟S665中,浮點數(shù)編碼器330參照表2計算對nMaxExp進行編碼所需的比特數(shù),并將具有與計算結(jié)果同樣多比特的浮點數(shù)的指數(shù)輸出給密鑰值標題編碼器360。
浮點數(shù)編碼器330根據(jù)bSameSignExp檢查x_min、y_min、z_min以及max是否具有相同的正負號。如果它們不具有相同的正負號,則在步驟S667中它們的正負號輸出給密鑰值標題編碼器360并進行編碼,由此,完成對從規(guī)范器300輸入的x、y和z分量中每一個分量的密鑰數(shù)據(jù)當(dāng)中的最大和最小值的編碼處理。
浮點數(shù)編碼器330從量化誤差最小化器320接收使量化誤差最小所需的最大和最小值,并經(jīng)過上述步驟將它們編碼成密鑰標題。
再次參照圖6B,在步驟S670中,DPCM處理器340對量化的密鑰值數(shù)據(jù)執(zhí)行循環(huán)DPCM操作和預(yù)測循環(huán)DPCM操作并向熵編碼器350輸出差分數(shù)據(jù)。DPCM處理器340由前述的DPCM操作器組成,DPCM操作器的操作和結(jié)構(gòu)已經(jīng)在上面進行了描述。DPCM處理器340和前述的DPCM操作器之間的差別僅在于DPCM處理器340分別對x、y和z分量中每個分量的密鑰值數(shù)據(jù)執(zhí)行循環(huán)DPCM操作和預(yù)測循環(huán)DPCM操作。
在步驟S680中,在熵編碼器350中對從DPCM處理器340輸出的差分數(shù)據(jù)進行編碼。
參照圖7C,熵編碼器350對x、y和z分量的每個分量的密鑰值數(shù)據(jù)的差分數(shù)據(jù)進行熵編碼。
熵編碼器350參照x、y和z分量的每個分量的差分數(shù)據(jù),檢查x、y和z分量的量化值是否相同,如果它們相同,則在步驟S681中完成熵編碼。例如,在三維動畫的情況下,一列火車以與x分量方向相同的水平方向運動,x分量的密鑰值數(shù)據(jù)是變化的。但是,y和z分量幾乎不變。因此,如果y和z分量被量化,估計它們將會具有相同的值。因此,不需要對實際上相同的所有密鑰值數(shù)據(jù)進行編碼,由此可以通過僅僅將密鑰值數(shù)據(jù)當(dāng)中的一個編碼成密鑰值標題來提高編碼的效率。
如果x、y和z分量中每一個分量的量化密鑰值數(shù)據(jù)都不同,則在步驟S682中,熵編碼器350讀出已經(jīng)被預(yù)先設(shè)置的預(yù)定值。此后,熵編碼器350在步驟S683中用unary AAC函數(shù)對x、y和z分量中每個分量的量化密鑰值數(shù)據(jù)的差分數(shù)據(jù)進行編碼,或者在步驟S685中用連續(xù)量化AAC函數(shù)對它們進行編碼。
下面結(jié)合圖8描述unary AAC函數(shù)。unary AAC函數(shù)把將被編碼的符號轉(zhuǎn)換成由一系列0、一個用于指示這一系列0結(jié)束的標記位1和一個表示符號的正負號的位組成多個比特。這里,多個0對應(yīng)于符號的幅值。例如,利用unary AAC函數(shù)將256編碼成由256個0、用于指示這一系列0結(jié)束的標記位1和表示256的正負號,即正號,的0組成的一系列比特。由于unary AAC函數(shù),增加了表示將被編碼的符號的比特的冗余度,提高了對符號進行編碼的效率。
下面將參照圖7D、9A和9B描述利用SQ AAC函數(shù)對符號進行編碼的方法。SQ AAC函數(shù)連續(xù)更新量化范圍地對符號進行編碼。
圖9A示出了利用SQ AAC函數(shù)對符號進行編碼的方法。如圖9A所示,將被編碼的輸入符號是1,在編碼范圍中的最小值和最大值分別是0和9。
參照圖9A,在對該符號進行編碼的第一步驟中,將編碼范圍劃分為兩個子域,即上界和下界,然后,檢查將被編碼的符號,即1,是屬于上界還是屬于下界。由于1屬于所述下界,所以,0被編碼并且下界被更新為一個新的編碼范圍。因此,用于第二步驟的新的編碼范圍是從0到4。
在第二步驟中,新的編碼范圍0到4被劃分為兩個子域,即上界和下界,然后,檢查1是屬于上界還是屬于下界。由于1屬于下界,所以,0被編碼,并且將編碼范圍當(dāng)中的最大值更新為作為下界中的最大值的1。因此,用于第三步驟的新編碼范圍是原被用做下界的從0到1。
在第三步驟中,0到1的編碼范圍被劃分為一個上限值和下限值,然后檢查1是否屬于一個上界。由于1等于上限值,所以,1被編碼,然后在對應(yīng)編碼范圍中的最小值被更新為1。因此,一個新的編碼范圍是[1,1],由此,它的最大和最小值彼此相同。當(dāng)在編碼范圍中的最小和最大值相同時,利用SQ AAC函數(shù)的編碼處理完成。
圖7D的流程圖示出了利用SQ AAC函數(shù)對分量的密鑰值數(shù)據(jù)的差分數(shù)據(jù)的編碼處理,按照本發(fā)明,該處理是在的熵編碼器350中執(zhí)行的。
參照圖7D,在步驟S692中,熵編碼器350接收密鑰值數(shù)據(jù)的差分數(shù)據(jù)(下面稱之為符號)、對符號進行熵編碼所需的比特數(shù)nQP、表示將被編碼為比特流的符號的第一下標nStartIndex以及將被編碼的符號的數(shù)量(n)。
熵編碼器350在步驟S694中對符號的正負號進行編碼并將符號轉(zhuǎn)換成正數(shù)。將符號轉(zhuǎn)換成正數(shù)的原因在于在后續(xù)的處理中不允許負數(shù)。
熵編碼器350在步驟S696中識別正數(shù)當(dāng)中的最大值,將該最大值存儲為nMax,并將nMax編碼為與nQP一樣多的比特。
熵編碼器350對將在其中對符號進行編碼的范圍進行初始化,將在編碼范圍內(nèi)的最小值 和最大值 分別設(shè)置為0和nMax。另外,熵編碼器350將一個比特的標記 分派到符號中的每一個符號。標記 被用于在對符號編碼進行期間改變概率模型。開始時將標記 設(shè)置為‘假’并且當(dāng)下一個將被編碼的值是1時將其轉(zhuǎn)換成‘真’,然后,到目前為止已經(jīng)被用于對符號編碼進行的概率模型被其他的模型代替。
接著,熵編碼器350在步驟S700中識別x、y和z分量中每一個分量的差分基準點(i=nStartIndex),假設(shè)它首先被編碼,并將標記bDone設(shè)置為“真”,該標記說明對所有符號的編碼是否完成。
熵編碼器350重復(fù)執(zhí)行將在下面進行說明的步驟S702到S718,直到用于符號中的每一個的編碼范圍中的最大和最小值變?yōu)橄嗤瑸橹梗粗钡經(jīng)]有剩余的符號需要被編碼為止。這里,當(dāng)在用于一個符號的編碼范圍中的最大和最小值相同時,可以認為完成對符號的編碼。
熵編碼器350在步驟S702中檢查 是否等于 如果 等于 方法移動到用于對下一個符號進行編碼的步驟。如果不等,則在步驟S704中將bDone設(shè)置為‘假’,這意味著對當(dāng)前符號(當(dāng)前正在被編碼的符號)的編碼還沒有完成。
熵編碼器350在步驟S706計算在用于當(dāng)前符號的編碼范圍中的中間值nMid并在步驟S708中將中間值nMid與當(dāng)前符號的值進行比較。在本發(fā)明的優(yōu)選實施例中,根據(jù)下述等式計算中間值nMidnMid=P^i·max+P^i·min2+P^i·min+1---(10)]]>作為比較的結(jié)果,如果當(dāng)前符號值不大于中間值nMid,這意味著當(dāng)前符號屬于下界,則在步驟S710中向比特流發(fā)出0,并且用中間值nMid代替在用于當(dāng)前符號的編碼范圍中的最大范圍 另一方面,如果當(dāng)前符號值大于中間值nMid,這意味著當(dāng)前符號屬于上界,則給比特流發(fā)出1,并且用中間值nMid代替用于當(dāng)前符號的編碼范圍中的最小值 當(dāng)當(dāng)前正被編碼的符號的值第一次超過的中間值nmid時,換言之,當(dāng)?shù)谝淮螌?發(fā)給比特流時,在步驟S712中將 設(shè)置為‘真’,從而改變用于對符號進行編碼的概率模型。
有兩種在SQ AAC函數(shù)中使用的概率模型。一種是用于對在第一次從每個符號發(fā)出1之前輸出的比特進行熵編碼的notFoundContext,另一種是用于對恰好在第一次從每個符號發(fā)出1之后輸出的比特進行熵編碼的FoundContext。使用兩種不同概率模型的目的是為了增加在使用noFoundContext期間生成0的概率。由于生成0的概率增加,因此提高了對符號進行熵編碼效率。
此后,熵編碼器350在步驟S714中檢查 是真還是假。如果 是真,則熵編碼器350在步驟S716中使用FoundContext對符號進行編碼,否則,熵編碼器350在步驟S718中使用notFoundContext對符號進行編碼。
當(dāng)完成對當(dāng)前符號進行從步驟S702到步驟S718的編碼處理時,這意味著該熵編碼器僅完成了對當(dāng)前符號進行編碼的第一階段,在步驟S720中,熵編碼器350將編碼下標i增加1。接著,熵編碼器350在步驟S722中檢查在當(dāng)前階段中是否完成對所有符號的編碼。如果在當(dāng)前階段中還有要被編碼的符號,則熵編碼器350再次執(zhí)行步驟S702到步驟S722。
當(dāng)完成了對在一階段中的所有符號的編碼時,在步驟S724中,熵編碼器350根據(jù)標記nDone檢查是否所有階段的編碼都已經(jīng)完成。如果bDone是真,則熵編碼器350完成在當(dāng)前階段中的全部編碼處理并且開始對下一個分量進行編碼,如果不是,則熵編碼器350再次執(zhí)行步驟S700到S722,對剩余的符號進行編碼。
圖9B示出了用SQ AAC函數(shù)對多個符號進行編碼的處理。具體地說,圖9B示出了用SQ AAC函數(shù)對0、1、2、3、4和9進行編碼的處理。
再次參照圖6B,如果按照本發(fā)明的用于對數(shù)據(jù)進行編碼的裝置通過對所有輸入密鑰值數(shù)據(jù)進行熵編碼生成比特流,則密鑰值標題編碼器360在步驟S730中將對編碼的密鑰值數(shù)據(jù)進行譯碼所需的信息編碼成密鑰值標題信息,將該密鑰值標題信息添加到比特流中,并且輸出合成的比特流。
密鑰值標題編碼器360對將被編碼的輸入密鑰值數(shù)據(jù)的數(shù)量和數(shù)字數(shù)進行編碼。接著,密鑰值標題編碼器360識別x、y和z分量中的每個分量是否具有相同的量化值(例如,即使x、y和z分量中的每個分量的密鑰值數(shù)據(jù)變化,但由于x分量的密鑰值數(shù)據(jù)變化的程度很小,所以x分量的量化密鑰值數(shù)據(jù)具有相同值)并且將結(jié)果編碼成一個標記。
例如,如果x分量的量化值不相同,那么,是已經(jīng)利用循環(huán)DPCM操作還是已經(jīng)利用預(yù)測循環(huán)DPCM操作對x分量的密鑰值數(shù)據(jù)進行了編碼,以及是將用unary AAC函數(shù)還是將用SQ AAC函數(shù)對x分量的密鑰值數(shù)據(jù)進行編碼都被編碼成標記。如果不期望用unary AAC函數(shù)對x分量的密鑰值數(shù)據(jù)進行編碼,那么,將被熵編碼的x分量的編碼比特尺寸和x分量的開始下標都被編碼成密鑰值標題。
同樣,如果y和z分量中每個分量的密鑰值數(shù)據(jù)不同,那么,與前述的x分量的標題信息完全對應(yīng)的y和z的標題信息被編碼成標題。
如果x分量的量化值不同,則不用unary AAC函數(shù)對x分量的密鑰值數(shù)據(jù)進行編碼,并且將被熵編碼的x分量的開始下標是1,然后,將第一量化密鑰值基準點編碼為內(nèi)部基準點。按照相同的方式,將y和z分量中的每個分量的第一量化密鑰值基準點編碼為內(nèi)部基準點。
密鑰值標題編碼器360識別在x、y和z分量中哪一個分量具有最大范圍。如果x分量具有最大范圍,則密鑰值標題編碼器360將變量nWhichAxis設(shè)置為0。如果分量y具有最大范圍,則密鑰值標題編碼器360將nWhichAxis設(shè)置為1。如果分量z具有最大范圍,則密鑰值標題編碼器360將nWhichAxis設(shè)置為2。此后,密鑰值標題編碼器360利用浮點數(shù)編碼器330將nWhichAxis、x_min、y_min、z_min和max編碼成密鑰標題。
下面將描述用于實現(xiàn)按照本發(fā)明第四實施例的,對數(shù)據(jù)進行編碼的方法的計算機程序。
按照本發(fā)明的用于對數(shù)據(jù)進行編碼的裝置將位置內(nèi)插器編碼成比特流,這將在下面描述。為了更好地理解,下面將以SDL語言的形式描述傳統(tǒng)的程序代碼和變量。
圖19示出了實現(xiàn)壓縮位置內(nèi)插器的程序代碼的例子。在圖19中,示出了用于讀取一個壓縮位置內(nèi)插器的第一個類。第一個類包括PoslKeyValueHeader和PoslKeyValue。PoslKeyValueHeader包括用于譯碼PoslKeyValue的標題信息,類PoslKeyValue從所述比特流中讀出有關(guān)壓縮位置內(nèi)插器的密鑰值數(shù)據(jù)。函數(shù)qf_start()被用于在讀出被ACC編碼的部分比特流之前啟動一個算術(shù)譯碼器。
圖20示出了PoslKeyValueHeader的程序代碼。參照圖20,在存儲在PoslKeyValueHeader中的變量當(dāng)中nNumKeyValueCodingBit表示nNumberOfKeyValue的比特尺寸,nNumberOfKeyValue表示密鑰值數(shù)據(jù)的數(shù)量,和nKVQBit表示密鑰值數(shù)據(jù)的量化比特尺寸。
x_keyvalue_flag,y_keyvalue-flag和z_keyvalueflag說明x、y和z分量是否具有相同的量化值,并且nKVDigit表示密鑰值數(shù)據(jù)中的每個數(shù)據(jù)的最高有效位的最大數(shù)。NKVDPCMOrder_X,nKVDPCMOrder_Y,nKVDPCMOrder_Z分別對應(yīng)于被用于x、y和z分量中的每個分量的密鑰值數(shù)據(jù)的DPCM的階數(shù)。如果已經(jīng)執(zhí)行了DPCM,則該標記被設(shè)置為0,如果已經(jīng)執(zhí)行了預(yù)測DPCM,則該標記被設(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表示將被編碼的每個分量軸的開始下標。firstKV_X,firstKV_Y和firstKV_Z分別表示x、y和z分量中的每個分量的第一量化密鑰值數(shù)據(jù),它們都被編碼成內(nèi)部數(shù)據(jù)。
圖21示出了類KeyValueMinMax的程序代碼。參照圖21,類KeyValueMin恢復(fù)已經(jīng)被用于規(guī)范密鑰值數(shù)據(jù)的最大和最小值。bUse32float說明32比特浮點數(shù)是否已經(jīng)被用于存儲最大和最小值。如果bUse32Float是0,那么用IEEE標準754的浮點數(shù)格式對用于規(guī)范密鑰值數(shù)據(jù)的最大和最小值進行編碼。否則,用浮點數(shù)編碼器對用于規(guī)范密鑰值數(shù)據(jù)的最大和最小值進行編碼。
nWhichAxis表示在x、y和z當(dāng)中具有最大范圍的分量。在本實施例中,如果nWhichAxis是0,則X軸具有最大范圍,如果nWhichAxis是1,則Y軸具有最大范圍,而如果nWhichAxis是2,則Z軸具有最大范圍。
BAllSameMantissaDigitFlag說明在x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值的尾數(shù)是否具有相同的數(shù)字數(shù),并且bSameKVDigitFlag表示最小值的尾數(shù)的數(shù)字數(shù)與nKVDigit相同。nMantissaDigit_X、nMantissaDigit_Y和nMantissaDigit_Z分別表示在x、y和z分量的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值的尾數(shù)的數(shù)字數(shù)。
BMaxDigitFlag說明最大值的尾數(shù)是否具有與從中獲得最大值max的分量的最小值相同的數(shù)字數(shù)。如果最大值的尾數(shù)的數(shù)字數(shù)不同于最小值的尾數(shù)的數(shù)字數(shù),則從比特流中讀出最大值的尾數(shù)的數(shù)字數(shù)。
nMantissaDigit_M表示最大值的尾數(shù)的數(shù)字數(shù),nExponentBits表示對最大和最小值的指數(shù)當(dāng)中的最大絕對指數(shù)進行編碼所需的比特數(shù)。BAllSameExponentSign說明x、y和z分量的正負號是否相同,當(dāng)bAllSameExponentSign為真時,nExponentSign表示指數(shù)的正負號。
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)中的最大值。
下面結(jié)合圖22描述類FloatingPointNumber的程序代碼。類FloatingPointNumber使用十進制系統(tǒng)表示浮點數(shù)。nMantissa表示十進制系統(tǒng)中的浮點數(shù)的尾數(shù),nExponent表示該浮點數(shù)的指數(shù)。
nSign表示浮點數(shù)的正負號,nExponentSign表示該浮點數(shù)的指數(shù)的正負號。
下面結(jié)合圖23描述類PoslKeyValue的程序代碼。參見圖23,在存儲在類PoslKeyValue中的變量中,keyValue_X、keyValue_Y和keyValue_Z分別表示在位置內(nèi)插器中的x、y和z分量中的每個分量的密鑰值數(shù)據(jù)的數(shù)組。如果nStartIndex_X被設(shè)置為0,則使用算術(shù)譯碼器從比特流中譯碼keyValue_X
。如果nStartIndex_X被設(shè)置為1,則從密鑰值標題譯碼器中譯碼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的正負號進行譯碼。上下文模型kVXSignContext、kVYSignContext和kVZSignContext被發(fā)送給decodeUnaryAAC或decodeSQAAC函數(shù)。
MaxValueContext、FoundContext和NotFoundContext被用于對密鑰值的絕對值進行熵譯碼。例如,kVXMaxValueContexr,kVXFoundContext和kVXNotFoundContext被用于對keyValue_X進行譯碼。MaxValueContext、FoundContext和NotFoundContext被發(fā)送給decodeUnaryACC或decodeSQAAC函數(shù)。
上下文模型kVXUCotext、kVYUContext和kVZUContext被用于對keyValue_X、keyValue_Y和keyValue_Z進行譯碼,并被發(fā)送給decodeUnaryAAC函數(shù)。
下面結(jié)合圖10A和10B描述通過恢復(fù)由前述DPCM操作器生成的差分數(shù)據(jù),輸出量化數(shù)據(jù)的逆DPCM操作器。
圖10A的框圖示出了按照本發(fā)明的逆DPCM操作器,圖10B為逆DPCM操作的流程圖。
參見圖10A,按照本發(fā)明的逆DPCM操作器包括逆循環(huán)DPCM操作器1020,用于對輸入給它的差分數(shù)據(jù)執(zhí)行逆循環(huán)量化操作以便擴展它們的范圍,對輸入差分數(shù)據(jù)執(zhí)行逆DPCM操作,然后輸出量化數(shù)據(jù);逆預(yù)測循環(huán)DPCM操作器1030,用于對輸入給它的差分數(shù)據(jù)執(zhí)行逆循環(huán)量化操作以便擴展它們的范圍,對輸入差分數(shù)據(jù)執(zhí)行逆預(yù)測DPCM操作,然后輸出量化的數(shù)據(jù);以及確定單元1010,用于根據(jù)已經(jīng)對差分數(shù)據(jù)執(zhí)行的DPCM種類,將差分數(shù)據(jù)輸出給逆循環(huán)DPCM操作器1020或逆預(yù)測循環(huán)DPCM操作器1030。
下面結(jié)合圖10B描述逆DPCM操作。參見圖10A和10B,經(jīng)歷逆DPCM操作的差分數(shù)據(jù)被輸入給確定單元1010。然后,在步驟S1010中,確定單元1010識別對輸入差分數(shù)據(jù)執(zhí)行了哪種DPCM,根據(jù)結(jié)果確定將要對輸入差分數(shù)據(jù)執(zhí)行哪種逆DPCM,并將差分數(shù)據(jù)輸出給逆循環(huán)DPCM操作器1020或逆預(yù)測循環(huán)DPCM操作器1030。
如果所述差分數(shù)據(jù)被輸入給逆循環(huán)DPCM操作器1020并且nMax是輸入差分數(shù)據(jù)的量化范圍中的最大值,逆循環(huán)DPCM操作器1020通過在步驟S1020中對輸入差分數(shù)據(jù) 執(zhí)行按照下述等式的逆循環(huán)量化獲得量化的差分數(shù)據(jù)
此后,逆循環(huán)DOCM操作器1020通過分別輸入差分數(shù)據(jù) 和將從等式(11)獲得的逆循環(huán)量化的差分數(shù)據(jù) 代入等式(12)獲得逆DPCM的差分數(shù)據(jù)的值A(chǔ)和逆DPCM的差分數(shù)據(jù)的值B。
在等式(12)中,n表示數(shù)據(jù)的數(shù)量,和i表示1和n-1之間的整數(shù)。
如果A不小于0且不大于nMax,則逆循環(huán)DPCM操作器1020輸出A作為逆循環(huán)DPCM的數(shù)據(jù) 如果A小于0或大于nMax,則逆循環(huán)DPCM操作器1020在步驟S1040中輸出B。
逆預(yù)測循環(huán)DPCM操作器1030在步驟S1020通過使用等式(11)對預(yù)測的差分數(shù)據(jù) 執(zhí)行逆循環(huán)量化獲得逆循環(huán)量化的預(yù)測差分數(shù)據(jù) 如果P=2×P~i-1+P~i-2,]]>其中P表示用于譯碼的預(yù)測數(shù)據(jù),則逆循環(huán)DPCM操作器1030通過將 代入等式(13)計算A和將 代入等式(14)計算B。
在等式(13)和(14)中,n表示數(shù)據(jù)的數(shù)量,i表示1和n-1之間的整數(shù)。
如果A不小于0且不大于nMax,那么,逆循環(huán)DPCM操作器1020輸出A作為逆預(yù)測循環(huán)DPCM的數(shù)據(jù) 如果A小于0或大于nMax,則逆預(yù)測循環(huán)DPCM操作器1020在步驟S1040中輸出B作為 下面結(jié)合圖11描述按照本發(fā)明第一實施例的,用于對數(shù)據(jù)進行譯碼的裝置。按照本發(fā)明第一實施例的用于對數(shù)據(jù)進行譯碼的裝置使用按照本發(fā)明的DPCM操作器對比特流進行譯碼,在該比特流中,輸入數(shù)據(jù)已經(jīng)被利用按照本發(fā)明第一實施例的,用于對數(shù)據(jù)進行編碼的裝置編碼。
參見圖11,按照本發(fā)明第一實施例的用于對數(shù)據(jù)進行譯碼的裝置包括熵譯碼器1120、由前述逆DPCM操作器組成的逆DPCM處理器1130和逆量化器1140。
熵譯碼器1120通過對輸入比特流進行熵譯碼,生成差分數(shù)據(jù)并將該差分數(shù)據(jù)輸出給逆DPCM處理器1130。
如上所述,逆DPCM處理器1130識別對輸入差分數(shù)據(jù)執(zhí)行了哪種DPCM,對差分數(shù)據(jù)執(zhí)行逆循環(huán)DPCM操作或逆預(yù)測循環(huán)DPCM操作,并將量化數(shù)據(jù)輸出給逆量化器1140。
逆量化器1140利用預(yù)定的量化比特,對從逆DPCM處理器1130輸入的量化數(shù)據(jù)進行逆量化并輸出重新得到的數(shù)據(jù)。
下面結(jié)合圖12A和12B描述按照本發(fā)明第二實施例的,用于對數(shù)據(jù)進行譯碼的裝置。按照本發(fā)明第二實施例的用于對數(shù)據(jù)進行譯碼的裝置對比特流進行譯碼,在該比特流中,具有多個分量的數(shù)據(jù)已經(jīng)被利用按照本發(fā)明的規(guī)范器規(guī)范。
參見圖12A,按照本發(fā)明第二實施例的,用于對數(shù)據(jù)進行譯碼的裝置包括熵譯碼器1120,用于對輸入比特流進行熵譯碼并輸出差分數(shù)據(jù);逆DPCM操作器140/1130,用于對從熵譯碼器1120輸入的差分數(shù)據(jù)執(zhí)行逆DPCM操作并輸出量化數(shù)據(jù);逆量化器1140,用于對從逆DPCM操作器140/1130輸入的量化數(shù)據(jù)進行逆量化并輸出規(guī)范數(shù)據(jù);以及逆規(guī)范器1150,用于接收每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和具有最大范圍的分量的最大值,計算規(guī)范數(shù)據(jù)的最大范圍,并根據(jù)該最大范圍對從逆量化器1140輸入的量化數(shù)據(jù)進行逆規(guī)范。
熵譯碼器1120、逆DPCM操作器140/1130和逆量化器1140的操作與結(jié)構(gòu)和按照本發(fā)明第一實施例的,用于對數(shù)據(jù)進行譯碼的裝置的相應(yīng)元件的操作和結(jié)構(gòu)相同,這里不再重復(fù)描述。下面將結(jié)合圖12B對逆規(guī)范器1150的操作進行描述。
逆規(guī)范器1150在步驟S1210中接收從輸入比特流中譯碼的,用于規(guī)范的最大值fMax,并分別接收x、y和z分量的最小值fMin_X、fMin_Y和fMin_Z,以及關(guān)于哪個分量軸具有最大值的信息nWhichAxis和有關(guān)編碼類型的信息bUse32Float。
逆規(guī)范器1150根據(jù)bUse32Float識別fMax、fMin_X、fMin_Y和fMin_Z是否被利用IEEE標準754的浮點數(shù)格式編碼,如果不是,則逆規(guī)范器1150使用下述等式計算最大范圍中的最大值Rangemax。如果fMax、fMin_X、fMin_Y和fMin_Z被以32位編碼,則逆規(guī)范器1150在步驟S1220中將fMax確定為Rangemax。
Rangemax=fMax-fMin_X(如果nWhichAxis=0)....(15)Rangemax=fMax-fMin_Y(如果nWhichAxis=1)Rangemax=fMax-fMin_Z(如果nWhichAxis=2)如果Rangemax被確定,逆規(guī)范器1150在步驟S1230中根據(jù)Rangemax,利用下述等式對x、y和z分量的每個分量的數(shù)據(jù)進行規(guī)范。
P^i,x=P~^i,x×Rangemax+fMin_XP^i,y=P~^i,y×Rangemax+fMin_YP^i,z=P~^i,z×Rangemax+fMin_Z(i=0,1,...,n)---(16)]]>在等式(16)中,n表示數(shù)據(jù)的數(shù)量。
下面結(jié)合圖13A和13B描述按照本發(fā)明第三實施例的,用于對數(shù)據(jù)進行譯碼的裝置和方法。按照本發(fā)明第三實施例的,用于對數(shù)據(jù)進行譯碼的裝置對比特流進行譯碼,已經(jīng)利用按照本發(fā)明的對數(shù)據(jù)進行編碼的方法,將表示三維動畫中的目標的位置內(nèi)插器的密鑰值數(shù)據(jù)編碼進該比特流中。
參見圖13A,按照本發(fā)明第三實施例的,用于對數(shù)據(jù)進行譯碼的裝置包括密鑰值標題譯碼器1110,用于對來自比特流的譯碼所需的信息進行譯碼;熵譯碼器1120,用于對輸入給它的比特流進行熵譯碼,然后輸出差分數(shù)據(jù);逆DPCM處理器1130,用于對從熵譯碼器1120輸入給它的差分數(shù)據(jù)執(zhí)行逆循環(huán)DPCM操作或逆預(yù)測循環(huán)DPCM操作,然后輸出量化的密鑰值數(shù)據(jù);逆量化器1140,用于對從逆DPCM處理器1130輸入的量化密鑰值數(shù)據(jù)進行逆量化并輸出規(guī)范的密鑰值數(shù)據(jù);浮點數(shù)譯碼器1160,用于從密鑰值標題譯碼器1110接收最小和最大值并將x、y和z分量的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和具有最大范圍的分量的最大值轉(zhuǎn)換成二進制數(shù);以及逆規(guī)范器1150,用于從浮點數(shù)譯碼器1160接收x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值和具有最大范圍的分量的最大值,根據(jù)來自浮點數(shù)譯碼器1160的最小值和最大值,計算最大范圍,然后對從逆量化器1140輸入的密鑰值數(shù)據(jù)進行逆規(guī)范。
下面結(jié)合圖13B描述按照本發(fā)明第三實施例的,用于對數(shù)據(jù)進行譯碼的方法。參照圖13B,將經(jīng)過編碼的密鑰值數(shù)據(jù)的比特流輸入給熵譯碼器1120和密鑰值標題譯碼器1110。然后,在步驟S1300中,密鑰值標題譯碼器1110從比特流中對譯碼所需的標題信息進行譯碼并將譯碼的標題信息輸出給熵譯碼器1120、逆DPCM處理器1130和逆量化器1140。
在步驟S1320中,熵譯碼器1120對比特流進行熵譯碼并將差分數(shù)據(jù)輸出給逆DPCM處理器1130。
圖14A是步驟S1320的詳細流程圖。參照圖14A,在步驟S1321中將比特流Pi輸入給熵譯碼器1120。圖15示出了輸入給熵譯碼器1120的并要進行熵譯碼的經(jīng)過編碼的密鑰值數(shù)據(jù)的順序。
熵譯碼器1120在步驟S1322中檢查分量,例如x,的密鑰值數(shù)據(jù)是否具有相同的量化值。如果分量的密鑰值數(shù)據(jù)具有相同的量化值,則在步驟S1323中將該分量的所有符號譯碼,并將它們設(shè)置為從密鑰值標題譯碼器1110輸入的最小值,例如fMin_X。
如果分量的密鑰值數(shù)據(jù)具有不同的量化值,則熵譯碼器1120在步驟S1324中檢查該密鑰值數(shù)據(jù)是否已經(jīng)被利用unary AAC函數(shù)編碼。如果該密鑰值數(shù)據(jù)已經(jīng)被利用unary AAC函數(shù)編碼,則在步驟S1325利用unary AAC函數(shù)對它們進行譯碼。
unary AAC函數(shù)從比特流中讀出0,直到比特“1”出現(xiàn)為止,將0的數(shù)量轉(zhuǎn)換成絕對值,讀出接著“1”的一位作為值的正負號,如果該位是“0”,則值的正負號為正,如果該位是“1”,則值的正負號為負,并且輸出經(jīng)過譯碼的值。
如果分量的密鑰值數(shù)據(jù)沒有被利用unary AAC函數(shù)編碼,則熵譯碼器1120利用SQ AAC函數(shù)對比特流進行譯碼,該比特流是指利用SQ AAC函數(shù)將分量的密鑰值數(shù)據(jù)編碼進其中的比特流,這將在下面描述。
在步驟S1331中,熵譯碼器1120從比特流中對所有符號的正負號進行譯碼,對最大值nMax進行譯碼,并將所有符號的譯碼范圍(從0到nMax的范圍)和標記 初始化為“假”。
此后,在步驟S1332中,熵譯碼器1120確定將被首先譯碼的密鑰值基準點(i=nStartlndex)并將bDone設(shè)置為‘真’。
熵譯碼器1120再次執(zhí)行步驟S1333到S1343,對符號進行譯碼。
具體地說,在步驟S1333中,熵譯碼器1120檢查在譯碼范圍中的最大值 和最小值 是否相同。
如果最大值 和最小值 相同,則在步驟S1334中,將被編碼的符號被確定為譯碼范圍內(nèi)的最大值(或最小值),如果不是,則在步驟S1335中,熵譯碼器1120將bDone設(shè)置為‘假’,并利用下述等式(17)更新譯碼范圍內(nèi)的中間值nMid。
熵譯碼器1120在步驟S1336中檢查上下文標記 是否為真,從而確定用于譯碼的概率模型。如果 是真,則熵譯碼器1120在步驟S1337中利用FoundContext對比特流進行譯碼,否則,熵譯碼器1120在步驟S1338中利用notFoundContext對比特流進行譯碼。
已經(jīng)對來自比特流的一個比特進行譯碼的熵譯碼器1120在步驟S1339中檢查從比特流中讀出的該比特是否是1,如果不是,則熵譯碼器1120在步驟S1340中用中間值nMid代替譯碼范圍中的最大值 如果從比特流譯碼的比特是1,則熵譯碼器1120在步驟S1341中利用中間值nMid代替譯碼范圍中的最小值 并將上下文標記 設(shè)置為‘真’。
熵譯碼器1120在步驟S1342中將譯碼下標i加1,在步驟S1343中檢查當(dāng)前階段中分量的所有密鑰值數(shù)據(jù)是否被完全譯碼,如果在當(dāng)前階段中還剩余要被譯碼的符號,則執(zhí)行步驟S1333到S1342。
如果已經(jīng)將當(dāng)前階段的所有密鑰值數(shù)據(jù)譯碼,熵譯碼器1120在步驟S1344中檢查是否需要附加階段來對當(dāng)前分量的密鑰值數(shù)據(jù)進行譯碼,如果是,則再次執(zhí)行步驟S1332到S1343。熵譯碼器檢查如果已經(jīng)將當(dāng)前分量的所有密鑰值譯碼,則熵譯碼器開始對下一個分量的密鑰值數(shù)據(jù)進行譯碼。
參見圖13A和13B,由熵譯碼器1120譯碼的密鑰值數(shù)據(jù)的差分數(shù)據(jù)被輸入給逆DPCM處理器130,然后逆DPCM處理器130根據(jù)所執(zhí)行的DPCM的類型執(zhí)行逆循環(huán)DPCM操作或逆預(yù)測循環(huán)DPCM操作。除了對x、y和z分量的每個分量的密鑰值數(shù)據(jù)單獨執(zhí)行以外,逆循環(huán)DPCM操作和預(yù)測循環(huán)DPCM操作與前述逆DPCM操作器的操作相同。
逆DPCM處理器1130將由逆DPCM操作生成的量化密鑰值數(shù)據(jù) 輸出給逆量化器1140,然后,在步驟S1370中,逆量化器1140利用從密鑰值標題譯碼器1110輸入的量化比特nKeyValueQBits對 進行逆量化。當(dāng)n表示P^ij=P~ij(2nKeyValueQBits-1)(i=nStartIndex,...,n,j=x,y,z)---(18)]]>從密鑰值標題譯碼器1110輸入的密鑰值數(shù)據(jù)的數(shù)量時,在逆量化器1140中執(zhí)行的逆量化可以利用下述等式表示。
逆量化器1140通過對x、y和z分量中的每個分量的密鑰值數(shù)據(jù)執(zhí)行逆量化生成規(guī)范的數(shù)據(jù),并向逆規(guī)范器1150輸出x、y和z分量中的每個分量的規(guī)范的密鑰值數(shù)據(jù)。
逆規(guī)范器1150利用從浮點數(shù)譯碼器1160輸入的信息,對從逆量化器1140輸入的規(guī)范的密鑰值數(shù)據(jù)進行逆規(guī)范。
下面結(jié)合圖14C描述對x、y和z分量中的每個分量的規(guī)范密鑰值數(shù)據(jù)進行的逆規(guī)范。
浮點數(shù)譯碼器1160接收信息bUse32Float并檢查bUse32Float是否為真。如果bUse32Float為真,則浮點數(shù)譯碼器接收用于逆規(guī)范的最大值fMax以及具有IEEE標準754的浮點數(shù)格式的x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值fMin_X、fMin_Y和fMin_Z。如果不是,則浮點數(shù)譯碼器在步驟S1382中接收用于逆規(guī)范的最大值fMax以及x、y和z分量中的每個分量的密鑰值數(shù)據(jù)當(dāng)中的最小值fMin_X、fMin_Y和fMin_Z,并接收關(guān)于最大值fMax屬于哪一個分量的信息nWhichAxis。
浮點數(shù)譯碼器1160在步驟S1384中按照等式(9)將在十進制系統(tǒng)中表示的fMax、fMin_X、fMin_Y和fMin_Z轉(zhuǎn)換成二進制數(shù),并將轉(zhuǎn)換后的值輸出給逆規(guī)范器1150。
逆規(guī)范器1150根據(jù)bUse32Float檢查fMax、fMin_X、fMin_Y和fMin_Z是否已經(jīng)被編碼為32比特。如果fMax、fMin_X、fMin_Y和fMin_Z已經(jīng)被編碼為32比特,則逆規(guī)范器1150將fMax確定為Rangemax,如果不是,則逆規(guī)范器在步驟S1386中按照等式(15)計算最大范圍中的最大值Rangemax。
如果Rangemax被確定,則逆規(guī)范器1150在步驟S1388中根據(jù)Rangemax,按照等式(16)對x、y和z分量中的每個分量的密鑰值數(shù)據(jù)進行逆規(guī)范。
圖24到27示出了按照本發(fā)明第三實施例的,用于對數(shù)據(jù)進行譯碼的裝置運行的程序代碼的例子。
圖24示出了用于實現(xiàn)逆循環(huán)DPCM操作的C++程序代碼的例子,圖25示出了用于實現(xiàn)逆預(yù)測循環(huán)DPCM操作的C++程序代碼的例子。
逆循環(huán)DPCM操作和逆預(yù)測循環(huán)DPCM操作都包括用于在量化范圍中選擇某個值的逆循環(huán)量化程序。
用于實現(xiàn)熵譯碼(自適應(yīng)算術(shù)譯碼器)操作的C++程序代碼的例子示于圖26到31中。這里,qf_decode()表示用于從比特流中讀出一個比特的函數(shù)。
利用寫入到計算機可讀記錄介質(zhì)上的計算機可讀代碼可以實現(xiàn)本發(fā)明。這里,計算機可讀記錄介質(zhì)包括任何一種可以被計算機系統(tǒng)讀出的記錄介質(zhì)。例如,計算機可讀記錄介質(zhì)可以是ROM、RAM、CD-ROM、磁帶、軟盤、光數(shù)據(jù)存儲器和載波(通過互聯(lián)網(wǎng)傳輸)。計算機可讀記錄介質(zhì)可以被傳輸?shù)酵ㄟ^網(wǎng)絡(luò)連接的計算機系統(tǒng),計算機可以以分散方式讀取記錄介質(zhì)。
如上所述,可以認為,按照本發(fā)明的DPCM操作器及其操作通過執(zhí)行預(yù)測DPCMA操作和循環(huán)量化操作以及傳統(tǒng)的DPCM操作,可以大大減少差分數(shù)據(jù)的規(guī)模。另外,通過利用按照本發(fā)明的DPCM操作對數(shù)據(jù)進行編碼,可以明顯地提高對數(shù)據(jù)進行編碼的效率。
另外,通過利用按照本發(fā)明的規(guī)范器,根據(jù)x、y和z分量中的一個分量對具有多個分量的數(shù)據(jù)進行規(guī)范,可以提高對數(shù)據(jù)進行編碼的效率,從而減小數(shù)據(jù)的規(guī)模。
此外,通過在執(zhí)行DPCM操作和預(yù)測DPCM操作之后執(zhí)行循環(huán)量化操作,可以以較高的壓縮比對位置內(nèi)插器的密鑰值數(shù)據(jù)進行編碼和譯碼,從而減少將被編碼的差分數(shù)據(jù)的范圍。
盡管本發(fā)明是參照其優(yōu)選實施例來描述的,但本領(lǐng)域的技術(shù)人員應(yīng)該理解,可以在不脫離由所附權(quán)利要求限定的本發(fā)明的精神和范圍的情況下,對其進行形式和細節(jié)上的各種修改。
權(quán)利要求
1.一種用于對數(shù)據(jù)進行編碼的裝置,該裝置包括一個量化器,用于將輸入給它的數(shù)據(jù)量化為預(yù)定的比特量化;一個DPCM操作器,用于通過對量化數(shù)據(jù)執(zhí)行DPCM操作生成差分數(shù)據(jù);一個熵編碼器,用于對從DPCM操作器輸入的差分數(shù)據(jù)進行熵編碼,并將經(jīng)過熵編碼的差分數(shù)據(jù)輸出到比特流中;一個量化誤差最小化器,用于接收輸入數(shù)據(jù)和量化數(shù)據(jù),調(diào)節(jié)輸入數(shù)據(jù)中的最大和最小值,從而使量化誤差最小,并且輸出最大和最小值;以及一個標題編碼器,用于對將被包括在比特流中的最大和最小值進行編碼。
2.如權(quán)利要求1所述的裝置,其中,所述量化誤差最小化器包括一個初始值設(shè)置單元,用于接收輸入數(shù)據(jù)和量化數(shù)據(jù),通過計算輸入數(shù)據(jù)和量化誤差當(dāng)中的最小值的數(shù)字數(shù)設(shè)置最小誤差值emin的初始值,并設(shè)置經(jīng)過調(diào)節(jié)的最小值min’和量化誤差最小值minmin的初始值;一個經(jīng)過調(diào)節(jié)的最小值更新單元,用于通過對經(jīng)過調(diào)節(jié)的最小值min’執(zhí)行一個預(yù)定的操作,對經(jīng)過調(diào)節(jié)的最小值min’進行更新;一個確定單元,用于根據(jù)經(jīng)過更新和調(diào)節(jié)的最小值的數(shù)字數(shù)和值,將量化誤差最小值minmin確定為將被用于逆量化的最小值;以及一個誤差值更新單元,用于根據(jù)經(jīng)過更新和調(diào)節(jié)的最小值計算量化誤差值,如果所計算的量化誤差值小于最小誤差值emin,則將經(jīng)過調(diào)節(jié)的最小值更新為量化誤差最小值minmin,將所計算的量化誤差值更新為最小誤差值emin,并將最小誤差值emin輸出給經(jīng)過調(diào)節(jié)的最小值更新單元。
3.如權(quán)利要求2所述的裝置,其中,所述初始值設(shè)置單元根據(jù)用預(yù)定常數(shù)除預(yù)定量化步長的結(jié)果和輸入數(shù)據(jù)中的最小值,設(shè)置經(jīng)過調(diào)節(jié)的最小值的初始值。
4.如權(quán)利要求2所數(shù)的裝置,其中,在通過將輸入給所述確定單元的經(jīng)過調(diào)節(jié)的最小值的數(shù)字數(shù)和輸入數(shù)據(jù)的數(shù)字數(shù)進行比較,以及將輸入的經(jīng)過調(diào)節(jié)的最小值的值和輸入數(shù)據(jù)當(dāng)中最小值的值進行比較之后,所述確定單元將當(dāng)前的量化誤差最小值輸出為將被用于逆規(guī)范的最小值。
5.一種用于對具有多個分量的數(shù)據(jù)進行編碼的裝置,該裝置包括一個規(guī)范器,用于計算分量的數(shù)據(jù)范圍當(dāng)中的最大范圍,并且根據(jù)該最大范圍對分量中的每個分量的數(shù)據(jù)進行規(guī)范;一個量化器,用于利用預(yù)定的量化比特對經(jīng)過規(guī)范的數(shù)據(jù)進行量化;一個DPCM操作器,用于對量化數(shù)據(jù)執(zhí)行DPCM操作并輸出差分數(shù)據(jù);以及一個熵編碼器,用于對差分數(shù)據(jù)進行熵編碼并輸出將差分數(shù)據(jù)編碼進其中的比特流。
6.如權(quán)利要求5所述的裝置,其中,所述規(guī)范器計算分量中的每個分量的數(shù)據(jù)當(dāng)中的最大和最小值,利用分量的最大和最小值獲得分量的數(shù)據(jù)范圍當(dāng)中的最大范圍,并根據(jù)該最大范圍對分量中的每個分量的數(shù)據(jù)進行規(guī)范。
7.一種用于對數(shù)據(jù)進行譯碼的裝置,用于對已經(jīng)將具有多個分量的數(shù)據(jù)編碼進其中的比特流進行譯碼,所述裝置包括一個熵譯碼器,用于對輸入給它的比特流進行熵譯碼并輸出差分數(shù)據(jù);一個逆DPCM操作器,用于對差分數(shù)據(jù)執(zhí)行逆DPCM操作并輸出量化數(shù)據(jù);一個逆量化器,用于對量化數(shù)據(jù)進行逆量化并輸出規(guī)范數(shù)據(jù);以及一個逆規(guī)范器,用于接收每個分量數(shù)據(jù)當(dāng)中的最小值和具有最大范圍的分量的最大值,獲得規(guī)范數(shù)據(jù)的最大范圍,并該最大范圍對規(guī)范數(shù)據(jù)進行逆規(guī)范。
8.如權(quán)利要求7所述的裝置,其中,所述逆規(guī)范器利用規(guī)范數(shù)據(jù)所屬分量的最大范圍和最小值,對規(guī)范數(shù)據(jù)進行逆規(guī)范。
9.如權(quán)利要求7所述的裝置,其中,所述逆規(guī)范器通過將規(guī)范數(shù)據(jù)乘以最大范圍并將規(guī)范數(shù)據(jù)所屬分量的最小值加到乘法的結(jié)果上,對規(guī)范數(shù)據(jù)進行逆規(guī)范。
10.一種用于對數(shù)據(jù)進行編碼的方法,該方法包括如下步驟(a)利用預(yù)定量化比特對輸入數(shù)據(jù)進行量化;(b)通過對量化數(shù)據(jù)執(zhí)行DPCM操作,生成差分數(shù)據(jù);(c)通過對在步驟(b)生成的差分數(shù)據(jù)執(zhí)行熵編碼,生成比特流;(d)利用輸入數(shù)據(jù)和量化數(shù)據(jù)調(diào)節(jié)在量化數(shù)據(jù)中的最大和最小值,從而使化量誤差最小;以及(e)對將被包括在比特流中的最大和最小值進行編碼。
11.如權(quán)利要求10所述的方法,其中,步驟(d)包括如下步驟(d1)通過利用輸入數(shù)據(jù)和量化數(shù)據(jù)計算輸入數(shù)據(jù)的最小值和量化誤差的的數(shù)字數(shù),設(shè)置最小誤差值emin的初始值,并且設(shè)置經(jīng)過調(diào)節(jié)的最小值min’和量化誤差最小值minmin的初始值;(d2)通過對經(jīng)過調(diào)節(jié)的最小值min’執(zhí)行預(yù)定操作,更新經(jīng)過調(diào)節(jié)的最小值min’;(d3)根據(jù)經(jīng)過更新和調(diào)節(jié)的最小值的數(shù)字數(shù)和大小,將量化誤差最小值minmin確定為將被用于逆量化的最小值;以及(d4)如果在步驟(d3)中,還沒有將量化誤差最小值minmin確定為將被用于逆量化的最小值,則根據(jù)經(jīng)過更新和調(diào)節(jié)的最小值,計算量化誤差值,并且將經(jīng)過調(diào)節(jié)的最小值更新為量化誤差最小值minmin,將計算的量化誤差更新為最小誤差值,如果所計算的量化誤差值小于最小誤差值emin,則移動到步驟(d2)。
12.如權(quán)利要求11所述的方法,其中,在步驟(d1)中,根據(jù)用預(yù)定常數(shù)除預(yù)定量化步長的結(jié)果和輸入數(shù)據(jù)當(dāng)中的最小值,設(shè)置經(jīng)過調(diào)節(jié)的最小值的初始值。
13.如權(quán)利要求11所述的方法,其中,在步驟(d3)中,通過將經(jīng)過調(diào)節(jié)的最小值的數(shù)字數(shù)與輸入數(shù)據(jù)的數(shù)字數(shù)進行比較,并且將輸入的經(jīng)過調(diào)節(jié)的最小值與輸入數(shù)據(jù)當(dāng)中的最小值的值進行比較,將當(dāng)前量化誤差最小值確定為將被用于逆量化的最小值。
14.一種用于對數(shù)據(jù)進行編碼的方法,該方法對具有多個分量的數(shù)據(jù)進行編碼,所述方法包括(a)計算分量的數(shù)據(jù)范圍中的最大范圍并根據(jù)該最大范圍對每個分量的數(shù)據(jù)進行規(guī)范;(b)利用預(yù)定量化比特對規(guī)范數(shù)據(jù)進行量化;(c)通過對量化數(shù)據(jù)執(zhí)行DPCM操作,生成差分數(shù)據(jù);以及(d)通過對差分數(shù)據(jù)執(zhí)行熵編碼,生成將數(shù)據(jù)編碼進其中的比特流。
15.如權(quán)利要求14所述的方法,其中,步驟(a)包括如下步驟(a1)計算每個分量的數(shù)據(jù)當(dāng)中的最大和最小值;(a2)利用最大和最小值計算分量的數(shù)據(jù)范圍和分量的數(shù)據(jù)范圍中的最大范圍;以及(a3)根據(jù)最大范圍對每個分量的數(shù)據(jù)進行規(guī)范。
16.一種對數(shù)據(jù)進行譯碼的方法,該方法用于對將具有多個分量的數(shù)據(jù)編碼進其中的比特流進行譯碼,所述方法包括如下步驟(a)通過對輸入的比特流執(zhí)行熵編碼,生成差分數(shù)據(jù);(b)通過對差分數(shù)據(jù)執(zhí)行逆DPCM操作,生成量化數(shù)據(jù);(c)通過對量化數(shù)據(jù)進行逆量化,生成規(guī)范數(shù)據(jù);以及(d)利用從比特流中譯碼的,每個分量數(shù)據(jù)當(dāng)中的最小值和具有最大范圍的分量的最大值,獲得規(guī)范數(shù)據(jù)的最大范圍,并且根據(jù)該最大范圍對規(guī)范數(shù)據(jù)進行逆規(guī)范。
17.如權(quán)利要求16所述的方法,其中,在步驟(d)中,使用所述最大范圍和規(guī)范數(shù)據(jù)所屬分量的最小值逆規(guī)范規(guī)范的數(shù)據(jù)。
全文摘要
提供了對數(shù)據(jù)進行編碼和譯碼的方法和裝置。用于對數(shù)據(jù)進行編碼的裝置包括一個量化器,用于將輸入給它的數(shù)據(jù)量化為預(yù)定的比特量化;一個DPCM操作器,用于通過對量化數(shù)據(jù)執(zhí)行DPCM操作生成差分數(shù)據(jù);一個熵編碼器,用于對從DPCM操作器輸入的差分數(shù)據(jù)進行熵編碼,并將經(jīng)過熵編碼的差分數(shù)據(jù)輸出到比特流中;一個量化誤差最小化器,用于接收輸入數(shù)據(jù)和量化數(shù)據(jù),調(diào)節(jié)輸入數(shù)據(jù)中的最大和最小值,從而使量化誤差最小,并且輸出最大和最小值;以及一個標題編碼器,用于對將被包括在比特流中的最大和最小值進行編碼。
文檔編號H04B14/02GK1741392SQ200510092099
公開日2006年3月1日 申請日期2002年11月27日 優(yōu)先權(quán)日2001年11月27日
發(fā)明者禹相玉, 鄭錫潤, 張義善, 韓萬鎮(zhèn), 金道均, 李信俊, 張敬子 申請人:三星電子株式會社