專利名稱:一種對二維數字信號進行縮放的方法
技術領域:
本發明涉及一種對二維數字信號進行縮放的方法。
背景技術:
現有技術中的二維數字信號(如二維數字信號)的縮放技術一般都是通過濾波器來實現。從數字信號處理理論上來講,把長度為W1的象素序列O重新采樣為長度W2的象素序列R要求有以下操作1把長度為W1的象素進行插0處理變為長度為W的象素S。W為W1和W2的最小公倍數,W/W1=N1,W/W2=N2。此操作要求在每個原始象素前(或后)插入N1-1個零值;2對S進行濾波處理F處置之后得到S’。濾波器F的帶寬為2π/N,N=max(N1,N2);3對S’進行抽取操作得到R,即每隔N2個點抽取一個點。
在步驟2時采用的濾波器一般為FIR濾波器,相對IIR濾波器可以帶來內存和穩定度上的優勢。假設F為FIR濾波器,其長度為L,由于F為一個低通濾波器,為了滿足其帶寬條件,L一般為大于等于2N的整數。
在把一幅W1*H1的圖像O實時縮放為W2*H2的圖像過程中,以往使用低通濾波器的方法一般需要通過以下步驟(逐行方式);初始I=J=01輸入O中的一行象素O(I),且I=I+1;2對O(I)使用低通濾波FW縮放為寬度為W2的一行象素OR[I];3把OR[I]保存于行Buffer B中(把B中序號最小的一行象素覆蓋掉),判斷B中存儲的新行數是否足夠進行縱向濾波,如果不能返回步驟1;4對B中存儲的象素行OR[I],OR[I-1],…使用濾波器FH進行逐列的縱向濾波,每列濾波輸出的象素組成一行新的象素R[J],J=J+1;該方法在實際運用中面臨以下幾個問題1FW和FH在不同的縮放比率下均需采用不同的濾波器系數才能保證圖像R的質量。需要不同的縮放比率時就需要設計不同的FW和FH,并把其系數保存于裝置中,導致對裝置存儲能力的需求較高;2理論上,當FH的為LH階FIR濾波器時,在Buffer B中需要保存Ceil(LH/H2)行的中間結果OR。LH越大濾波效果越好,如果H=max(H1,H2),LH往往是H的2-4倍或者更多,導致B的需要存儲多行的中間結果;3該算法在縱向和橫向上都使用濾波器。要達到好的效果往往需要高階的濾波器,而該方法的計算量和濾波器的階數是成正比的,因此計算量較大。
發明內容
本發明要解決的技術問題是提供一種對二維數字信號進行縮放的方法,可以減少存儲需求和縮放過程所要求的計算量。
為了解決上述技術問題,本發明提供了一種對二維數字信號進行縮放的方法,用于將輸入的W1*H1的二維數字信號O[IO,JO],0<=IO<W1,0<=JO<H1在縱向上縮小,輸出W2*H2的二維數字信號R[IR,JR],0<=IR<W2,0<=JR<H2,且H2<H1,包括以下步驟逐行輸入二維數字信號O中的行數據,即長度為W1的象素序列,將其重采樣得到的長度為W2的象素序列作為一個象素向量,有X1次對得到的S1個象素向量取平均,作為輸出二維數字信號R的一行數據,有X2次對得到的S2個象素向量取平均,作為輸出二維數字信號R的一行數據,得到二維數字信號R,其中X1=H1%H2,X2=(H2-X1),S1=Ceil(H1/H2),S2=Floor(H1/H2),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,H1=S1*X1+S2*X2。
進一步地,上述方法還可具有以下特點還要將X1次按S1個象素向量取平均的操作和X2次按S2個象素向量取平均的操作平均地分散開。
進一步地,上述方法還可具有以下特點是通過以下步驟來實現二維數字信號縮放過程中將X1次按S1個象素向量取平均的操作和X2次按S2個象素向量取平均的操作平均地分散開的(a)初始化參數D=小于H2的任意自然數或0;C=0;JO=JR=0;A[n]=B[n]=0,n=0,…W2-1;(b)判斷JO>H1是否成立,如果是,結束,否則執行下一步;(c)輸入二維數字信號O的一行數據O[m,JO],m=0,…W1-1;重采樣為包括W2個象素的象素向量B[n],n=0,…W2-1,且令JO=JO+1;(d)令A[n]=A[n]+B[n],B[n]=0,n=0,…W2-1;D=D+H2;C=C+1;(e)如果D<H1,返回到步驟(b);否則執行下一步;(f)得到要輸出的二維數字信號R的一行數據R[n,JR]=A[n]/C,A[n]=0,n=0,…W2-1;C=0;D=D-H1;JR=JR+1,返回步驟(b)。
進一步地,上述方法還可具有以下特點是通過以下步驟來實現二維數字信號縮放過程中將X1次按S1個象素向量取平均的操作和X2次按S2個象素向量取平均的操作平均地分散開的(a)初始化參數,S1=Ceil(H1/H2),S2=Floor(H1/H2);Deta=H1-H2*S2;D=任意小于H2的自然數或0;LT=S1或S2;T=0;A[n]=B[n]=0,n=0,…W2-1;JO=JR=0;(b)判斷JO>H1是否成立,如果是,結束,否則執行下一步;(c)輸入二維數字信號O中長度為W1的行數據O[m,JO],m=0,…W1-1;重采樣為包括W2個象素的象素向量B[n],n=0,…W2-1,且令JO=JO+1;(d)令A[n]=A[n]+B[n],B[n]=0,n=0,…W2-1;T=T+1;(e)如果T<LT,返回步驟(b);否則,執行下一步;
(f)得到要輸出的二維數字信號R的一行數據R[n,JR]=A[n]/LT,n=0,…W2-1;T=0;A
=A[1]=…A[W2-1]=0;JR=JR+1;(g)令D=D+Deta,如果D<H2,令LT=S2,返回步驟(b),否則令D=D-W2;LT=S1,返回步驟(b)。
進一步地,上述方法還可具有以下特點在將逐行輸入的二維數字信號O中的行數據,即長度為W1的象素序列,重采樣為象素向量B,即長度為W2的象素序列時,如果W1>W2,則按以下方法進行逐步輸入長度為W1的象素序列的W1個象素,有X1’次對輸入的S1’個象素取平均作為象素向量B的一個象素,有X2’次對輸入的S2’個象素取平均作為象素向量B的一個象素,從而得到象素向量B,并且將上述按S1’個象素取平均的操作和按S2’個象素取平均的操作平均地分散開,其中X1’=W1%W2,X2’=(W2-X1’),S1’=Ceil(W1/W2),S2’=Floor(W1/W2),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,W1=S1’*X1’+S2’*X2’;如果W2>W1,則按以下方法進行逐步輸入長度為W1的象素序列的W1個象素時,有X1’次將輸入的一個象素復制為S1’個象素向量B的象素,有X2’次將輸入的一個象素復制為S2’個象素向量B的象素,從而得到象素向量B,并且將上述X1’次復制操作和X2’次復制操作平均地分散開,其中X1’=W2%W1,X2’=(W1-X1’),S1’=Ceil(W2/W1),S2’=Floor(W2/W1),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,W2=S1’*X1’+S2’*X2’。
進一步地,上述方法還可具有以下特點所述二維數字信號為數字圖像。
為了解決上述技術問題,本發明又提供了一種對二維數字信號進行縮放的方法,用于將輸入的W1*H1的二維數字信號O[IO,JO],0<=IO<W1,0<=JO<H1在縱向上放大,輸出W2*H2的二維數字信號R[IR,JR],0<=IR<W2,0<=JR<H2,且H1<H2,包括以下步驟
逐行輸入二維數字信號O中的行數據,即長度為W1的象素序列,將其重采樣得到的長度為W2的象素序列作為一個象素向量,有X1次將得到的一個象素向量復制為S1個輸出二維數字信號R的行數據,有X2次將得到的一個象素向量復制為S2個輸出二維數字信號R的行數據,得到二維數字信號R,其中X1=H2%H1,X2=(H1-X1),S1=Ceil(H2/H1),S2=Floor(H2/H1),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,H2=S1*X1+S2*X2。
進一步地,上述方法還可具有以下特點還要將X1次將重采樣得到的一個象素向量復制為S1個二維數字信號R的行數據的操作和X2次將重采樣得到的一個象素向量復制為S2個二維數字信號R的行數據的操作平均地分散開。
進一步地,上述方法還可具有以下特點是通過以下步驟來實現二維數字信號縮放過程中將上述X1次象素復制操作和X2次象素復制操作平均地分散開的(a)初始化參數D=小于H1的任意自然數或0;A
=A[1],…=A[W2-1]=0;JO=JR=0;(b)如果JO>H1,已得到輸出二維數字信號,結束,否則執行下一步;(c)輸入二維數字信號O中長度為W1的行數據O[m,JO],m=0,…W1-1;重采樣為包括W2個象素的象素向量A[n],n=0,…W2-1;令JO=JO+1;(d)令R[n,JR]=A[n],n=0,…W2-1;D=D+H1;JR=JR+1;(e)如果D<H2,返回步驟(d),否則,令D=D-H2,返回步驟(b)。
進一步地,上述方法還可具有以下特點是通過以下步驟來實現二維數字信號縮放過程中將上述X1次象素復制操作和X2次象素復制操作平均地分散開的(a)初始化參數S1=Ceil(H2/H1),S2=Floor(H2/H1);Deta=H2%H1;D=任意小于H1的自然數或0;LT=S1(或S2);T=0;A
=A[1],…=A[W2-1]=0;JO=JR=0;
(b)如果JO>H1,結束,否則執行下一步;(c)輸入二維數字信號O中長度為W1的行數據O[m,JO],m=0,…W1-1;重采樣為包括W2個象素的象素向量A[n],n=0,…W2-1;令JO=JO+1;(d)令R[n,JR]=A[n],n=0,…W2-1;T=T+1;JR=JR+1(e)如果T<LT,返回步驟(d),否則,令D=D+Deta,T=0,執行下一步;(f)如果D>=H2,令D=D-H2,LT=S1,返回步驟(b),否則令LT=S2,返回步驟(b)。
進一步地,上述方法還可具有以下特點在將逐行輸入的二維數字信號O中的行數據,即長度為W1的象素序列,重采樣為象素向量A,即長度為W2的象素序列時,如果W1>W2,則按以下方法進行逐步輸入長度為W1的象素序列的W1個象素,有X1’次對輸入的S1’個象素取平均作為象素向量A的一個象素,有X2’次對輸入的S2’個象素取平均作為象素向量A的一個象素,從而得到象素向量A,并且將上述按S1’個象素取平均的操作和按S2’個象素取平均的操作平均地分散開,其中X1’=W1%W2,X2’=(W2-X1’),S1’=Ceil(W1/W2),S2’=Floor(W1/W2),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,W1=S1’*X1’+S2’*X2’;如果W2>W1,則按以下方法進行逐步輸入長度為W1的象素序列的W1個象素時,有X1’次將輸入的一個象素復制為S1’個象素向量A的象素,有X2’次將輸入的一個象素復制為S2’個象素向量A的象素,從而得到象素向量A,并且將上述X1’次復制操作和X2’次復制操作平均地分散開,其中X1’=W2%W1,X2’=(W1-X1’),S1’=Ceil(W2/W1),S2’=Floor(W2/W1),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,W2=S1’*X1’+S2’*X2’。
進一步地,上述方法還可具有以下特點所述二維數字信號為數字圖像。
綜上所述,采用本發明方法,避免了現有技術中,不同的縮放比率需要采用不同的濾波器進行濾波的問題,極大地節省了對存儲量地需求,同時也節省了縮放過程所要求的計算量。
圖1是本發明實施例對二維數字信號縮放且在縱向上縮小的方法的流程圖。
圖2是本發明實施例對二維數字信號縮放且在縱向上放大的方法的流程圖。
具體實施例方式
在本發明中,要實時把長度為W1*H1的圖像O實時縮放為W2*H2的圖像R。W1,H1,W2,H2的均為任意自然數,橫向縮放比率為W2/W1,縱向縮放比率為H2/H1。二維數字信號O可以逐行或者逐列地進行縮放。
本發明對圖像的縮放,基于對象素序列進行重采樣的方法,重采樣又分為降采樣和升采樣。
在本實施例中,要把長度為W1的象素序列O重新采樣為長度W2的象素序列R,設該重采樣為降采樣,即W2<W1。其方法如下設S1’=Ceil(W1/W2),S2’=Floor(W1/W2),其中Ceil()表示向上取整運算,Floor()表示向下取整運算。
再定義X1’=W1%W2,X2’=(W2-X1’),即X1’+X2’=W2。“%”表示求余運算。明顯的,有W1=S1’*X1’+S2’*X2’,上述推導的含義在于對于O中的W1個象素,分成W2段,其中有X1’段含有S1’個象素,有X2’段含有S2’個象素。如果我們對其中每一段的象素點求平均后輸出一個該段的平均象素最后就恰好得到W2個象素,實現了從O到R得重采樣過程。
但是,該過程中如果只有分段和求平均操作,會導致象素序列O的部分失真,因為O中的某部分由S1’個象素點平均為1個象素點,另外-些部分由S2’個象素點平均為1個象素點,雖然S1’和S2’比較接近但并不相等,導致這兩部分的分辨率不一致。因此,必須找到一種方法把這兩種分辨率不同的部分平均地分散開,即從整體上看,兩種不同分辨率的部分很平均地分散于序列R中,這樣才能避免R在視覺上的失真。
假設W1’=27,W2’=8,則S1’=Ceil(W1/W2)=4,S2’=Floor(W1/W2)=3,X1’=W1%W2=3,X2’=(W2-X1)=5。有W1=S1’*X1’+S2’*X2’=4*3+3*5=27,即R序列中有3個點是由連續4個O中的象素點平均得到的,有5個點是由連續3個O中的象素點平均得到的。為了避免視覺上的失真,3個4變1和5個3變1的象素點應在整體上平均分散開來。否則可能會讓觀察者覺察到圖像失真。
以下介紹一種降采樣的具體方法,用于控制什么時候對S1’個點求平均,什么時候是S2’個點求平均,使兩種不同分辨率分散開。
逐個輸入長度為W1的象素序列O,各象素點表示為O[I],0<=I<W1,逐個輸出長度為W2的象素序列R,各象素點表示為R[J],0<=J<W2。重采樣過程中執行以下運算步驟110,初始化變量D’=任意小于W2且大于等于0的整數,A’=0;C’=0;I=J=0;步驟120,如果I大于等于W1,已得到要輸出的象素序列R,結束;否則執行下一步;步驟130,從序列O輸入新的象素O[I],令I遞加1,A’=A’+O[I],D’=D’+W2;C’=C’+1;步驟140,如果D’<W1,返回步驟120,否則,執行下一步;步驟150,令R[J]=A’/C’,C’=0,J=J+1,D’=D’-W1,A’=0,返回步驟120。
該流程雖然沒有直接計算出S1’和S2’,但通過對變量D的迭代控制,產生了將對S1’個輸入象素點求平均的操作和對S2’個輸入象素點求平均的操作平均分散開的效果。對于W1=27,W2=8的實例,D’初始化為2,則運算結果是依次對4、3、3、4、3、3、4、3個象素點求均,可見已均勻分散開。
對于將兩種分辨率不同的部分平均地分散開的降采樣方法來說,上面的方法并不是唯一的,例如,還可以采用以下方法步驟AA,計算出S1’=Ceil(W1/W2),S2’=Floor(W1/W2),增量deta’=W1%W2,初始化LT’=S2’(或S1’),循環變量J=0,任意小于W2且大于等于0的一整數D’;步驟BB,從序列O中取出LT’個象素,對該LT’象素取均值,作為要輸出的象素序列R的象素點R[J],然后令J=J+1;步驟CC,判斷J是否等于W2,如果是,已得到要輸出的象素序列R,結束,否則,執行下一步;步驟DD,令D’=D’+deta’,判斷D’是否大于等于W2,如果是,執行步驟EE,否則,執行步驟FF;步驟EE,令D’=D’-W2,LT’=S1’,返回步驟BB;步驟FF,令LT’=S2’,返回步驟BB。
對于W1=27,W2=8的實例,S1’=4,S2’=3,X1’=3,X2’=5,令deta’=3,初始化D’=4,LT’=3,則運算結果是依次對3、3、4、3、4、3、3、4個象素點求均,也已均勻分散開。
要把長度為W1的象素序列O重新采樣為長度W2的象素序列R,且該重采樣為升采樣,即W2>W1,其方法如下與降采樣類似的,令S1’=Ceil(W2/W1),S2’=Floor(W2/W1)。X1’=W2%W1,X2’=(W1-X1’),則有W2=S1’*X1’+S2’*X2’。
重采樣時,對于O中的象素點,其中X1’個象素由一個象素復制S1’次成為S1’個象素,另外X2’個象素由一個象素復制S2’次成為S2’個象素,最后得到長度為W2’的象素序列R。同樣地,必須保證兩種不同地分辨率能夠在整體上平均分散開來,才能保證得到的象素序列R在視覺上不失真。
假設W1=8,W2=27,則S1’=Ceil(W2/W2)=4,S2’=Floor(W2/W2)=3,X1’=W2%W1=3,X2’=(W1-X1)=5。有W2=S1’*X1’+S2’*X2’=4*3+3*5=27,即O中的象素點有5個復制3遍,有3個復制4遍,就可得到27個象素點的序列R。復制3遍的象素和復制4遍的象素必須分散開,否則就會造成失真。
下面介紹一種升采樣的具體方法,用于控制什么時候對S1’個點復制,什么時候是S2’個點復制,使兩種不同分辨率分散開。
逐個輸入長度為W1的象素序列O,各象素點表示為O[I],0<=I<W1,逐個輸出長度為W2的象素序列R,各象素點表示為R[J],0<=J<W2。該重采樣為升采樣,即W2>W1。在重采樣過程中執行以下步驟步驟210,初始化變量D’=任意小于W1且大于等于0的整數,I=J=0;步驟220,如果I大于等于W1,已得到要輸出的象素序列R,結束;否則,執行下一步;步驟230,從序列O輸入新的象素O[I],令I=I+1;步驟240,令R[J]=O[I],J=J+1;D’=D’+W1;步驟250,如果D’<W2,返回步驟240,否則,令D’=D’-W2,返回步驟220。
該流程雖然沒有直接計算出S1’和S2’,但通過對變量D’的迭代控制,產生了X1’次將序列O一個象素復制為S1’個輸出序列R象素的操作和X2’次將序列O一個象素復制為S2’個輸出序列R象素的操作平均地分散開的效果。對于W1=8,W2=27的實例,D’初始化為5,則運算結果是依次對每個輸入象素復制3、4、3、3、4、3、3、4次,可見已均勻分散開。
對于將兩種分辨率不同的部分平均地分散開的升采樣方法來說,上面的方法也不是唯一的,例如,還可以采用以下方法步驟HH,先計算出S1’=Ceil(W2/W1),S2’=Floor(W2/W1),初始化變量deta’=W2%W1,D’為任意小于W1且大于等于0的整數,LT’=S2’(或S1’),I=J=0;
步驟II,如果I>=W1,已得到要輸出的象素序列R,結束,否則執行下一步;步驟JJ,從序列W1中輸入新的象素O[I],令I=I+1;步驟KK,O[J]=R[I],J=J+1;且重復此操作LT’次;步驟LL,令D’=D’+deta’,如果D’>=W1,則令D’=D’-W1,LT’=S1’,返回步驟II;否則令LT’=S2’,返回步驟II。
本實施例在把一幅W1*H1的二維數字信號O(其中各個像素點表示為O[IO,JO],0<=IO<W1,0<=JO<H1)縮放為W2*H2的二維數字信號R(其中各個象素表示為R[IR,JR],0<=IR<W2,0<=JR<H2)時,需要對二維數字信號O中每一行數據,即長度為W1的象素序列進行重采樣(升或降),得到H1個長度為W2的象素序列。這時,如果把得到的長度為W2的象素序列看成一個象素向量,則可以將該H1個長度為W2的象素序列看成是縱向上長度為H1的象素向量序列O’,從這里可以看出,只要將以上重采樣方法中的象素值運算用象素向量運算代替,就可以用同樣的重采樣方法來完成象素向量序列O’到長度為H2的象素向量序列R,即二維數字信號R的縮放運算。當然,在實際運算過程中,為了節約內存空間,對二維數字信號O的行數據的重采樣過程和對縱向上象素向量序列O’的重采樣過程是交錯進行的。
下面仍然按照H1>H2或H2>H1兩種情況,即縱向縮小或放大的情況進行說明,但需說明的是,本文中的橫向和縱向并不固定為二維數字信號的某一個維度,而是可以互換的。
要把長度為H1的象素向量序列O’重采樣為長度為H2的象素向量序列R,如該重采樣為降采樣,即H2<H1。其方法如下定義S1=Ceil(H1/H2),S2=Floor(H1/H2),X1=H1%H2,X2=(H2-X1),即X1+X2=H2。其中Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算。有H1=S1*X1+S2*X2,
在重采樣時,將O’中的H1個象素向量,分成H2段,其中有X1段含有S1個象素向量,有X2段含有S2個象素向量。如果我們對其中每一段的象素向量求平均后輸出一個該段的平均象素向量,最后就恰好得到H2個象素向量,實現了從O’到R的重采樣過程。對多個象素向量的求均就是對多個象素向量中相同位置上的象素求均后作為輸出象素向量該位置的象素。
同樣地,該過程中如果只有分段和求平均操作,會導致象素向量序列O’的部分失真,因為O’中的某部分由S1個象素向量平均為1個象素向量,另外一些部分由S2個象素向量平均為1個象素向量,導致這兩部分的分辨率不一致。因此,也要將這兩種分辨率不同的部分平均分散開,避免在視覺上的失真。其方法與象素值也是相似的。
要把長度為H1的象素向量序列O’重新采樣為長度H2的象素向量序列R,且該重采樣為升采樣,即H1<H2,其方法如下定義S1=Ceil(H2/H1),S2=Floor(H2/H1),X1=H2%H1,X2=(H1-X1),則有H2=S1*X1+S2*X2。
即在重采樣時,對于O’中的象素點,其中X1個象素向量由一個象素向量復制S1次成為S1個象素向量,另外X2個象素向量由一個象素向量復制S2次成為S2個象素向量,最后得到長度為H2的象素向量序列R。同樣地,必須保證兩種不同地分辨率能夠在整體上平均分散開來,才能保證得到的象素向量序列R在視覺上不失真。
一種對二維數字信號縮放且在縱向上縮小的具體計算方法如圖1所示,包括以下步驟逐行輸入W1*H1的二維數字信號O[IO,JO],0<=IO<W1,0<=JO<H1,逐行輸出W2*H2的二維數字信號R[IR,JR],0<=IR<W2,0<=JR<H2,H2<H1,在圖像縱向縮小過程中執行以下運算,如圖1所示步驟310,初始化參數D=小于H2的任意自然數或0;C=0;JO=JR=0;A[n]=B[n]=0,n=0,…W2-1;步驟320,判斷JO>=H1是否成立,如果是,已得到輸出二維數字信號,結束,否則執行下一步;步驟330,輸入二維數字信號O中長度為W1的一行數據O[m,JO],m=0,…W1-1;重采樣為包括W2個象素的象素向量B[n],n=0,…W2-1,且令JO=JO+1;步驟340,令A[n]=A[n]+B[n],B[n]=0,n=0,…W2-1;D=D+H2;C=C+1;步驟350,如果D<H1,返回到步驟320;否則執行下一步;步驟360,輸出得到的R中的一行數據R[n,JR]=A[n]/C,A[n]=0,n=0,…W2-1;C=0;D=D-H1;JR=JR+1,返回步驟320。
從上面流程可能看出,如果將重采樣得到的一行輸出數據作為一個象素向量,則該數字圖象的縱向縮小過程就是對該象素向量序列的降采樣過程,其流程及其類似。
另一種具體的計算方法如下步驟一,初始化參數,S1=Ceil(H1/H2),S2=Floor(H1/H2);Deta=H1-H2*S2;D=任意小于H2的自然數或0;LT=S1或S2;T=0;A[n]=B[n]=0,n=0,…W2-1;JO=JR=0;步驟二,判斷JO>=H1是否成立,如果是,已得到輸出二維數字信號,結束,否則執行下一步;步驟三,輸入二維數字信號O中長度為W1的行數據O[m,JO],m=0,…W1-1;重采樣為包括W2個象素的象素向量B[n],n=0,…W2-1,且令JO=JO+1;步驟四,令A[n]=A[n]+B[n],B[n]=0,n=0,…W2-1;T=T+1;步驟五,判斷T<LT是否成立,如果是,返回步驟二;否則,執行下一步;步驟六,得到二維數字信號R中的一行數據R[n,JR]=A[n]/LT,n=0,…W2-1;T=0;A
=A[1]=…A[W2-1]=0;JR=JR+1;步驟七,令D=D+Deta,判斷D<H2是否成立,如果是,令LT=S2,返回步驟二,否則令D=D-H2;LT=S1,返回步驟二。
一種對二維數字信號縮放且在縱向上放大的具體計算方法如圖2所示,包括以下步驟逐行輸入W1*H1的二維數字信號O[IO,JO],0<=IO<W1,0<=JO<H1,逐行輸出W2*H2的二維數字信號R[IR,JR],0<=IR<W2,0<=JR<H2,H2>H1,在圖像縱向放大過程中執行以下運算,如圖2所示步驟410,初始化參數D=小于H1的任意自然數或0;A
=A[1],…=A[W2-1]=0;JO=JR=0;步驟420,判斷JO>=H1是否成立,如果是,已得到輸出二維數字信號,結束,否則執行下一步;步驟430,輸入圖像O中長度為W1的行數據O[m,JO],m=0,…W1-1;重采樣為包括W2個象素的象素向量A[n],n=0,…W2-1;令JO=JO+1;步驟440,令R[n,JR]=A[n],n=0,…W2-1;D=D+H1;JR=JR+1;步驟450,判斷D<H2是否成立,如果成立,返回步驟440,否則,令D=D-H2,返回步驟420。
同樣地,另一種具體的計算方法如下步驟一’,初始化參數S1=Ceil(H2/H1),S2=Floor(H2/H1);Deta=H2%H1;D=任意小于H1的自然數或0;LT=S1(或S2);T=0;A
=A[1],…=A[W2-1]=0;JO=JR=0;步驟二’,判斷JO>=H1是否成立,如果是,已得到輸出二維數字信號,結束,否則執行下一步;步驟三’,輸入圖像O中長度為W1的行數據O[m,JO],m=0,…W1-1;重采樣為包括W2個象素的象素向量A[n],n=0,…W2-1;令JO=JO+1;步驟四’,令R[n,JR]=A[n],n=0,…W2-1;T=T+1;JR=JR+1步驟五’,如果T<LT,返回步驟四’,否則,令D=D+Deta,T=0,執行下一步;
步驟六’,如果D>=H1,令D=D-H1,LT=S1,返回步驟二’,否則令LT=S2,返回步驟二’。
從上面的幾種算法可以看出,實際使用的緩存除了控制變量之外,只要求長度為W2的緩存A,同時,與以往使用低通濾波的方法相比,避免了使用大量的乘加操作,只需少量的加法和除法操作。
以上提供了一些具體算法,但本發明不局限于此,只要在象素序列或者象素向量序列的重采樣過程中,將不同分辨率部分平均分散開的其它算法都可以適用。
特別地,在另一實施例中,也可以采用其它的重采樣方法完成象素序列的升采樣或降采樣,也只采用上述實施例的方法來完成對象素向量序列的重采樣。同樣具有減小計算量和節約內存的效果。
顯爾易見,實施例雖然以數字圖像為例,但本發明可適用于所述的二維數字信號的縮放處理。
權利要求
1.一種對二維數字信號進行縮放的方法,用于將輸入的W1*H1的二維數字信號O[IO,JO],0<=IO<W1,0<=JO<H1在縱向上縮小,輸出W2*H2的二維數字信號R[IR,JR],0<=IR<W2,0<=JR<H2,且H2<H1,包括以下步驟逐行輸入二維數字信號O中的行數據,即長度為W1的象素序列,將其重采樣得到的長度為W2的象素序列作為一個象素向量,有X1次對得到的S1個象素向量取平均,作為輸出二維數字信號R的一行數據,有X2次對得到的S2個象素向量取平均,作為輸出二維數字信號R的一行數據,得到二維數字信號R,其中X1=H1%H2,X2=(H2-X1),S1=Ceil(H1/H2),S2=Floor(H1/H2),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,H1=S1*X1+S2*X2。
2.如權利要求1所述的方法,其特征在于,還要將X1次按S1個象素向量取平均的操作和X2次按S2個象素向量取平均的操作平均地分散開。
3.如權利要求2所述的方法,其特征在于,是通過以下步驟來實現二維數字信號縮放過程中將X1次按S1個象素向量取平均的操作和X2次按S2個象素向量取平均的操作平均地分散開的(a)初始化參數D=小于H2的任意自然數或0;C=0;JO=JR=0;A[n]=B[n]=0,n=0,...W2-1;(b)判斷JO>H1是否成立,如果是,結束,否則執行下一步;(c)輸入二維數字信號O的一行數據O[m,JO],m=0,...W1-1;重采樣為包括W2個象素的象素向量B[n],n=0,...W2-1,且令JO=JO+1;(d)令A[n]=A[n]+B[n],B[n]=0,n=0,...W2-1;D=D+H2;C=C+1;(e)如果D<H1,返回到步驟(b);否則執行下一步;(f)得到要輸出的二維數字信號R的一行數據R[n,JR]=A[n]/C,A[n]=0,n=0,...W2-1;C=0;D=D-H1;JR=JR+1,返回步驟(b)。
4.如權利要求2所述的方法,其特征在于,是通過以下步驟來實現二維數字信號縮放過程中將X1次按S1個象素向量取平均的操作和X2次按S2個象素向量取平均的操作平均地分散開的(a)初始化參數,S1=Ceil(H1/H2),S2=Floor(H1/H2);Deta=H1-H2*S2;D=任意小于H2的自然數或0;LT=S1或S2;T=0;A[n]=B [n]=0,n=0,...W2-1;JO=JR=0;(b)判斷JO>H1是否成立,如果是,結束,否則執行下一步;(c)輸入二維數字信號O中長度為W1的行數據O[m,JO],m=0,...W1-1;重采樣為包括W2個象素的象素向量B[n],n=0,...W2-1,且令JO=JO+1;(d)令A[n]=A[n]+B[n],B[n]=0,n=0,...W2-1;T=T+1;(e)如果T<LT,返回步驟(b);否則,執行下一步;(f)得到要輸出的二維數字信號R的一行數據R[n,JR]=A[n]/LT,n=0,...W2-1;T=0;A
=A[1]=...A[W2-1]=0;JR=JR+1;(g)令D=D+Deta,如果D<H2,令LT=S2,返回步驟(b),否則令D=D-H2;LT=S1,返回步驟(b)。
5.如權利要求1所述的方法,其特征在于,在將逐行輸入的二維數字信號O中的行數據,即長度為W1的象素序列,重采樣為象素向量B,即長度為W2的象素序列時,如果W1>W2,則按以下方法進行逐步輸入長度為W1的象素序列的W1個象素,有X1’次對輸入的S1’個象素取平均作為象素向量B的一個象素,有X2’次對輸入的S2’個象素取平均作為象素向量B的一個象素,從而得到象素向量B,并且將上述按S1’個象素取平均的操作和按S2’個象素取平均的操作平均地分散開,其中X1’=W1%W2,X2’=(W2-X1’),S1’=Ceil(W1/W2),S2’=Floor(W1/W2),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,W1=S1’*X1’+S2’*X2’;如果W2>W1,則按以下方法進行逐步輸入長度為W1的象素序列的W1個象素時,有X1’次將輸入的一個象素復制為S1’個象素向量B的象素,有X2’次將輸入的一個象素復制為S2’個象素向量B的象素,從而得到象素向量B,并且將上述X1’次復制操作和X2’次復制操作平均地分散開,其中X1’=W2%W1,X2’=(W1-X1’),S1’=Ceil(W2/W1),S2’=Floor(W2/W1),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,W2=S1’*X1’+S2’*X2’。
6.如權利要求1所述的方法,其特征在于,所述二維數字信號為數字圖像。
7.一種對二維數字信號進行縮放的方法,用于將輸入的W1*H1的二維數字信號O[IO,JO],0<=IO<W1,0<=JO<H1在縱向上放大,輸出W2*H2的二維數字信號R[IR,JR],0<=IR<W2,0<=JR<H2,且H1<H2,包括以下步驟逐行輸入二維數字信號O中的行數據,即長度為W1的象素序列,將其重采樣得到的長度為W2的象素序列作為一個象素向量,有X1次將得到的一個象素向量復制為S1個輸出二維數字信號R的行數據,有X2次將得到的一個象素向量復制為S2個輸出二維數字信號R的行數據,得到二維數字信號R,其中X1=H2%H1,X2=(H1-X1),S1=Ceil(H2/H1),S2=Floor(H2/H1),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,H2=S1*X1+S2*X2。
8.如權利要求7所述的方法,其特征在于,還要將X1次將重采樣得到的一個象素向量復制為S1個二維數字信號R的行數據的操作和X2次將重采樣得到的一個象素向量復制為S2個二維數字信號R的行數據的操作平均地分散開。
9.如權利要求8所述的方法,其特征在于,是通過以下步驟來實現二維數字信號縮放過程中將上述X1次象素復制操作和X2次象素復制操作平均地分散開的(a)初始化參數D=小于H1的任意自然數或0;A
=A[1],...=A[W2-1]=0;JO=JR=0;(b)如果JO>H1,已得到輸出二維數字信號,結束,否則執行下一步;(c)輸入二維數字信號O中長度為W1的行數據O[m,JO],m=0,...W1-1;重采樣為包括W2個象素的象素向量A[n],n=0,...W2-1;令JO=JO+1;(d)令R[n,JR]=A[n],n=0,...W2-1;D=D+H1;JR=JR+1;(e)如果D<H2,返回步驟(d),否則,令D=D-H2,返回步驟(b)。
10.如權利要求8所述的方法,其特征在于,是通過以下步驟來實現二維數字信號縮放過程中將上述X1次象素復制操作和X2次象素復制操作平均地分散開的(a)初始化參數S1=Ceil(H2/H1),S2=Floor(H2/H1);Deta=H2%H1;D=任意小于H1的自然數或0;LT=S1(或S2);T=0;A
=A[1],...=A[W2-1]=0;JO=JR=0;(b)如果JO>H1,結束,否則執行下一步;(c)輸入二維數字信號O中長度為W1的行數據O[m,JO],m=0,...W1-1;重采樣為包括W2個象素的象素向量A[n],n=0,...W2-1;令JO=JO+1;(d)令R[n,JR]=A[n],n=0,...W2-1;T=T+1;JR=JR+1(e)如果T<LT,返回步驟(d),否則,令D=D+Deta,T=0,執行下一步;(f)如果D>=H1,令D=D-H1,LT=S1,返回步驟(b),否則令LT=S2,返回步驟(b)。
11.如權利要求7所述的方法,其特征在于,在將逐行輸入的二維數字信號O中的行數據,即長度為W1的象素序列,重采樣為象素向量A,即長度為W2的象素序列時,如果W1>W2,則按以下方法進行逐步輸入長度為W1的象素序列的W1個象素,有X1’次對輸入的S1’個象素取平均作為象素向量A的一個象素,有X2’次對輸入的S2’個象素取平均作為象素向量A的一個象素,從而得到象素向量A,并且將上述按S1’個象素取平均的操作和按S2’個象素取平均的操作平均地分散開,其中X1’=W1%W2,X2’=(W2-X1’),S1’=Ceil(W1/W2),S2’=Floor(W1/W2),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,W1=S1’*X1’+S2’*X2’;如果W2>W1,則按以下方法進行逐步輸入長度為W1的象素序列的W1個象素時,有X1’次將輸入的一個象素復制為S1’個象素向量A的象素,有X2’次將輸入的一個象素復制為S2’個象素向量A的象素,從而得到象素向量A,并且將上述X1’次復制操作和X2’次復制操作平均地分散開,其中X1’=W2%W1,X2’=(W1-X1’),S1’=Ceil(W2/W1),S2’=Floor(W2/W1),Ceil()表示向上取整運算,Floor()表示向下取整運算,“%”表示求余運算,W2=S1’*X1’+S2’*X2’。
12.如權利要求7所述的方法,其特征在于,所述二維數字信號為數字圖像。
全文摘要
一種對二維數字信號進行縮放的方法,用于將輸入的W1*H1的二維數字信號O[IO,JO],0<=IO<W1,0<=JO<H1在縱向上縮小,輸出W2*H2的二維數字信號R[IR,JR],0<=IR<W2,0<=JR<H2,且H2<H1,逐行輸入O中的行數據,即長度為W1的象素序列,將其重采樣得到的長度為W2的象素序列作為一個象素向量,有X1次對得到的S1個象素向量取平均,有X2次對得到的S2個象素向量取平均,作為輸出二維數字信號R的一行數據,得到二維數字信號R,其中X1=H1%H2,X2=(H2-X1),S1=Ceil(H1/H2),S2=Floor(H1/H2),在縱向上放大方法類似。本發明方法可以減少二維數字信號縮放對存儲的需求和縮放過程所要求的計算量。
文檔編號H04N1/393GK1829277SQ20061001167
公開日2006年9月6日 申請日期2006年4月13日 優先權日2006年4月13日
發明者林中松, 王浩 申請人:北京中星微電子有限公司