專利名稱:手持設備上視頻圖像的快速縮放方法
手持設備上視頻圖像的快速縮放方法
技術領域:
本發(fā)明涉及一種視頻處理技術,特別涉及一種手持設備上視頻圖像的快速縮放方法。
背景技術:
目前,手持消費電子設備上的視頻播放是一個很重要的功能,消費者要求能夠將 互聯網上的各種視頻下載到手持設備上直接進行播放,而無需提前經過轉換?;ヂ摼W上 常見的視頻格式,其分辨率千差萬別。從QVGA (32(^240像素),到VGA (640*480像素), Dl (720*480像素),再到最近兩年大量增加的720P (1280*720像素),1080P (1920*1080像 素)。所有這些不同分辨率的視頻,要在手持設備上順利播放,除了要求手持設備具有很高 的解碼性能和全面的解碼兼容性外,也無一例外要求能夠提供視頻圖像的實時縮放功能。 其主要的原因在于,手持設備受限于顯示屏(IXD)的工藝和整體成本,其顯示分辨率主要 有WQVGA08(^272像素),VGA(640*480像素)和WVGA(800*480像素)幾種。因此,要將不 同視頻的分辨率按照顯示屏(LCD)的分辨率輸出,必須在嵌入式多媒體系統設計中增加視 頻圖像的實時縮放功能。在嵌入式系統中,視頻圖像的實時縮放,一直都是整個系統設計中不可缺少的模 塊。通常,視頻圖像的縮放模塊都采用硬件或軟件來完成。采用硬件的方案,可以使用復雜 的縮放算法,縮放后質量最好。但是這一類硬件通常直接掛在系統總線上,它需要不斷的讀 取解碼器解碼得到的視頻圖像數據,經過縮放后,再送到外部存儲器或者直接送到顯示屏 (IXD)上。其一般性的系統框圖如圖Ia和圖Ib所示。圖Ia中,視頻圖像縮放模塊(Video Scaler)直接將存儲在外部存儲器(External Memory)的原始視頻圖像數據讀入其中,縮 放后再直接送到LCD上。由于原始視頻圖像數據量太大,因此在縮放模塊中設計一個同樣 大小的圖像數據緩沖來一次存儲整幀的數據的成本就變得非常高。減小內部數據緩沖的結 果必然使得Video kaler需要從外部存儲器中不斷地分批分塊讀取圖像數據進來縮放。如 果LCD的刷新率是60赫茲/秒,則Video Scaler每秒所需要從外部存儲器讀取的數據就 是60倍原始視頻圖像大小。毫無疑問,這加重了系統總線和存儲器訪問的負擔,必然反過 來影響視頻編解碼器的性能。同理,在圖Ib中的設計中,縮放后的數據重新寫回到外部存 儲器中,再從外部存儲器寫到IXD,這種方式比前一種方式進一步加重了系統負擔。為了降低系統負擔,可在視頻編解碼器(Video Decoder)內部實現Video Scaler 功能。這樣直接送到外部存儲器的是經過縮放后的解碼圖像,如此對總線帶寬和存儲器訪 問的影響遠小于上面兩個方案。Video Codec通常由可編程處理器或專用的硬件完成。采 用可編程處理器實現Video Codec,需要考慮增加的縮放模塊所帶來的復雜程度和縮放效 果,并盡量在這二者之間尋找折中。過于復雜的縮放算法會消耗大量的處理器運算資源,反 過來嚴重影響視頻解碼性能;而過于簡單的縮放算法將造成縮放后圖像的質量急劇下降。常見的視頻縮放算法包括最近領域縮放,雙線性縮放,雙立方縮放等算法。最近領 域縮放最簡單,但效果最差,極容易引起鋸齒現象。雙線性縮放是一種被廣泛使用的縮放算法。一般的,縮放倍數在0. 5倍以上,2倍以下的,采用雙線性縮放對任何圖像的縮放結果都 是完全可以接受的。在0.5倍以下,2倍以上的縮放效果存在一定下降。雙線性縮放的不足 之處在于二維方向上每縮放一個點需要共計8次乘累加。這在軟件上存在一定量的開銷。 雙立方縮放的效果更好,但需要增加的運算復雜度也是三個中最高的,并且遠超過前兩者。由上可知,即使采用雙線性縮放,仍需要一定的計算量,而采用最近領域縮放的質 量卻是最差的??紤]到視頻最大的原始分辨率為1080P(1920*1088像素),最小的原始分 辨率基本在QVGA(32(^240像素)左右。而通常需要縮放到的目標分辨率都是IXD的顯示 分辨率,即介于WQVGA 08(^272像素)和WVGA (800*480像素)之間,可見縮小的最大倍數 是4倍,而放大的倍數是3倍左右,即縮放倍數介于原始視頻圖像的0. 25到3倍之間。因 此,本發(fā)明綜合考慮了最近領域和雙線性縮放,同時結合了視頻圖像的組織方式,提出一種 縮放方法,可有效減少運算量,尤其是乘累加的次數,同時縮放后的質量顯著好于最近領域 縮放,逼近雙線性縮放效果。圖像縮放的一般方法從一維方向上看,可以表示成如下形式。以X方向縮放為 例Xs = kxd其中,xd表示縮放后點的χ坐標,Xs表示對應的縮放前點的χ坐標,k表示縮放的 倍數。從此表達式來看,它和直線方程是一致的。既然如此,通用的畫直線方法也一樣適用 于 χ 方向的縮放° 在文獻 Jack Ε. Bresenham, “ Algorithm for computer control of a digital plotter" , IBM Systems Journal, Vol. 4, No. 1, January 1965, pp. 25-30
的Bresenham直線繪制(Bresenham Line Drawing)算法是最為常見的直線畫法。它的基 本原理如下1.畫第i點P(Xi,Yi),Xi表示P點在水平方向上的坐標,Yi表示P點在垂直方向 上的坐標,其像素值表示為PixelO^yi);2.準備畫第i+1點,χ坐標加1,即xi+1 = Xi+1 ;判斷如果達到終點,則完成;否則, 由圖2可知,下個要畫的點或者是當前點的右鄰接點B(注申請人指明是哪一點,最好能在 圖中有相應標示),或者是當前點的右上鄰接點A ;3.如果直線方程y = kx與xi+1的交點的y坐標大于M(Xi,yi+0.5)的y坐標的話, 下個點即A(xw,yi+1),像素值為Pixel(xi+1,yi+1);否則,下個點為B (xi+1,yi),其像素值為 Pixel (xi+1, Yi);4.畫點 A(xi+1,yi+1)或者 B(xi+1,y);5.跳回第2步。上述的Bresenham直線繪制算法借助于一個誤差量(直線與當前實際繪制像素點 的距離),來確定下一個像素點的位置。該算法的巧妙之處在于采用增量計算,使得對于每 一列,只要檢查誤差量的符號,就可以確定該下一列的像素位置。采用該算法繪制直線,雖然下一個點的獲取可由一次比較完成,但直線的效果還 是比較粗糙的。利用該算法原理進行圖像縮放,其質量和最近領域法本質是一樣的。文 獻 Riemersma, Thiadmer ; “ Quick and smooth image scaling with Bresenham “ ;Dr. Dobb ' s Journal ;May 2002.提出了 一禾中 smooth scaling with Bresenham。其核心思想是在Bresenham直線繪制(Bresenham Line Drawing)算法基礎上引入半像素。參考圖2,若對應的y坐標在N點,由于N點的y坐標大于M點的y坐標, 則該點像素值和M點相同,其像素值為pixel (xi+1, yi+0.5),它是對A點和B點的像素值求平 均得到的。若小于M點的y坐標,則取B(xi+1,yi)的像素值PiXel(Xi+1,yi)。該算法相對于 Bresenham直線繪制,很好的解決了縮放比例在0. 5 2倍之間的圖像效果,計算量也非常 小,僅增加了一次平均值的計算。但對于0.5 2之外的縮放倍數,圖像效果下降比較明顯, 會出現明顯的鋸齒。由此,本發(fā)明在該基礎上,進一步提高圖像縮放精度,且計算量小,可實 現快速縮放。
發(fā)明內容本發(fā)明要解決的技術問題,在于提供一種視頻的快速縮放方法,可有效減少運算 量,尤其是乘累加的次數,實現快速縮放,同時縮放后的質量顯著好于最近領域縮放,逼近 雙線性縮放效果。本發(fā)明是這樣實現的一種手持設備上視頻圖像的快速縮放方法,包括水平方向 上的縮放和垂直方向上的縮放;其特征在于將水平方向或垂直方向上的每個像素長度均 分為四等分,形成四個等分參照區(qū)間,每個等分參照區(qū)間具有兩個端點的坐標值;之后按下 述步驟進行操作首先沿水平方向上畫點,完成后再沿垂直方向畫點;亦可以首先沿垂直 方向上畫點,完成后再沿水平方向上畫點;其中沿水平方向上畫點包括步驟11、畫第i點P(Xi,Yi),i是為方便敘述而引入的索引,Xi表示P在縮放后水 平方向上的坐標,Ii對應P在縮放前水平方向上的坐標,其像素值表示為pixel (Xi, Yi);步驟12、判斷是否達到終點,若達到終點,則退出沿水平方向上畫點的過程;否 則,準備畫第i+1點,對Xi坐標加1得到xi+1,即xi+1 = Xi+1 ;步驟13、確定第i+Ι點的縮放前水平方向像素值構建水平方向上的縮放直線方 程71 = klXi,式中的\表示縮放后點的水平方向坐標,Yi表示對應的縮放前點的水平方向 坐標屯為圖像在水平方向上的縮放倍數,該直線方程與坐標軸的交點,判斷該交點的 y坐標處于Yi和之間的像素長度的哪個等分參照區(qū)間,則第i+Ι點的縮放前水平方向 像素值就取該等分參照區(qū)間下方端點的像素值;步驟14、根據步驟13所確定的第i+Ι點的縮放前水平方向像素值進行畫點;之后 返回步驟12 ;其中在垂直方向上畫點包括步驟21、畫第j點Q(Xp Yj),j是為方便敘述而引入的索引,&表示Q在縮放后垂 直方向上的坐標,Xj表示Q在縮放前垂直方向上的坐標,其像素值表示為pixel (Xj, Yj);步驟22、判斷是否達到終點,若達到終點,則退出沿垂直方向上畫點的過程;否 則,準備畫第j+Ι點,對~坐標加1得到Xjn,即Xj+1 = Xj+1 ;步驟23、確定第j+Ι點的縮放前垂直方向像素值構建垂直方向上的縮放直線方 程L = 1 ,式中的\表示縮放后點的垂直方向坐標,Yj表示對應的縮放前點的垂直方向 坐標;1 為圖像在垂直方向上的縮放倍數,該直線方程與坐標軸的交點,判斷該交點的 y坐標處于Yj和Yp1之間的像素長度的哪個等分參照區(qū)間,則第j+Ι點的縮放前垂直方向 像素值就取該等分參照區(qū)間下方端點的像素值;步驟M、根據步驟23所確定的第j+Ι點的垂直方向像素值進行畫點;之后返回步驟22 ;當水平方向和垂直方向上的點均達到終點,則結束。本發(fā)明具有如下優(yōu)點本發(fā)明所涉及到的縮放方法是以最近領域縮放和雙線性縮 放兩種方法上為基礎,再結合視頻圖像的組織方式,通過有效減少運算量,尤其是乘累加的 次數來達到視頻的快速縮放,同時縮放后的質量顯著好于最近領域縮放,逼近雙線性縮放 效果。
下面參照附圖結合實施例對本發(fā)明作進一步的說明。圖Ia和圖Ib分別為現有技術中手持設備中視頻圖像的縮放模塊的結構示意圖。圖2是現有技術中畫直線方法的原理示意圖(限于水平方向)。圖3是本發(fā)明方法的原理示意圖(限于水平方向)。圖如為一典型的視頻數據排列圖。圖4b為經過優(yōu)化策略后的視頻數據排列圖。
具體實施方式請參考圖3至圖4b,以詳細說明本發(fā)明方法。本發(fā)明仍采用經過改進的畫直線方法進行縮放,其包括水平方向上的縮放和垂直 方向上的縮放,由背景技術中的分析可知,手持設備上的視頻縮放倍數通常介于0. 25到3 倍之間。為此,在本發(fā)明方法中引入1/4像素的概念。其中將水平方向或垂直方向上的每 個像素長度均分為4等分,形成四個等分參照區(qū)間,每個等分參照區(qū)間具有兩個端點的坐 標值(對于每個像素來說,共產生兩個端點的坐標值、一個中間點即1/2像素點的坐標值以 及兩個1/4像素點的坐標值;)。采用本發(fā)明改進的畫直線方法進行縮放其中水平方向是根據公式yi = klXi計 算出縮放前源圖像的水平方向坐標,由該坐標點的像素值得到縮放后目標圖像水平方向上 的點的像素值;式中的Xi表示縮放后點的水平方向坐標,Yi表示對應的縮放前點的水平方 向坐標,ki為圖像在水平方向上的縮放倍數;垂直方向上根據公式Yj = k2Xj計算出縮放前 源圖像的垂直方向坐標,由該坐標點的像素值得到縮放后目標圖像垂直方向上的點的像素 值;Xj表示縮放后點的垂直方向坐標,y」表示對應的縮放前點的垂直方向坐標;1 為圖像在 垂直方向上的縮放倍數。&和1^2可以相等,也可以不等。之后按下述步驟進行操作首先沿水平方向上畫點,完成后再沿垂直方向上畫點; 亦可以首先沿垂直方向上畫點,完成后再沿水平方向上畫點;即水平方向上和垂直方向上 畫點不限先后,但原理相同,其中在水平方向上畫點包括步驟11、畫第i點P(Xi,Yi), i是為方便敘述而引入的索引,其表示水平方向要畫 點的個數的變量,取值為整數,Xi表示P在縮放后水平方向上的坐標,Yi表示P在縮放前水 平方向上的坐標,其像素值表示為PixelO^yi);步驟12、判斷是否達到終點,若達到終點,則退出沿水平方向上畫點的過程;否 則,準備畫第i+1點,對Xi坐標加1得到xi+1,即xi+1 = Xi+1 ;步驟13、確定第i+Ι點的縮放前水平方向像素值構建水平方向上的縮放直線方程71 = klXi,式中的\表示縮放后點的水平方向坐標,Yi表示對應的縮放前點的水平方向 坐標屯為圖像在水平方向上的縮放倍數,判斷該直線方程與坐標軸交點的y坐標處于 Yi和之間的像素長度的哪個等分參照區(qū)間,則第i+Ι點的縮放前水平方向像素值就取 該等分參照區(qū)間下方端點的像素值;如圖3所示,例如,在圖像水平方向縮放過程中,構建一個和水平方向縮放前后相 關的二維坐標系,坐標系中用4軸表示縮放后點的水平方向坐標,用yh軸表示縮放前點的 水平方向坐標,其中縮放前水平方向即yh上在yi和之間的一個像素長度兩個端點為 A和B,其坐標值分別是A(xi+1,yi+1)、BOw yi+0.5),A和B之間具有一個1/4像素點F點坐 標是(xi+1,yi+o.75),一個1/2像素點M點坐標是(xi+1,yi+0.5),另一個1/4像素點E點坐標是 (xi+1,yi+o.25)。其中根據如下的AVERAGE運算定義AVERAGE (a, b) = (a+b) /2可知,其M點、F點、E點對應的像素值為M 點Pixel (xi+1, yi+0.5) = AVERAGE (Pixel (xi+1,Yi)+Pixel (xi+1, yi+1))F 點Pixel (xi+1, yi+0.75) = AVERAGE (Pixel (xi+1,yi+1)+Pixel (xi+1, yi+0.5))E點:Pixel (xi+1, yi+0.25) = AVERAGE (Pixel (xi+1,Yi)+Pixel (xi+1, yi+0.5))如圖3所示,假設直線方程yi = klXi與坐標xi+1的交點為N,如果N點的y坐標介 于A(xi+1,yi+1)與F(xi+1,yi+a75)的y坐標之間,則第i+Ι點的縮放前水平方向像素值與F點 像素值 pixel(xi+1,yi+Q.75)相同;如果 N 點的 y 坐標介于 F(xi+1,yi+(1.75)與 M(xi+1,yi+(1.5)的 y 坐標之間,則第i+Ι點的縮放前水平方向像素值與M點像素值pixel (xi+1,yi+0.5)相同;如 果N點的y坐標介于M(xi+1,yi+0.5)與E(xi+1,yi+0.25)的y坐標之間,則第i+Ι點的縮放前水 平方向像素值就取E點的像素值pixel (xi+1, yi+0.25),否則,如果N點的y坐標介于E(xi+1, yi+0.25)與BOw yi+0.5)的y坐標之間,則第i+i點的縮放前水平方向像素值就取B點的像 素值 pixel (xi+1, Yi);步驟14、根據步驟13所確定的第i+Ι點的縮放前水平方向像素值進行畫點;更新 i值之后返回步驟12,進入下一點的畫點流程。在垂直方向上畫點可以按下述步驟進行,由于其原理與在水平方向上畫點的原理 相同,細節(jié)可參考上述在水平方向上畫點的例子,此處不再詳細說明步驟21、畫第j點Q(Xp Yj), j是為方便敘述而引入的索引,其表示垂直方向要畫 點的個數的變量,取值為整數,Yj表示Q在縮放后垂直方向上的坐標,Xj表示Q在縮放前垂 直方向上的坐標,其像素值表示為Pixel Upyj);步驟22、判斷是否達到終點,若達到終點,則退出沿垂直方向上畫點的過程;否 則,否準備畫第j+Ι點,對~坐標加1得到Xjn,即Xj+1 = Xj+1 ;步驟23、確定第j+Ι點的縮放前垂直方向像素值構建垂直方向上的縮放直線方 程ι = 1 ,式中的\表示縮放后點的垂直方向坐標,Yj表示對應的縮放前點的垂直方向 坐標;1 為圖像在垂直方向上的縮放倍數,判斷直線方程與坐標軸的交點的y坐標處于 Yj和ym之間的像素長度的哪個等分參照區(qū)間,則第j+Ι點的縮放前垂直方向像素值就取
7該等分參照區(qū)間下方端點的像素值;步驟M、根據步驟23所確定的第j+Ι點的縮放前垂直方向像素值進行畫點;更新 j值之后返回步驟22,進入下一點的畫點流程。當水平方向和垂直方向上的點均達到終點,則結束。相對于smooth scaling with Bresenham算法,本發(fā)明方法共增加了 2次比較,2 次求平均,無乘法操作,同時縮放的倍數完全滿足了手持設備上的視頻縮放倍數要求。在一些嵌入式平臺中,由于存在指令預取機制(instruction prefetch mechanism),從邏輯順序上,一旦接下來需要執(zhí)行的指令沒有預取進指令cache中,則流水 線就會被中斷,因而出現阻塞(stall),整個程序的執(zhí)行性能將明顯下降。這種阻塞現象經 常出現在判斷操作中。因此,應使用條件判斷和條件執(zhí)行指令來消除跳轉操作。解碼器解碼得到的視頻圖像是由YUV420數據組成的。如圖如所示一個典型的視 頻數據排列圖。由于UV分量已經是亞采樣,因此UV分量的縮放可以使用1/2像素的精度 進行,以獲得比Y分量縮放更小的計算量。同時在嵌入式系統設計中,U和V通常組織在一 起,構成UV對。這樣做的原因是U和V的采樣精度一致,其運動矢量也一致。其UV的排列 如下U00V00U01V01U02V02.......U(M/2) (N/2)V(M/2) (N/2)針對這個特點,U和V分量的縮放可以同時完成。由于U和V各為8比特,而該方 法唯一的像素計算就是求平均值。Ubl5Ubl4Ubl3Ubl2UbllUbloUb9Ub8jVb7Vb6Vb5Vb4Vb3Vb2VblVboV分量在進行AVERAGE計算的時候,存在進位的可能,即可能從Vb7進位到Ub8位, 如果提前將Ub8置為0,則U分量的AVERAGE結果誤差最大為1。而輕微的色度分量誤差并 不會對縮放后的質量產生過多的影響。如前所述,本發(fā)明所涉及到的縮放方法綜合考慮了最近領域和雙線性縮放,同時 結合了視頻圖像的組織方式,有效減少了運算量,尤其是乘累加的次數,同時縮放后的質量 顯著好于最近領域縮放,逼近雙線性縮放效果。雖然以上描述了本發(fā)明的具體實施方式
,但是熟悉本技術領域的技術人員應當理 解,我們所描述的具體的實施例只是說明性的,而不是用于對本發(fā)明的范圍的限定,熟悉本 領域的技術人員在依照本發(fā)明的精神所作的等效的修飾以及變化,都應當涵蓋在本發(fā)明的 權利要求所保護的范圍內。
權利要求
1. 一種手持設備上視頻圖像的快速縮放方法,包括水平方向上的縮放和垂直方向上的 縮放;其特征在于將水平方向或垂直方向上的每個像素長度均分為四等分,形成四個等 分參照區(qū)間,每個等分參照區(qū)間具有兩個端點的坐標值;之后按下述步驟進行操作首先 沿水平方向上畫點,完成后再沿垂直方向畫點;亦可以首先沿垂直方向上畫點,完成后再沿 水平方向上畫點;其中沿水平方向上畫點包括步驟11、畫第i點P(Xi,Yi),i是為方便敘述而引入的索引,Xi表示P在縮放后水平方 向上的坐標,Yi對應著P在縮放前水平方向上的坐標,其像素值表示為pixel (Xi, Yi);步驟12、判斷是否達到終點,若達到終點,則退出沿水平方向上畫點的過程;否則,準 備畫第i+Ι點,對xi坐標加1得到xi+1,即= Xi+1 ;步驟13、確定第i+Ι點的縮放前水平方向像素值構建水平方向上的縮放直線方程Yi =klXi,式中的Xi表示縮放后點的水平方向坐標,Yi表示對應的縮放前點的水平方向坐標; h為圖像在水平方向上的縮放倍數,該直線方程與坐標軸的交點,判斷該交點的y坐標 處于Yi和之間的像素長度的哪個等分參照區(qū)間,則第i+Ι點的縮放前水平方向像素值 就取該等分參照區(qū)間下方端點的像素值;步驟14、根據步驟13所確定的第i+Ι點的縮放前水平方向像素值進行畫點;之后返回 步驟12 ;其中在垂直方向上畫點包括步驟21、畫第j點Q(Xp Yj),j是為方便敘述而引入的索引,&表示Q在縮放后垂直方 向上的坐標,Xj表示Q在縮放前垂直方向上的坐標,其像素值表示為pixel (Xj, Yj);步驟22、判斷是否達到終點,若達到終點,則退出沿垂直方向上畫點的過程;否則,準 備畫第j+Ι點,對\坐標加1得到,即xj+1 = Xj+1 ;步驟23、確定第j+Ι點的縮放前垂直方向像素值構建垂直方向上的縮放直線方程yj =1 ,式中的\表示縮放后點的垂直方向坐標,Yj表示對應的縮放前點的垂直方向坐標; 1 為圖像在垂直方向上的縮放倍數,該直線方程與坐標軸的交點,判斷該交點的y坐標 處于Yj和yj+1之間的像素長度的哪個等分參照區(qū)間,則第j+Ι點的縮放前垂直方向像素值 就取該等分參照區(qū)間下方端點的像素值;步驟24、根據步驟23所確定的第j+Ι點的垂直方向像素值進行畫點;之后返回步驟22 ;當水平方向和垂直方向上的點均達到終點,則結束。
全文摘要
本發(fā)明提供一種手持設備上視頻圖像的快速縮放方法,包括水平方向上的縮放和垂直方向上的縮放;將水平方向或垂直方向上的每個像素長度均分為四等分,形成四個等分參照區(qū)間,每個等分參照區(qū)間具有兩個端點的坐標值;采用改進的畫直線方法進行縮放;之后按下述步驟進行操作首先在水平方向上畫點,完成后再在垂直方向上重復水平方向上畫點的過程;亦可以首先在垂直方向上畫點,完成后再在水平方向上重復垂直方向上畫點的過程;當水平方向和垂直方向上的點均達到終點,則結束。本發(fā)明主要采用改進后的畫直線方法,可有效減少運算量,尤其是乘累加的次數,同時縮放后的質量顯著好于最近領域縮放。
文檔編號G06T3/40GK102136131SQ201110083738
公開日2011年7月27日 申請日期2011年3月31日 優(yōu)先權日2011年3月31日
發(fā)明者簡歡 申請人:福州瑞芯微電子有限公司