一種雙三次插值誤差累積消除方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于圖像處理技術(shù)領(lǐng)域,尤其涉及一種用于圖像縮放的雙三次插值誤差累 積消除方法及裝置。
【背景技術(shù)】
[0002] 圖像縮放在數(shù)字圖像處理中很常見,在安防產(chǎn)品的應(yīng)用中也很廣泛。圖像縮放算 法可分為基于邊緣的圖像縮放算法和不基于邊緣的圖像縮放算法。前者縮放后的視覺效果 很好,但硬件實現(xiàn)難度大;后者縮放后的視覺效果稍差,但易于用硬件實現(xiàn),因此在工程上 被廣泛采用。常見的不基于邊緣的圖像縮放算法有雙線性插值算法和雙三次插值算法。相 比之下,基于雙三次插值算法的圖像縮放效果更佳,但硬件資源開銷較大。
[0003]雙三次插值算法的基本原理是:對于等間隔的已知采樣點X-1,XQ,XI,X2,其采樣值 為f(X-l)、f(XQ)、f(Xl)、f(X2),x為待求插值點,插值計算值為f(x),所求插值點可以用表達(dá) 另
I示,BP插值結(jié)果f(x)等于各采樣值f(x-1)、f(x〇)、f(xi)、f (X2 )的加權(quán)求和,其中u(Sk)為加權(quán)系數(shù),Sk為x到Xk的歸一化距離。
[0004]將雙三次插值算法移植到二維圖像上,如圖1所示,利用表達(dá)式
~可以先在水平方向上根據(jù);^0、;^1、€2、€3計算出?(),根據(jù)€4、;^5、 ;1^6、;^7計算出?1,根據(jù)€8、€9、;^10、;^11計算出?2,根據(jù);^12、;^13、€14、;^15計算出?3,然后根據(jù)?〇、?1、F2、F3計算出最后的結(jié)果F。從而實現(xiàn)圖像的縮放。
[0005]在圖像縮放中,根據(jù)雙三次插值計算公另
旨值點X的 定位非常關(guān)鍵,很明顯插值點X的位置決定插值點到4個采樣點的距離u(sk),甚至影響到能 否準(zhǔn)確找到4個采樣點f(xk)。如圖2所示,縮放前原始圖像從0開始按非負(fù)整數(shù)編號,形成的 坐標(biāo)區(qū)間,采樣點和插值點都在這個坐標(biāo)區(qū)間內(nèi);原始點就是縮放前的12個像素點,采樣 點取自原始點;插值點就是縮放后的像素點,插值點的個數(shù)取決于縮放比例,如12個點放大 2倍插值點就有24個點。
[0006]對所有插值點從0進(jìn)行編號,每個插值點有一個編號,如0、1、……23。其中步長就 是坐標(biāo)區(qū)間內(nèi)相鄰插值點之間的距離,體現(xiàn)到坐標(biāo)區(qū)間內(nèi),由于相鄰原始點之間距離為1, 因此"步長=原始點個數(shù)/插值點個數(shù)=1/縮放比",如12到達(dá)到24,縮放比為2,步長=12/ 24 = 1/2 = 0.5〇
[0007]顯然插值點的定位其實就是插值點坐標(biāo)計算,顯然:插值點坐標(biāo)=插值點編號*步 長。如圖2中,編號為5的插值點,其,坐標(biāo)= 5*0.5 = 2.5,進(jìn)一步可以定位到4個采樣點坐標(biāo): 1、2、3、4,相應(yīng)的81{為1.5、0.5、0.5、1.5 ;再如編號為14的插值點,其,坐標(biāo)=14*0.5 = 7,進(jìn) 一步可以定位到4個采樣點坐標(biāo):6、7、8、9,相應(yīng)的sk為1、0、0、2。
[0008]然當(dāng)"1/縮放比"不能被除盡時,如1/3、1/7等,會產(chǎn)生無限位小數(shù),在工程實現(xiàn)中 必須有小數(shù)位取舍,形成誤差,這種舍入誤差將影響4個采樣點的距離u(sk),甚至影響到能 否準(zhǔn)確找到4個采樣點f(xk)。舍入后的實際步長與理論步長存在差異,導(dǎo)致某些插值點坐 標(biāo)嚴(yán)重偏離,產(chǎn)生誤差。
[0009] 現(xiàn)有技術(shù)在消除誤差方面,方法一是先做除法舍入,再做步長累加,便于FPGA實 現(xiàn),但是誤差累積;方法二是先做步長累積,再做除法舍入,誤差不累積,但是FPGA資源開銷 大。方法一的問題是插值點編號越大,誤差累積越大,當(dāng)誤差累積到一定程度后,采樣點xk 和采樣點距離sk都會嚴(yán)重偏離,導(dǎo)致圖像出現(xiàn)橫豎條紋。方法二的問題是乘法器和除法器 位寬都比較寬,很消耗FPGA資源,而且邏輯實現(xiàn)除法器不光資源開銷大,而且時序控制難, 延遲大。
【發(fā)明內(nèi)容】
[0010] 本發(fā)明的目的是提供一種雙三次插值誤差累積消除方法及裝置,用于消除誤差累 積,同時又不需要復(fù)雜的FPGA實現(xiàn)電路。
[0011 ]為了實現(xiàn)上述目的,本發(fā)明技術(shù)方案如下:
[0012] 一種雙三次插值誤差累積消除方法,所述方法包括:
[0013] 根據(jù)設(shè)定的縮放比,確定進(jìn)行補償?shù)牡诙a償循環(huán)值;
[0014] 在插值時,初始化首個插值點坐標(biāo)與首個原始點坐標(biāo)一致,并設(shè)置第二計數(shù)器為 〇,插值點計數(shù)器為〇,開始對插值點進(jìn)行計數(shù),每增加一個插值點第二計數(shù)器、插值點計數(shù) 器均加1,當(dāng)?shù)诙嫈?shù)器計數(shù)達(dá)到第二補償循環(huán)值減一時,對當(dāng)前插值點坐標(biāo)進(jìn)行補償,并 對第二計數(shù)器進(jìn)行清零,繼續(xù)進(jìn)行計數(shù)和插值直至完成插值。
[0015] 其中,在縮放比是放大時,所述第二補償循環(huán)值等于縮放比,在縮放比是縮小時, 所述第二補償循環(huán)值等于1/縮放比,所述當(dāng)?shù)诙嫈?shù)器計數(shù)達(dá)到第二補償循環(huán)值減一時, 對當(dāng)前插值點坐標(biāo)進(jìn)行補償,其中:
[0016]當(dāng)前插值點坐標(biāo)=插值點計數(shù)器計數(shù)值*理論步長;
[0017] 所述理論步長=1/縮放比。
[0018] 進(jìn)一步地,所述方法還包括:
[0019] 根據(jù)設(shè)定的補償值和縮放比,確定進(jìn)行補償?shù)牡谝谎a償循環(huán)值;
[0020] 在初始化首個插值點坐標(biāo)與首個原始點坐標(biāo)一致時,還設(shè)置第一計數(shù)器為0,開始 對插值點進(jìn)行計數(shù),每增加一個插值點第一計數(shù)器加1,當(dāng)?shù)谝挥嫈?shù)器計數(shù)達(dá)到第一補償循 環(huán)值減一時,對當(dāng)前插值點坐標(biāo)根據(jù)第一補償循環(huán)值進(jìn)行補償,并對第一計數(shù)器進(jìn)行清零, 繼續(xù)進(jìn)行計數(shù)和插值直至完成插值;
[0021] 所述當(dāng)?shù)诙嫈?shù)器計數(shù)達(dá)到第二補償循環(huán)值減一時,對當(dāng)前插值點坐標(biāo)進(jìn)行補償 之后,還對第一計數(shù)器進(jìn)行清零。
[0022]其中,所述第一補償循環(huán)值根據(jù)如下公式計算:
[0023]第一補償循環(huán)值=R0UND(補償值/單步誤差);
[0024] 單步誤差=理論步長-實際步長;
[0025] 所述實際步長=R0UNDD0WN(理論步長)=R0UNDD0WN(1/縮放比)。
[0026] 進(jìn)一步地,所述當(dāng)?shù)谝挥嫈?shù)器計數(shù)達(dá)到第一補償循環(huán)值減一時,對當(dāng)前插值點坐 標(biāo)根據(jù)第一補償循環(huán)值進(jìn)行補償,其中:
[0027] 當(dāng)前插值點坐標(biāo)=前一插值點坐標(biāo)+實際步長+補償值。
[0028]本發(fā)明還同時提出了一種雙三次插值誤差累積消除裝置,所述裝置包括:
[0029] 初始化模塊,用于根據(jù)設(shè)定的縮放比,確定進(jìn)行補償?shù)牡诙a償循環(huán)值;
[0030] 插值模塊,用于在插值時,初始化首個插值點坐標(biāo)與首個原始點坐標(biāo)一致,并設(shè)置 第二計數(shù)器為0,插值點計數(shù)器為0,開始對插值點進(jìn)行計數(shù),每增加一個插值點第二計數(shù) 器、插值點計數(shù)器均加1,當(dāng)?shù)诙嫈?shù)器計數(shù)達(dá)到第二補償循環(huán)值減一時,對當(dāng)前插值點坐 標(biāo)進(jìn)行補償,并對第二計數(shù)器進(jìn)行清零,繼續(xù)進(jìn)行計數(shù)和插值直至完成插值。
[0031] 進(jìn)一步地,所述初始化模塊還用于根據(jù)設(shè)定的補償值和縮放比,確定進(jìn)行補償?shù)?第一補償循環(huán)值;所述插值模塊還用于在初始化首個插值點坐標(biāo)與首個原始點坐標(biāo)一致 時,還設(shè)置第一計數(shù)器為0,開始對插值點進(jìn)行計數(shù),每增加一個插值點第一計數(shù)器加1,當(dāng) 第一計數(shù)器計數(shù)達(dá)到第一補償循環(huán)值減一時,對當(dāng)前插值點坐標(biāo)根據(jù)第一補償循環(huán)值進(jìn)行 補償,并對第一計數(shù)器進(jìn)行清零,繼續(xù)進(jìn)行計數(shù)和插值直至完成插值;
[0032] 所述插值模塊在第二計數(shù)器計數(shù)達(dá)到第二補償循環(huán)值減一時,對當(dāng)前插值點坐標(biāo) 進(jìn)行補償之后,還對第一計數(shù)器進(jìn)行清零。
[0033] 本發(fā)明提出的一種雙三次插值誤差累積消除方法及裝置,采用兩層循環(huán)的方式來 補償/消除步長誤差累積,F(xiàn)PGA實現(xiàn)電路簡單,節(jié)省資源,能有效控制圖像縮放雙三次插值 由于步長誤差累積導(dǎo)致的圖像橫豎紋現(xiàn)象。
【附圖說明】
[0034]圖1為圖像縮放的雙三次插值算法基本原理圖;
[0035]圖2為雙三次插值算法的插值點示意圖;
[0036]圖3為本發(fā)明雙三次插值誤差累積消除方法流程圖;
[0037]圖4本發(fā)明一個實施例插值示意圖。
【具體實施方式】
[0038]下面結(jié)合附圖和實施例對本發(fā)明技術(shù)方案做進(jìn)一步詳細(xì)說明,以下實施例不構(gòu)成 對本發(fā)明的限定。
[0039]本實施例一種雙三次插值誤差累積消除方法,對先做除法舍入再做步長累加的現(xiàn) 有技術(shù)方案中出現(xiàn)的累積誤差進(jìn)行消除,即便于FPGA實現(xiàn),又能夠有效消除累積誤差?;?雙三次插值的基本原理,如果對圖像進(jìn)行放大處理,在縮放比SR確定時,那么一定每隔SR個 插值點,就會出現(xiàn)插值點與原始點重合的狀況;如果對圖像進(jìn)行縮小處理,那么一定每隔1/ SR個原始點,就會出現(xiàn)插值點與原始點重合。從而可以在圖像放大時,每隔SR個插值點,采 用原始點坐標(biāo)作為插值點坐標(biāo),完成補償;在圖像縮小時,每隔1/SR個原始點,采用原始點 坐標(biāo)作為插值點坐標(biāo),完成補償。
[0040] 如圖3所示,本實施例一種雙三次插值誤差累積消除方法,包括步驟:
[0041] 步驟S1、根據(jù)設(shè)定的縮放比,確定進(jìn)行補償?shù)牡诙a償循環(huán)值