一種視頻旋轉(zhuǎn)方法
【專利摘要】本申請(qǐng)公開(kāi)了一種視頻旋轉(zhuǎn)方法,包括:確定源視頻的圖像分辨率和目標(biāo)縮放率,在目標(biāo)旋轉(zhuǎn)角度和目標(biāo)縮放率下,按照預(yù)先確定出的縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系,直接根據(jù)源視頻每幀的各像素值計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值,并按照計(jì)算結(jié)果進(jìn)行顯示。應(yīng)用本申請(qǐng),能夠大大降低對(duì)系統(tǒng)內(nèi)存的消耗。
【專利說(shuō)明】一種視頻旋轉(zhuǎn)方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及視頻處理技術(shù),特別涉及一種視頻旋轉(zhuǎn)方法。
【背景技術(shù)】
[0002]現(xiàn)有的智能多媒體播放設(shè)備在播放視頻時(shí)可由內(nèi)置方向傳感器獲知設(shè)備屏幕的角度變化從而進(jìn)行90度、180度或者270度的旋轉(zhuǎn)。視頻的旋轉(zhuǎn)多數(shù)可以通過(guò)硬件設(shè)備,如視頻處理芯片的相應(yīng)功能完成。但當(dāng)沒(méi)有可完成類似功能的硬件設(shè)備存在時(shí),或者該硬件設(shè)備不提供相應(yīng)的旋轉(zhuǎn)功能接口時(shí),視頻播放器需要采用軟件處理的方法對(duì)解碼后并即將顯示的視頻圖像進(jìn)行旋轉(zhuǎn),而后進(jìn)行顯示。
[0003]現(xiàn)有的采用軟件處理方式對(duì)圖像進(jìn)行90/180/270度旋轉(zhuǎn)的方法包括兩個(gè)步驟:
[0004]I)保持原圖像寬高比的圖像縮放:因?yàn)閳D像顯示區(qū)域的大小恒定,當(dāng)90/270旋轉(zhuǎn)后,圖像的寬、高發(fā)生交換可能會(huì)超出顯示區(qū)域的大小,若需要將旋轉(zhuǎn)后的圖像仍然顯示在該顯示區(qū)域,則需要將圖像進(jìn)行縮放,如圖1所示。(180度旋轉(zhuǎn)不需要此步驟,其旋轉(zhuǎn)后的寬度和高度不變)
[0005]2) 90/180/270度旋轉(zhuǎn)時(shí)查找目的圖像的每個(gè)像素點(diǎn)在縮放后的原圖像上對(duì)應(yīng)的像素點(diǎn),并拷貝該像素值。
[0006]對(duì)于需要旋轉(zhuǎn)的圖像無(wú)論是從硬件或軟件視頻解碼器輸出,一般多存儲(chǔ)于一維的連續(xù)內(nèi)存。因此上述旋轉(zhuǎn)方法存在以下缺點(diǎn):
[0007]I)需要中央處理器(CPU)消耗大量的乘法、加法運(yùn)算和內(nèi)存訪問(wèn)操作在逐像素的坐標(biāo)計(jì)算和數(shù)據(jù)存取上。導(dǎo)致每幀視頻圖像的旋轉(zhuǎn)操作速度過(guò)慢,尤其對(duì)高清(HD,1280x720分辨率)、全高清(Ful I HD 1920x1080分辨率)的視頻圖像的旋轉(zhuǎn)速度遠(yuǎn)遠(yuǎn)超過(guò)可流暢播放視頻的最低限制。
[0008]2)縮放和旋轉(zhuǎn)需要先后進(jìn)行,而且需要儲(chǔ)存中間過(guò)程的圖像(即縮放后的圖像),對(duì)系統(tǒng)內(nèi)存消耗較大。
【發(fā)明內(nèi)容】
[0009]本申請(qǐng)?zhí)峁┮环N視頻旋轉(zhuǎn)方法,能夠降低視頻旋轉(zhuǎn)過(guò)程中對(duì)內(nèi)存的消耗。
[0010]一種視頻旋轉(zhuǎn)方法,包括:
[0011]確定源視頻的圖像分辨率和目標(biāo)縮放率,按照目標(biāo)旋轉(zhuǎn)角度和所述目標(biāo)縮放率,根據(jù)源視頻每幀的各像素值和預(yù)先確定出的縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系,計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值,并按照計(jì)算結(jié)果進(jìn)行顯示;
[0012]其中,所述縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為預(yù)先根據(jù)縮放法則的縮放前像素值和縮放后像素值間的函數(shù)關(guān)系以及90/180/270度旋轉(zhuǎn)的旋轉(zhuǎn)前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系確定的;其中,90度旋轉(zhuǎn)的旋轉(zhuǎn)前像素值和旋轉(zhuǎn)后像素值間的
H
函數(shù)關(guān)系為v(x,y) = 〃(.ι\--l-x),x=0,1,...,H/r-1, y = 0,1,...,W/r-1 ;180 度旋轉(zhuǎn)
r的旋轉(zhuǎn)前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為v(x,y) =u(ff-1-x, H-l-y), x=0,1,...,W-1, y = O, I,..., H-1 ;270度旋轉(zhuǎn)的旋轉(zhuǎn)前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為W
v(x,y) = ?/(--1 —).’,x) , x=0,1,..., H/r-1, y = O, 1,..., ff/r-1 ;v(x, y)為旋轉(zhuǎn)后坐標(biāo)為
(x,y)點(diǎn)的像素值,u(x' ,y')為縮放后、旋轉(zhuǎn)前坐標(biāo)為(X' y')點(diǎn)的像素值;W和H分別為所述源視頻的寬度和高度,r為所述目標(biāo)縮放率。
[0013]較佳地,該方法進(jìn)一步包括:在確定所述源視頻的圖像分辨率和目標(biāo)縮放率之后、計(jì)算旋轉(zhuǎn)后目標(biāo)視頻每幀的各像素值前,該方法進(jìn)一步包括:
[0014]將所述縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系分解為坐標(biāo)點(diǎn)表達(dá)式部分和像素值表達(dá)式部分,并將分解出的各個(gè)所述坐標(biāo)點(diǎn)表達(dá)式部分分解為若干乘法操作的求和操作;對(duì)于任一所述乘法操作,對(duì)應(yīng)旋轉(zhuǎn)后視頻各坐標(biāo)點(diǎn)(x,y)計(jì)算該乘法操作的結(jié)果,并對(duì)應(yīng)(X,y)進(jìn)行保存;其中,像素值表達(dá)式部分是對(duì)坐標(biāo)點(diǎn)表達(dá)式部分的結(jié)果進(jìn)行處理的操作;
[0015]所述計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值包括:對(duì)應(yīng)旋轉(zhuǎn)后視頻每幀的任一坐標(biāo)點(diǎn)(X,y),查找對(duì)應(yīng)該取值保存的各所述乘法操作的結(jié)果,并根據(jù)相應(yīng)的結(jié)果計(jì)算各所述坐標(biāo)點(diǎn)表達(dá)部分的處理結(jié)果,再將該處理結(jié)果代入所述像素值表達(dá)式部分,計(jì)算任一坐標(biāo)點(diǎn)(X,y)的像素值。
[0016]較佳地,在所述對(duì)應(yīng)旋轉(zhuǎn)后視頻各坐標(biāo)點(diǎn)(X,y)計(jì)算各所述乘除法操作的結(jié)果并對(duì)應(yīng)(x,y)進(jìn)行保存后,計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值前,該方法進(jìn)一步包括:將旋轉(zhuǎn)后視頻的每幀圖像從上到下均分為N個(gè)部分,分別分配給N個(gè)旋轉(zhuǎn)線程;所述N為預(yù)設(shè)的整數(shù);
[0017]在計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值時(shí),各個(gè)旋轉(zhuǎn)線程并行進(jìn)行相應(yīng)部分圖像坐標(biāo)點(diǎn)(X,y)的像素值計(jì)算;其中,對(duì)應(yīng)(X,y)保存的各所述乘除法操作的結(jié)果在每個(gè)線程中
保存一份。
[0018]較佳地,N個(gè)線程中的第i個(gè)線程計(jì)算旋轉(zhuǎn)后視頻中第+F/r行到第
/ r -1,r / r -1)行的坐標(biāo)點(diǎn)的像素值。
[0019]較佳地,所述縮放法則為最近鄰域法;
[0020]所述縮放前像素值和縮放后像素值間的函數(shù)關(guān)系為:u (X,y) =f (xr, yr),f (xr,yr)為縮放前坐標(biāo)點(diǎn)(xr, yr)的像素值;
[0021]90度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:v(x,y)=f(yr,(H/r-l-x)r) ; 180度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:v(x,y) =f (ff-l-x, H-l-y) ;270度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:V(x, y)=f((ff/r-l-y)r, xr)。
[0022]較佳地,當(dāng)所述縮放前的像素值和縮放后的像素值均按照光柵掃描順序分別利用一維數(shù)組src[]和dst[]表示時(shí),90度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:dst[yH/r+x]=src[(H/r-l-x)Wr+yr] ;180度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:dSt[yW+X]=Src[W(H-l-y)+W-l-X] ;270度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:dst[yH/r+x]=src[xWr+(W/r-l-y)r]。[0023]較佳地,所述目標(biāo)旋轉(zhuǎn)角度為90度時(shí),所述坐標(biāo)點(diǎn)表達(dá)式部分包括:yH/r+X和(H/r-1-x) Wr+yr ;乘法操作包括:yH/r、(H/r-l_x)Wr 和 yr ;
[0024]所述目標(biāo)旋轉(zhuǎn)角度為180度時(shí),所述坐標(biāo)點(diǎn)表達(dá)式部分包括:yW+x和W (H-1-y) +ff-1-χ ;乘法操作包括:yW 和 W (H-1-y);
[0025]所述目標(biāo)旋轉(zhuǎn)角度為270度時(shí),所述坐標(biāo)點(diǎn)表達(dá)式部分包括:yH/r+X和xWr+(W/r-l-y)r ;乘法操作包括:yH/r、xWr 和(W/r-l-y)r。
[0026]較佳地,當(dāng)所述縮放前的像素值和縮放后的像素值均按照光柵掃描順序利用一維數(shù)組表示、且目標(biāo)縮放率〈I時(shí),
[0027]對(duì)于90度和270度的旋轉(zhuǎn),在計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值時(shí)按照列優(yōu)先順序進(jìn)行;
[0028]對(duì)于180度的旋轉(zhuǎn),在計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值時(shí)按照行優(yōu)先順序進(jìn)行。
[0029]由上述技術(shù)方案可見(jiàn),確定源視頻的圖像分辨率和目標(biāo)縮放率,在目標(biāo)旋轉(zhuǎn)角度和目標(biāo)縮放率下,按照預(yù)先確定出的縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系,直接根據(jù)源視頻每幀的各像素值計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值,并按照計(jì)算結(jié)果進(jìn)行顯示。上述處理方式中,不需要將縮放和旋轉(zhuǎn)的操作先后分兩步執(zhí)行,而是直接一步完成縮放加旋轉(zhuǎn),從而避免了在處理過(guò)程中額外占用系統(tǒng)內(nèi)存存儲(chǔ)縮放后圖像,大大降低了對(duì)系統(tǒng)內(nèi)存的消耗。
[0030]進(jìn)一步地,可以將縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系中僅與坐標(biāo)點(diǎn)相關(guān)的處理分離出來(lái),對(duì)應(yīng)旋轉(zhuǎn)后視頻的各坐標(biāo)點(diǎn),一次性計(jì)算相應(yīng)的處理結(jié)果并對(duì)應(yīng)相應(yīng)的坐標(biāo)點(diǎn)進(jìn)行保存。在實(shí)際播放視頻圖像時(shí),根據(jù)坐標(biāo)點(diǎn)對(duì)應(yīng)查找相應(yīng)的處理結(jié)果,再利用該處理結(jié)果計(jì)算旋轉(zhuǎn)后的像素值,從而在視頻圖像處理過(guò)程中,避免在每一幀圖像處理時(shí),都要實(shí)時(shí)進(jìn)行所有函數(shù)關(guān)系的運(yùn)算,而只需要在最初計(jì)算一次坐標(biāo)點(diǎn)相關(guān)的運(yùn)算,之后可以直接利用初次計(jì)算結(jié)果,大大降低了實(shí)時(shí)運(yùn)算量,提高圖像處理速度;同時(shí),還可以將每一幀圖像分成多個(gè)部分,利用多線程并行進(jìn)行每個(gè)部分的圖像旋轉(zhuǎn),再合成顯示,從而進(jìn)一步提高處理速度。
【專利附圖】
【附圖說(shuō)明】
[0031]圖1為現(xiàn)有方法全高清視頻90度旋轉(zhuǎn)示意圖;
[0032]圖2為本申請(qǐng)實(shí)施例中視頻旋轉(zhuǎn)方法的具體流程圖。
【具體實(shí)施方式】
[0033]為了使本申請(qǐng)的目的、技術(shù)手段和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對(duì)本申請(qǐng)做進(jìn)一步詳細(xì)說(shuō)明。
[0034]本申請(qǐng)的基本視頻旋轉(zhuǎn)方法包括:確定源視頻的圖像分辨率和目標(biāo)縮放率,按照目標(biāo)旋轉(zhuǎn)角度和所述目標(biāo)縮放率,根據(jù)源視頻每幀的各像素值和縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系,計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值,并按照計(jì)算結(jié)果進(jìn)行顯示。
[0035]其中,縮放前像素值和旋轉(zhuǎn)后像素值間函數(shù)關(guān)系的確定方式包括:根據(jù)縮放法則中縮放前和縮放后像素值間的函數(shù)關(guān)系以及90/180/270度旋轉(zhuǎn)的旋轉(zhuǎn)前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系確定。具體地,對(duì)應(yīng)每種縮放法則,都有確定的縮放前和縮放后像素值間的函數(shù)關(guān)系,可以根據(jù)實(shí)際需要選擇縮放法則,確定相應(yīng)的函數(shù)關(guān)系;對(duì)于90度旋轉(zhuǎn),
旋轉(zhuǎn)前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為V,(A.,- O x=0,1,..., H/r-1,
r
y=0,1,..., ff/r-1 ;對(duì)于180度旋轉(zhuǎn),旋轉(zhuǎn)前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為v(x,y) =u(ff-l-x, H-l-y),x=0,1,..., ff-1, y=0,1,...,H_1 ;對(duì)于 270 度旋轉(zhuǎn),旋轉(zhuǎn)前像素值和
旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為
【權(quán)利要求】
1.一種視頻旋轉(zhuǎn)方法,其特征在于,包括: 確定源視頻的圖像分辨率和目標(biāo)縮放率,按照目標(biāo)旋轉(zhuǎn)角度和所述目標(biāo)縮放率,根據(jù)源視頻每幀的各像素值和預(yù)先確定出的縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系,計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值,并按照計(jì)算結(jié)果進(jìn)行顯示; 其中,所述縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為預(yù)先根據(jù)縮放法則的縮放前像素值和縮放后像素值間的函數(shù)關(guān)系以及90/180/270度旋轉(zhuǎn)的旋轉(zhuǎn)前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系確定的;其中,90度旋轉(zhuǎn)的旋轉(zhuǎn)前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括:在確定所述源視頻的圖像分辨率和目標(biāo)縮放率之后、計(jì)算旋轉(zhuǎn)后目標(biāo)視頻每幀的各像素值前,該方法進(jìn)一步包括: 將所述縮放前像素值與旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系分解為坐標(biāo)點(diǎn)表達(dá)式部分和像素值表達(dá)式部分,并將分解出的各個(gè)所述坐標(biāo)點(diǎn)表達(dá)式部分分解為若干乘法操作的求和操作;對(duì)于任一所述乘法操作,對(duì)應(yīng)旋轉(zhuǎn)后視頻各坐標(biāo)點(diǎn)(x,y)計(jì)算該乘法操作的結(jié)果,并對(duì)應(yīng)(X,y)進(jìn)行保存;其中,像素值表達(dá)式部分是對(duì)坐標(biāo)點(diǎn)表達(dá)式部分的結(jié)果進(jìn)行處理的操作; 所述計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值包括:對(duì)應(yīng)旋轉(zhuǎn)后視頻每幀的任一坐標(biāo)點(diǎn)(X,y),查找對(duì)應(yīng)該取值保存的各所述乘法操作的結(jié)果,并根據(jù)相應(yīng)的結(jié)果計(jì)算各所述坐標(biāo)點(diǎn)表達(dá)部分的處理結(jié)果,再將該處理結(jié)果代入所述像素值表達(dá)式部分,計(jì)算任一坐標(biāo)點(diǎn)U,y)的像素值。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述對(duì)應(yīng)旋轉(zhuǎn)后視頻各坐標(biāo)點(diǎn)(X,y)計(jì)算各所述乘除法操作的結(jié)果并對(duì)應(yīng)(X,y)進(jìn)行保存后,計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值前,該方法進(jìn)一步包括:將旋轉(zhuǎn)后視頻的每幀圖像從上到下均分為N個(gè)部分,分別分配給N個(gè)旋轉(zhuǎn)線程;所述N為預(yù)設(shè)的整數(shù); 在計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值時(shí),各個(gè)旋轉(zhuǎn)線程并行進(jìn)行相應(yīng)部分圖像坐標(biāo)點(diǎn)(x,y)的像素值計(jì)算;其中,對(duì)應(yīng)(x,y)保存的各所述乘除法操作的結(jié)果在每個(gè)線程中保存—份。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,N個(gè)線程中的第i個(gè)線程計(jì)算旋轉(zhuǎn)后視頻中第
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述縮放法則為最近鄰域法; 所述縮放前像素值和縮放后像素值間的函數(shù)關(guān)系為:u(x, y) =f (xr, yr), f (xr, yr)為縮放前坐標(biāo)點(diǎn)(xr,yr)的像素值; 90度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:v(x,y) =f (yr,(H/r-l-x)r) ;180度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:v(x,y) =f (ff-l-x, H-l-y) ;270度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:V(x, y)=f((ff/r-l-y)r, xr)。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,當(dāng)所述縮放前的像素值和縮放后的像素值均按照光柵掃描順序分別利用一維數(shù)組src[]和dst[]表示時(shí),90度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:dst[yH/r+x]=src[(H/r-l-x)Wr+yr] ;180度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:dst[yff+x] =src[ff (H-l-y) +ff-1-χ];270度旋轉(zhuǎn)的所述縮放前像素值和旋轉(zhuǎn)后像素值間的函數(shù)關(guān)系為:dst [yH/r+x]=src[xffr+(ff/r-l-y)r]。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述目標(biāo)旋轉(zhuǎn)角度為90度時(shí),所述坐標(biāo)點(diǎn)表達(dá)式部分包括:yH/r+x和(H/r-1-χ) Wr+yr ;乘法操作包括:yH/r、(H/r-l_x)Wr和yr ; 所述目標(biāo)旋轉(zhuǎn)角度為180度時(shí),所述坐標(biāo)點(diǎn)表達(dá)式部分包括:yW+x和W(H-l-y)+W-l-x ;乘法操作包括:yW和W(H-l-y); 所述目標(biāo)旋轉(zhuǎn)角度為270度時(shí),所述坐標(biāo)點(diǎn)表達(dá)式部分包括:yH/r+X和xWr+ (ff/r-1-y)r ;乘法操作包括:yH/r、xffr 和(W/r-l-y)r。
8.根據(jù)權(quán)利要求1到7中任一所述的方法,其特征在于,當(dāng)所述縮放前的像素值和縮放后的像素值均按照光柵掃描順序利用一維數(shù)組表示、且目標(biāo)縮放率〈I時(shí), 對(duì)于90度和270度的旋轉(zhuǎn),在計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值時(shí)按照列優(yōu)先順序進(jìn)行; 對(duì)于180度的旋轉(zhuǎn),在計(jì)算旋轉(zhuǎn)后視頻每幀的各像素值時(shí)按照行優(yōu)先順序進(jìn)行。
【文檔編號(hào)】G06T3/40GK103679630SQ201210320566
【公開(kāi)日】2014年3月26日 申請(qǐng)日期:2012年9月3日 優(yōu)先權(quán)日:2012年9月3日
【發(fā)明者】朱春波, 吳迪, 加納納塞卡·塞尼尼, 民時(shí)·宋, 維納·哥帕拉·拉瑪那 申請(qǐng)人:三星電子(中國(guó))研發(fā)中心, 三星電子株式會(huì)社