本發(fā)明屬于數(shù)字圖像和視頻處理,特別涉及一種優(yōu)化雙線性插值和最近鄰插值鋸齒化的方法。
背景技術(shù):
1、在現(xiàn)有技術(shù)中,隨著科技的發(fā)展,特別是人工智能技術(shù)的飛躍,圖像視頻處理領(lǐng)域中可采用的方法也越來越多。在圖像處理中常用到的包括:
2、雙線性插值,又稱為雙線性內(nèi)插。常用圖像插值方式,廣泛應(yīng)用在信號處理,數(shù)字圖像和視頻處理等方面。在數(shù)學(xué)上,雙線性插值是有兩個變量的插值函數(shù)的線性插值擴(kuò)展,其核心思想是在兩個方向分別進(jìn)行一次線性插值。
3、最近鄰插值,也稱為零階插值,常用圖像插值方式,廣泛應(yīng)用在信號處理,數(shù)字圖像和視頻處理等方面。就是令變換后的像素的灰度值等于距它最近的輸入像素的灰度值。
4、然而,上述現(xiàn)有技術(shù)中存在如下缺陷:
5、1.雙線性插值雖然計算量小、速度快、縮放圖像的質(zhì)量高,但是雙線性插值在縮放圖像時不可避免會產(chǎn)生鋸齒化,縮放比例越大,越容易產(chǎn)生鋸齒化。
6、2.最近鄰插值雖然計算量小、速度快、縮放圖像質(zhì)量良好,但由于其更多是對像素的單一放大,使得線條和形狀顯得更加的層次不齊,鋸齒化現(xiàn)象更加嚴(yán)重。
7、目前已知的能有效解決鋸齒化現(xiàn)象的是使用三線性插值,三線性插值是在三維離散采樣數(shù)據(jù)的張量卷積網(wǎng)格上進(jìn)行線性插值的方法。這個張量網(wǎng)格可能在每一維度都有任意不重疊的網(wǎng)格點,這種方法通過網(wǎng)格上數(shù)據(jù)點在局部的矩形棱柱上線性地近似計算點(x,y,z)的值。雖然三線性插值效果很好,但三線性插值的計算量是雙線性插值計算量的三倍,以如此大的時間代價去優(yōu)化雙線性插值和最近鄰插值所產(chǎn)生的鋸齒化在工業(yè)上并不可取。
8、此外,現(xiàn)有技術(shù)常用的術(shù)語包括:
9、鋸齒化:鋸齒化是指圖像中從斜線和物體邊緣可以看到的一級一級的不平滑線條。
技術(shù)實現(xiàn)思路
1、為了解決上述問題,本技術(shù)的目的在于:優(yōu)化雙線性插值和最近鄰插值鋸齒化的方法,利用階梯式取像素的方法,讓生成的圖像在最大限度保證圖像細(xì)節(jié)的同時,模糊其鋸齒化區(qū)域,消除生成圖像的鋸齒感,最后還能夠滿足工業(yè)上對于時間的要求。最終消除在圖像處理中,雙線性插值和最近鄰插值縮放圖像時產(chǎn)生的鋸齒化。
2、具體地,本發(fā)明提供一種優(yōu)化雙線性插值和最近鄰插值鋸齒化的方法,所述方法利用階梯式取像素,包括以下步驟:
3、s1,獲取寬w方向的縮放比例,輸入圖像寬src_w/輸出圖像寬dst_w,位于寬、高的圖像坐標(biāo)系中,w方向縮放比例如下:
4、width_scale=(float)src_w/(float)dst_w;
5、s2,獲取高h(yuǎn)方向的縮放比例,輸入圖像高src_h/輸出圖像高dst_h,位于寬、高的圖像坐標(biāo)系中,h方向縮放比例如下:
6、height_scale=(float)src_h/(float)dst_h;
7、s3,通過輸出的像素點坐標(biāo)反推出輸入的像素點坐標(biāo),包括:
8、s3.1.計算寬x方向坐標(biāo)點,這里的x為輸出的寬坐標(biāo)點,x0為反推回輸入的寬坐標(biāo)點:
9、x0=(int)x*width_scale;
10、s3.2.計算高y方向坐標(biāo)點,這里的y為輸出的高坐標(biāo)點,y0為反推回輸入的高坐標(biāo)點:
11、y0=(int)y*height_scale;
12、s4,選取6個坐標(biāo)點值來參與計算,選取的坐標(biāo)分為圖像關(guān)鍵坐標(biāo)和圖像模糊坐標(biāo),圖像關(guān)鍵坐標(biāo)像素獲取圖像關(guān)鍵信息,圖像模糊坐標(biāo)獲取像素坐標(biāo)點邊緣信息,圖像關(guān)鍵坐標(biāo)和圖像模糊坐標(biāo)數(shù)量需要均衡且適中,因此,選取三個圖像關(guān)鍵坐標(biāo)和三個圖像模糊坐標(biāo),包括:
13、s4.1,圖像關(guān)鍵坐標(biāo):
14、a=(x0,y0),b=(x0+1,y0),c=(x0+2,y0+1);
15、(x0,y0)為輸出坐標(biāo)(x,y)根據(jù)步驟s3公式反推回的輸入坐標(biāo)點,(x0+1,y0),(x0+2,y0+1)是距離(x0,y0)的x0坐標(biāo)在3以內(nèi),y0坐標(biāo)2以內(nèi)的輸入坐標(biāo)點,與(x0,y0)坐標(biāo)的像素點值強(qiáng)相關(guān);
16、s4.2,圖像模糊坐標(biāo):
17、d=(x0+3,y0+1),e=(x0+4,y0+2),f=(x0+5,y0+2);
18、與步驟s4.1同理,(x0+3,y0+1),(x0+4,y0+2),(x0+5,y0+2)是距離(x0,y0)的x0坐標(biāo)在3以外且包括等于3的,y0坐標(biāo)在1以外且包括1的輸入坐標(biāo)點,與(x0,y0)坐標(biāo)的像素點值弱相關(guān);
19、s5,判斷是否越界,根據(jù)步驟s4中的x0和y0,糾正其坐標(biāo)點:
20、如果x0>src_w;則x0=src_w;
21、如果反推回的輸入的x坐標(biāo)大于輸入的寬,則x0取src_w;
22、如果y0>src_h;則y0=src_h;
23、如果反推回的輸入的h坐標(biāo)大于輸入的高,則y0取src_h;
24、s6,輸出坐標(biāo)(x,y)坐標(biāo)點的像素值由步驟s4的六個坐標(biāo)點的像素值推導(dǎo)而出,將這六個像素點的權(quán)重皆設(shè)置為1,即圖像關(guān)鍵坐標(biāo)和圖像模糊坐標(biāo)賦予同等權(quán)重,以期望于圖像模糊坐標(biāo)能對生成圖像起到關(guān)鍵作用,從而消除鋸齒;因此輸出坐標(biāo)dst(x,y)的像素值獲取公式為:dst(x,y)=(1*a+1*b+1*c+1*d+1*e+1*f)/6;
25、輸出坐標(biāo)(x,y)坐標(biāo)的像素點值等于s4獲取的6個坐標(biāo)的像素點值乘以各自權(quán)重1后除以坐標(biāo)點總個數(shù)6;
26、輸出坐標(biāo)(x,y)的像素點值等于輸入選取的6個坐標(biāo)像素點值求和平均:dst(x,y)=(a+b+c+d+e+f)/6。
27、所述方法通過mux3指令集實現(xiàn)優(yōu)化,其中所述mux3是基于simd指令的集合,進(jìn)一步:
28、所述步驟s1包括:計算一個批次最多能處理的輸出圖像坐標(biāo)點的個數(shù)width_cycs:
29、1)一個寄存器最多只能存儲512bit數(shù)據(jù),即64個8bit數(shù)據(jù),所以一次能處理的最大輸出數(shù)據(jù)個數(shù)width_cycs為64;
30、2)寄存器讀取bit形式只有o(256bit)/q(128bit)/d(64bit)/d(32bit),所以一次能處理的輸出數(shù)據(jù)個數(shù)width_cycs只能為1,2,4,8,16,32;
31、3)優(yōu)化是通過mxu3指令集中的gshufvb指令通過關(guān)系數(shù)組獲取到輸入數(shù)據(jù)參與計算,gshufvb指令通過每個字節(jié)低6bit來獲取到輸入圖象對應(yīng)坐標(biāo)點的數(shù)據(jù),6bit能代表的數(shù)為0-63,所以關(guān)系數(shù)組中每一批次數(shù)據(jù)的最大值與最小值差值不能高于63;因此,當(dāng)輸入數(shù)據(jù)為8bit時,width_cycs的計算公式為:
32、width_scale=(float)src_w/(float)dst_w;(寬上的縮放比例)
33、width_cycs=(int)64/width_scale;
34、映射關(guān)系式如下(width_cycs與h方向的縮放無關(guān)):
35、 關(guān)系式 width_cycs 大于等于2小于4 2 大于等于4小于8 4 大于等于8小于16 8 大于等于16小于32 16 大于等32 32
36、通過步驟s3得到width_cycs大小,再根據(jù)width_cycs的大小,提前將坐標(biāo)對應(yīng)關(guān)系保存進(jìn)數(shù)組,可節(jié)省大量的計算時間,x和y坐標(biāo)計算如下:
37、
38、
39、由此,提前將輸出與輸入的對應(yīng)關(guān)系存儲進(jìn)關(guān)系數(shù)組中;
40、根據(jù)步驟s6,利用關(guān)系數(shù)組獲取到對應(yīng)的輸入數(shù)據(jù)來并行計算,即總共獲取到6組數(shù)據(jù),每組數(shù)據(jù)包含四個輸入坐標(biāo)點,得到四個輸出坐標(biāo)點的像素值,利用mxu3指令集中的gshufvb指令可實現(xiàn)上述操作;再使用mxu3指令集中基本的加法faddw和乘法fmulw指令,一次可并行運算得出四個輸出值,減少冗余計算,優(yōu)化時間效率。
41、所述步驟s1中,假設(shè)src_w=64,dst_w=6,width_scale=10.667,則:
42、 width_scale 10.667 dst在x方向坐標(biāo) 0123456 src在x方向坐標(biāo) 0102132425364
43、當(dāng)width_cycs等于6時,一個批次儲存的src坐標(biāo)最大與最小值已經(jīng)大于63了,所以根據(jù)上面的關(guān)系式,width_cycs等于4,一個批次一次進(jìn)行4個坐標(biāo)點的計算。
44、所述gshufvb指令與具體實現(xiàn)流程如下所示:
45、
46、所述方法使用輸出圖像與輸入圖像的對應(yīng)關(guān)系,將關(guān)系數(shù)組提前儲存進(jìn)數(shù)組中,再通過gshufvb指令從關(guān)系數(shù)組和輸入數(shù)據(jù)中批量獲取數(shù)據(jù)進(jìn)行計算,當(dāng)關(guān)系數(shù)組存儲32個數(shù)據(jù)時,時間優(yōu)化效率最大,優(yōu)化效率超過98%。
47、由此,本技術(shù)的優(yōu)勢在于:
48、本文提出方法相對于雙線性插值和最近鄰插值的優(yōu)勢主要是鋸齒消除和時間優(yōu)化:
49、a.鋸齒消除:一張圖像的每個像素與周邊像素都有一定關(guān)聯(lián),當(dāng)像素距離越遠(yuǎn)時這種關(guān)聯(lián)就越淺,當(dāng)像素間距離越近時這種關(guān)聯(lián)就越深。如下所示,本文使用階梯式獲取像素的方式來獲取所需要的6個像素點值(1,2,3,4,5,6),并將6個像素點值相加求平均最后生成圖最終的像素點值。其中1是圖像變換后的距它最近的輸入像素點,2和3是與其具有強(qiáng)相關(guān)的像素點,以此來保證生成圖像的像素點細(xì)節(jié)。4、5以及6這三個像素點是與1像素點較遠(yuǎn)的像素點,與1像素點的關(guān)聯(lián)性較弱,將這三個像素點的像素值涵蓋其中是為了模糊生成圖像,以此來達(dá)到消除鋸齒的效果。
50、 1 2 3 4 5 6
51、從雙線性插值(圖2)和本方法的階梯取值(圖3)的對比圖可以明顯看出,雙線性插值生成的圖的左上角鋸齒化明顯,而階梯取值所生成的圖左上角鋸齒明顯減少,效果得到大幅度提升的同時還保證了計算量和生成圖像的質(zhì)量。
52、b.時間優(yōu)化:雖然本文提出的算法相對雙線性插值選取了更多的坐標(biāo)點,但是減少了權(quán)重的計算以及減少了大量的乘法計算以及權(quán)重的取值,擁有更少的計算量,優(yōu)化了相應(yīng)時間,更滿足工業(yè)上的需求的。本文提出的階梯取像素方法相對雙線性插值縮放圖像方法的時間優(yōu)化比例為7%。