專利名稱:基于數字信號處理器的整數小波變換方法
技術領域:
本發明涉及一種小波變換方法,特別涉及一種基于數字信號處理器的整數小波變換方法。
然而在很多實際系統中,如數碼相機、可視電話、便攜式攝像機以及掌上電腦等,考慮到速度和面積的要求,需要用芯片實現壓縮系統。與傳統的分塊運算的DCT比較,目前已有的2D DWT芯片結構中并沒有充分利用小波變換的并行操作,雖然減小了控制復雜度,卻也減小了硬件利用率,增加了芯片成本。因此,研究小波變換的實時處理能力,是很有實用價值的。
對于二維圖像而言,傳統的小波變換方法是首先對圖像的全部行做行變換,之后,在行變換全部完成后再做列變換,如果要進行多層的小波變換,則對上一次二維小波變換后的左上角1/4的低頻系數,繼續進行二維小波變換。運算步驟與1、2相同,行列數各除以2,如果需要對小波系數進行量化,則需要在所有小波變換層數結束后,對每個系數進行量化操作。
可以看出,對于硬件實現而言,以上的操作有幾個很大的弊端1、運算的并行度很差,每一個步驟之間都是順序執行的。以二維圖像尺寸M×N,進行一層小波變換為例,其中需要M次行變換循環,需要N次列變換循環,而每個行變換需要N/2次循環,每個列變換需要M/2次循環,共計(N/2)×M+(M/2)×N=M×N次循環。
2、運算對整幅圖像進行,而硬件DSP的內存空間十分有限,當圖像尺寸較大時,只能將圖像數據放到片外的存儲空間中,使運算速度大大降低。以CIF格式為例,一幅圖像的尺寸為352×288×2=198KB,而TI C6000 DSP的片內RAM不能滿足需要,而當圖像尺寸更大一些時,這種內存空間的不足就更為突出。
3、在一個二維圖像的小波變換中,一個系數需要被反復調用至少兩次(行濾波一次,列濾波一次),頻繁的片內片外數據調度,使算法的執行效率降低。
4、量化操作在小波變換完成后單獨執行,需要M×N次循環操作,大大增加了運算的執行時間。
5、有很多小波變換的濾波器參數為浮點數,而浮點數的運算對硬件而言非常耗時,影響了實時性的實現。
針對上述缺陷雖然也出現了一些改進,例如將小波變換的浮點運算改為整數的提升運算,用移位加運算代替乘除運算;采用公用子表達式技術,將低通濾波器和高通濾波器操作中的公共項合并等方案,但這些改進只是從計算式的角度提高了小波變換的運算效率,并沒有從根本上解決小波變換在硬件實現上所遇到的整體運算并行度低、耗內存、數據重復調度等問題。
本發明提供一種基于數字信號處理器的整數小波正變換方法,包括如下步驟(1)將圖像數據劃分為若干個數據段;(2)對當前數據段的行數據進行行正變換;(3)對當前數據段的列數據進行列正變換;(4)對其他數據段重復步驟(2)、(3)。
一種基于數字信號處理器的整數小波反變換方法,包括如下步驟(1)將圖像數據劃分為若干個數據段;(2)對當前數據段的列數據進行列反變換;(3)對當前數據段的行數據進行行反變換;(4)對其他數據段重復步驟(2)、(3)。
本發明適用于內存空間較小的具備并行處理能力的數字信號處理器,對原始圖像進行實時整型小波正反變換,運算速度比浮點運算快,變換后的小波系數分布明顯優于傳統的浮點小波變換。在變換的同時采取多種預選擇的量化系數,在不增加運算開銷和時間開銷的前提下,完成對小波系數的量化。這種方法便于硬件實現,能運用于很多低碼率的視頻傳輸系統等。
圖5是應用本發明的小波列反變換運算示意圖;圖6是應用本發明的小波行反變換運算示意圖。
將圖像劃分為若干個數據段的方式有很多種,對于小波正變換,可以將圖像數據劃分為多個大循環,大循環的次數可以被圖像數據的行數整除;再將所述每個大循環中包含的每行數據劃分為多個小循環,小循環的次數可以被所述圖像數據的列數整除。
如
圖1所示,即是本發明在編碼端的實施例流程圖,提供一種基于數字信號處理器的整數小波正變換方法,首先將圖像數據劃分為多個大循環,大循環的次數可以被圖像數據的行數整除,例如,圖像數據的行列數均能被4整除,則可以將圖像數據的行數除以4(步驟101);然后將所述每個大循環中包含的每行數據劃分為多個小循環,小循環的次數可以被所述圖像數據的列數整除,則可以將圖像數據的列數除以4(步驟102);將當前大循環中包含的行數據分別做行正變換(步驟103);在所述行數據的行濾波完成后對其做列正變換(步驟104);然后重復步驟103、104,直至全部循環結束(步驟105)。
其中所述步驟103包括對當前行數據做Lazy變換,將其中奇偶列的系數分開放置(也就是說先將所有的偶系數連續放置,然后在其后將所有的奇系數也連續放置);進行一維小波變換,其中一維小波變換又包括奇數變換和偶數變換。
所述步驟104包括對各行同一列的數據做lazy變換,將其中奇偶行的系數分開放置;然后進行一維小波變換,其中一維小波變換又包括奇數變換和偶數變換。
在所述小波正變換過程中,如果需要對小波系數進行量化,則通過預設量化系數為2的冪,在小波變換的過程中同時完成量化。
所述小波正變換后的小波系數采用一個伸縮系數k進行優化,k=1.2~1.5,并可以將其改造成整數乘法和移位運算。
所述的小波正變換是在片內緩沖區內完成的,而對變換前后的數據在片內和片外存儲區之間的搬運,Lazy變換和矩陣的行列轉置,是使用數字信號處理器的快速直接存儲器訪問完成的。
相應的,在解碼端,本發明提供一種基于數字信號處理器的整數小波反變換方法,首先將圖像數據劃分為若干個數據段,分別對當前數據段的列數據進行列反變換,然后對當前數據段的行數據進行行反變換,列行變換穿插進行,直至處理完整個圖像數據。
同樣,劃分圖像的方式可以是通過將圖像數據劃分為多個大循環,大循環的次數可以被圖像數據的列數整除;將所述每個大循環中包含的每列數據劃分為多個小循環,小循環的次數可以被所述圖像數據的行數整除。
如圖2所示,即是本發明在解碼端的實施例流程圖,首先將圖像數據劃分為多個大循環,大循環的次數可以被圖像數據的列數整除,例如,將所述圖像數據的列數除以4(步驟201);然后將所述每個大循環中包含的每列數據劃分為多個小循環,小循環的次數可以被所述圖像數據的行數整除,例如是所述圖像數據的行數除以4(步驟202);將當前大循環中包含的部分列數據分別做列反變換(步驟203);在所述部分列數據的列反變換完成后對其做行反變換(步驟204);重復步驟203、204,直至全部循環結束(步驟205)。
所述步驟203包括對各列數據做一維小波反變換,其中一維小波反變換又包括奇數反變換和偶數反變換;將經過小波反變換之后的系數進行反Lazy變換,將其中奇偶列的系數間隔放置(也就是恢復到原始圖像的放置位置,即奇偶奇偶的順序)。
所述步驟204包括對各列同一行數據做一維小波反變換,其中一維小波反變換又包括奇數反變換和偶數反變換;將經過小波反變換之后的系數進行反Lazy變換,將其中奇偶列的系數間隔放置。
在所述小波反變換過程中,如果需要對小波系數進行反量化,則將反量化系數預設為1/(2的冪),在小波反變換的過程中同時完成反量化。
所述小波反變換后的小波系數采用一個伸縮系數k進行優化,k=1.2~1.5,并可以將其改造成整數乘法和移位運算所述的小波反變換是在片內緩沖區內完成的,而對變換前后的數據在片內和片外存儲區之間的搬運,Lazy變換和矩陣的行列轉置,是使用數字信號處理器的快速直接存儲器訪問完成的。
下面以二維圖像尺寸M×N,M和N均能被4整除,進行一層整數雙正交Daubechies(5,3)小波變換為例,來進一步說明本發明,但本發明不限于此實施例。
編碼端1、將圖像劃分為M/4個大循環,每個大循環又包括N/4個小循環。
2、每個循環中對圖像的4~6行數據分別做行濾波首先對該行數據做lazy變換,將其中奇偶列的系數分開放置,然后進行一維小波變換。其中一維小波變換又包括奇數變換和偶數變換。在小波變換的過程中同時完成量化。
2、對經過步驟1小波變換運算完成的4~6行數據,同時進行列濾波首先對各行同一列的數據做lazy變換,將其中奇偶行的系數分開放置,然后進行一維小波變換。其中一維小波變換又包括奇數變換和偶數變換。在小波變換的過程中同時完成量化。
重復步驟2、3直到循環結束。
從硬件角度來說,程序的循環數越多,代碼的執行就越不容易實現流水和并行,執行效率很低。但是,如果循環數太少,那么在一個循環中所需耗費的平均資源數(比如存儲空間等等)過多,計算量過于復雜,也會影響代碼執行效率。因此,在本發明的實施例中,劃分為圖像行數M/4個循環是一個比較優化的選擇。由于小波變換是先做行濾波,后做列濾波,大循環的劃分是以列濾波為基礎的,所以不能選擇N/4作為大的循環次數,一次大循環完成4行系數的行列濾波,另外,大循環數必須要被整個圖像的行數整除。同理,小循環的劃分是以行濾波為基礎的,在這里選擇了N/4,即,一次小循環完成4個系數的行濾波,小循環數必須要被整個圖像的列數整除。這與一次執行圖像數據的幾行幾列是一個道理,只是利用小波變換的特點,對整幅圖像進行切割和分別處理。
相應的,在解碼端4、將圖像劃分為N/4個大循環,每個大循環又包括M/4個小循環。
5、每個循環中對圖像的4~6列數據分別做列反變換首先對各列的數據做一維小波反變換。其中一維小波反變換又包括奇數反變換和偶數反變換。在小波反變換的過程中同時完成反量化。最后將經過小波逆變換之后的系數進行反lazy變換,將其中奇偶行的系數間隔放置。
6、對經過步驟5小波反變換完成的幾列數據同時進行行逆變換首先對各列同一行數據做一維小波反變換。其中一維小波反變換又包括奇數反變換和偶數反變換。在小波反變換的過程中同時完成反量化。最后將經過小波逆變換之后的系數進行反lazy變換,將其中奇偶列的系數間隔放置。
7、重復步驟5、6直到循環結束。
其中,以Daubechies(5,3)為例,一維小波正變換的公式如下sl(0)=x2l]]>dl(0)=x2l+1]]>dl(1)=dl(0)+α(sl(0)+sl+1(0))]]>sl(1)=sl(0)+β(dl(1)+dl-1(1))]]>sl=k·sl(1)]]>dl=dl(1)/k]]>sl(0)為一維圖像信號x的偶數樣本,dl(0)為一維圖像信號x的奇數樣本,sl為變換后的偶數樣本,dl為變換后的奇數樣本;α、β為小波變換系數,k為伸縮變換系數(α=-0.5,β=0.25,k=1.2~1.5)。
Daubechies(5,3)一維小波反變換的公式如下dl(1)=κ·dl]]>sl(1)=sl/κ]]>sl(0)=sl(1)-β(dl(1)+dl-1(1))]]>dl(0)=dl(1)-α(sl(0)+sl+1(0))]]>x2l+1=dl(0)]]>x2l=sl(0)]]>式中dl為信號的高頻樣本,sl為信號的低頻樣本,dl(1)為經伸縮變換后的高頻樣本,sl(1)為經伸縮變換后的低頻樣本,α、β為小波變換系數,sl(0)為變換后的偶數樣本,dl(0)為變換后的奇數樣本;x為恢復的一維圖像信號(α=-0.5,β=0.25,k=1.2~1.5)。
|α|=0.5,對它的浮點乘法運算,可以改造成右移1位。
|β|=0.25,對它的浮點乘法運算,可以改造成右移2位。
其中伸縮變換系數k的選取,經過實驗得到,當k取值為1.2~1.5時,對于整形小波變換后的系數值分布起到了進一步優化的作用,進一步將大系數集中到了整個圖像二維數組的左上角,有利于進一步的編碼運算,使圖像的壓縮比更大。
k值可以改造成整數乘法和移位運算,即k乘以2L,取整,得到新的拉伸系數值k1,然后右移L位;1/k也可以改造成整數乘法和移位運算,即1/k乘以2L,取整,得到新的拉伸系數值k2,然后右移L位。
伸縮系數k采用了整數乘法和移位運算來實現,因此,可以利用這個操作的同時對小波系數進行量化,而不需要浪費額外的循環。預設量化系數,只需使用移位運算,在整數小波變換伸縮運算的同時可方便快速的完成不同頻帶小波系數的量化。
對小波系數的量化主要針對高頻系數,目的是為了提高后續的壓縮編碼算法的壓縮效率。具體的做法是將量化系數預設為2的冪,這樣就可以只用移位操作來完成量化。通過一個預設參數確定是否根據小波變換層數的提高而以2的整數倍減低這個初始量化系數。
由于經試驗和理論證明,人眼對對角線方向的高頻信息沒有對水平和垂直方向的高頻信息那么敏感,所以,我們對對角線方向的高頻信息的量化要求較高。由于對角線方向高頻信息在一層二維整形小波變換中要乘以行、列兩次高頻系數的伸縮系數,所以就自然的提高了對角線方向高頻信息的量化。
例如,在編碼端,對低頻分量的量化值為2n,則sl=k·sl(1)]]>可改寫為sl=sl(1)·k1>>(L+n);]]>對高頻分量的量化值為2n,則dl=dl(1)/k]]>可改寫為dl=dl(1)·k2>>(L+n).]]>在解碼端,對低頻分量的反量化值為1/2n,則sl=sl(1)/k]]>可改寫為sl=sl(1)·k2>>(L-n);]]>對高頻分量的反量化值為1/2n,則dl=k·dl(1)]]>可改寫為d.l=dl(1)·k1>>(L-n).]]>這種量化算法科學而且效率很高,不需要額外的時間和計算開銷就可以完成不同預設的量化目的。
由于圖像信息的數據量較大,因此不能將整幀的數據放到DSP的內存中,而頻繁的在片內和片外調用數據,又會使運算效率降低,在本實施例中,DSP的內存需求僅為max(M,N)×2×6個字節,即6行/列圖像數據。本實施例的整型小波變換是在較小的片內緩沖區內完成,一次最多處理四行或者四列圖像數據,以提高執行效率。而對整型小波運算前后的數據在片內和片外存貯區之間的搬運,Lazy變換和矩陣的行列轉置,本發明是采用數字信號處理器的快速直接存儲器訪問完成的,搬運速度快,且不占用處理器的處理時間。
見圖3所示,以行濾波為例,一個循環內可以完成兩個奇數樣本的高頻濾波和兩個偶數樣本的低頻濾波。以行濾波為例,將傳統算法原來需要N個循環完成的運算,只需要N/4個循環就可以完成。大大提高了運算效率。
在小波變換的傳統步驟中,列濾波需要在行濾波完全執行完之后才能進行。以前人們提出的所謂提高并行操作也只分別限于行濾波內和列濾波內,而對二者之間的并行運算沒有考慮。見圖4所示,本發明將列濾波和行濾波操作并行處理。列濾波不需要在所有的行濾波完成后才開始進行,只要列濾波所需的那幾行數據完成行濾波,即可對這幾行的所有列數據進行列濾波運算。這樣,二維圖像一層小波正變換的循環次數從過去的M×N變成了現在的M×N/16。
列反變換如圖5所示,一個循環內可以完成兩個高頻樣本和兩個低頻樣本的反變換。以行反變換為例,將傳統算法原來需要N個循環完成的運算,只需要N/4個循環就可以完成。大大提高了運算效率。
行反變換的運算方法如圖6所示,將行反變換和列反變換操作并行處理。行反變換不需要在所有的列變換完成后才開始進行,只要行反變換所需的那幾列數據完成列反變換,即可對這幾列的所有行數據進行行反變換運算。這樣,二維圖像一層小波反變換的循環次數從過去的M×N變成了現在的M×N/16。
下面以一圖像的實際數據為例,進一步說明本發明,以二維圖像尺寸16×16,進行一層整數雙正交Daubechies(5,3)小波變換為例,原始圖像數據為X 傳統做法是先對每一行數據進行小波正變換(行濾波),每次處理一行,每個行變換需要16/2次循環,則經過16×16/2次循環后,得到行濾波的結果Y0 再對每一列數據進行小波正變換(列濾波),每次處理一列,每個列變換需要16/2次循環,則經過16×16/2次循環后,得到一層小波正變換的結果Y。 用傳統算法計算16×16原始數據的一層小波變換,需要16+16=32次大循環,其中每個大循環中包括16/2=8次小循環,所以共包括32×8=256次循環計算。
本發明則是將行列濾波并行處理,將16×16的原始數據劃分為16/4=4次大循環,其中每個大循環中包括4行數據的處理,每行數據的正變換需要16/4=4次小循環,完成一層小波正變換,僅需要4×4×4=64次循環計算。
其中經過1次大循環后,完成原始圖像前4行(0~3)數據的小波正變換,放到結果矩陣的相應位置,得到結果X1 其中經過2次大循環后,完成原始圖像4~7行數據的小波正變換,放到結果矩陣的相應位置,得到結果X2 其中經過3次大循環后,完成原始圖像8~11行數據的小波正變換,放到結果矩陣的相應位置,得到結果X3 其中經過4次大循環后,完成原始圖像12~16行數據的小波正變換,放到結果矩陣的相應位置,得到最終結果Y(Y與傳統算法流程的結果相同)。
權利要求
1.一種基于數字信號處理器的整數小波正變換方法,其特征在于包括如下步驟(1)將圖像數據劃分為若干個數據段;(2)對當前數據段的行數據進行行正變換;(3)對當前數據段的列數據進行列正變換;(4)對其他數據段重復步驟(2)、(3)。
2.如權利要求1所述的方法,其特征在于所述步驟(1)包括如下步驟(1A)將圖像數據劃分為多個大循環,大循環的次數可以被圖像數據的行數整除;(1B)將所述每個大循環中包含的每行數據劃分為多個小循環,小循環的次數可以被所述圖像數據的列數整除。
3.如權利要求1所述的方法,其特征在于所述步驟(2)是將當前大循環中包含的行數據分別做行正變換;步驟(3)是將當前大循環中包含的列數據分別做列正變換。
4.如權利要求1所述的方法,其特征在于所述步驟(2)包括如下步驟對當前行數據做Lazy變換,將其中奇偶列的系數分開放置;進行一維小波變換,其中一維小波變換又包括奇數變換和偶數變換。
5.如權利要求1所述的方法,其特征在于所述步驟(3)包括如下步驟對各行同一列的數據做lazy變換,將其中奇偶行的系數分開放置;進行一維小波變換,其中一維小波變換又包括奇數變換和偶數變換。
6.如權利要求1所述的方法,其特征在于所述小波正變換過程中,如果需要對小波系數進行量化,則通過預設量化系數為2的冪,在小波變換的過程中同時完成量化。
7.如權利要求1所述的方法,其特征在于所述小波正變換后的小波系數采用一個伸縮系數k進行優化,k=1.2~1.5,并可以將其改造成整數乘法和移位運算。
8.如權利要求1所述的方法,其特征在于所述的小波正變換是在片內緩沖區內完成的,而對變換前后的數據在片內和片外存儲區之間的搬運,Lazy變換和矩陣的行列轉置,是使用數字信號處理器的快速直接存儲器訪問完成的。
9.一種基于數字信號處理器的整數小波反變換方法,其特征在于包括如下步驟(1)將圖像數據劃分為若干個數據段;(2)對當前數據段的列數據進行列反變換;(3)對當前數據段的行數據進行行反變換;(4)對其他數據段重復步驟(2)、(3)。
10.如權利要求9所述的方法,其特征在于所述步驟(1)包括如下步驟(1A)將圖像數據劃分為多個大循環,大循環的次數可以被圖像數據的列數整除;(1B)將所述每個大循環中包含的每列數據劃分為多個小循環,小循環的次數可以被所述圖像數據的行數整除。
11.如權利要求9所述的方法,其特征在于所述步驟(2)是將當前大循環中包含的列數據分別做列反變換;步驟(3)是將當前大循環中包含的行數據分別做行反變換。
12.如權利要求9所述的方法,其特征在于所述步驟(2)包括如下步驟對各列數據做一維小波反變換,其中一維小波反變換又包括奇數反變換和偶數反變換;將經過小波反變換之后的系數進行反Lazy變換,將其中奇偶列的系數間隔放置。
13.如權利要求9所述的方法,其特征在于所述步驟(3)包括如下步驟對各列同一行數據做一維小波反變換,其中一維小波反變換又包括奇數反變換和偶數反變換;將經過小波反變換之后的系數進行反Lazy變換,將其中奇偶列的系數間隔放置。
14.如權利要求9所述的方法,其特征在于在所述小波反變換過程中,如果需要對小波系數進行反量化,則將反量化系數預設為1/(2的冪),在小波反變換的過程中同時完成反量化。
15.如權利要求9所述的方法,其特征在于所述小波反變換后的小波系數采用一個伸縮系數k進行優化,k=1.2~1.5,并可以將其改造成整數乘法和移位運算。
16.如權利要求9所述的方法,其特征在于所述的小波反變換是在片內緩沖區內完成的,而對變換前后的數據在片內和片外存儲區之間的搬運,反Lazy變換和矩陣的行列轉置,是使用數字信號處理器的快速直接存儲器訪問完成的。
全文摘要
一種基于數字信號處理器的整數小波變換方法,在小波正變換時,首先將圖像數據劃分為若干個數據段,然后分別對當前數據段的行數據進行行正變換,對當前數據段的列數據進行列正變換,在小波反變換時,首先將圖像數據劃分為若干個數據段,然后分別對當前數據段的列數據進行列反變換,對當前數據段的行數據進行行反變換,行列變換穿插進行,直至處理完整個圖像數據,本發明適用于內存較小,具備并行或流水線處理能力的數字信號處理器的實現,對原始圖像進行實時小波正反變換。
文檔編號H04N7/26GK1460968SQ03148079
公開日2003年12月10日 申請日期2003年6月30日 優先權日2003年6月30日
發明者耿靜, 陳小敬, 龐潼川, 周閏 申請人:大唐微電子技術有限公司