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