本發(fā)明涉及虛擬現(xiàn)實(shí)(VR)視頻領(lǐng)域,尤其涉及一種基于主視點(diǎn)的全景視頻映射方法,可用于全景視頻,在保證全景視頻的主視點(diǎn)區(qū)域質(zhì)量不變的前提下,能夠大大減少全景視頻的文件大小和編碼的碼率。
背景技術(shù):
隨著虛擬現(xiàn)實(shí)技術(shù)的日益發(fā)展,對(duì)虛擬現(xiàn)實(shí)視頻的需求日益增加。全景視頻提供了360°的可視范圍,但是,觀看者在一段時(shí)間內(nèi)只觀看一定區(qū)域內(nèi)的視頻。以上這些情況下,觀看者觀看的視頻區(qū)域可稱為主視點(diǎn)區(qū)域,主視點(diǎn)區(qū)域往往只是360°全景視頻的一部分。
由于360°的要求更廣的視角,因此,全景視頻相比于傳統(tǒng)的平面視頻,需要更高的分辨率,其編碼所需的碼率也相較傳統(tǒng)的平面視頻高出許多,并且視頻編解碼的復(fù)雜度也大大提高?,F(xiàn)有的映射方法難以降低全景視頻編碼的碼率和編解碼的復(fù)雜度,也難以保證主視點(diǎn)區(qū)域的視頻質(zhì)量。
技術(shù)實(shí)現(xiàn)要素:
為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種新的全景圖像正映射及相應(yīng)的反映射方法,全景圖像正映射方法在保證主視點(diǎn)區(qū)域視頻質(zhì)量不變的情況下,大大降低視頻的分辨率,從而有效地降低全景視頻編碼的碼率和編解碼的復(fù)雜度,達(dá)到減少全景視頻編碼的碼率并保證主視點(diǎn)區(qū)域的視頻質(zhì)量的目的。全景圖像反映射技術(shù)提供了從平面映射回球面的方法,通過(guò)此方法可以對(duì)本發(fā)明中的平面圖像進(jìn)行渲染觀看。
本發(fā)明提供的技術(shù)方案是:
一種基于主視點(diǎn)的全景視頻正映射方法,將全景圖像A所對(duì)應(yīng)的球面映射到平面方形圖像B上;主視點(diǎn)中心的經(jīng)度和緯度為(lon,lat),根據(jù)與主視點(diǎn)中心到球心連線的夾角,將球面分成三個(gè)區(qū)域:分別記為區(qū)域I,區(qū)域II和區(qū)域III,區(qū)域I對(duì)應(yīng)夾角0°~Z1的區(qū)域,區(qū)域II對(duì)應(yīng)夾角Z1~Z2的區(qū)域,區(qū)域III對(duì)應(yīng)夾角Z2~180°的區(qū)域;然后將區(qū)域I映射為圖像B上以圖像中心為圓心,半徑為ρ0的圓;將區(qū)域II映射為圖像B上以圖像中心為圓心,內(nèi)半徑為ρ0;外半徑為圖像尺寸一半的圓環(huán);區(qū)域III映射為以圖像B四個(gè)角為圓心的四個(gè)四分之一圓,四分之一圓與區(qū)域II對(duì)應(yīng)的圓環(huán)的外圈相切;特別的,當(dāng)Z1=0°時(shí),ρ0=0,此時(shí)不存在區(qū)域I,只存在區(qū)域II,III;當(dāng)Z1=Z2時(shí),ρ0為圖像尺寸的一半,此時(shí)沒(méi)有區(qū)域II,只存在區(qū)域I,III;采用上述方法映射后,圖像B中有部分區(qū)域未使用,可填充成任意的像素值;
針對(duì)上述全景視頻正映射過(guò)程,進(jìn)一步地,將全景圖像A所對(duì)應(yīng)的球面映射到平面方形圖像B(其分辨率N×N)上的具體方法為針對(duì)平面圖像B中的每一個(gè)像素點(diǎn)(X,Y),根據(jù)(X,Y)計(jì)算其對(duì)應(yīng)的球面坐標(biāo)Coordinate,球面坐標(biāo)Coordinate與(X,Y)的關(guān)系可表示為:Coordinate=F(X,Y)=fT(fM(X,Y)),其中fM表示計(jì)算主視點(diǎn)中心為北緯90度(或南緯90度)時(shí),平面圖像B中的像素點(diǎn)(X,Y)對(duì)應(yīng)到球面上的坐標(biāo),對(duì)應(yīng)以下的步驟11),fT表示旋轉(zhuǎn)的操作,對(duì)應(yīng)以下的步驟12),然后根據(jù)球面坐標(biāo)Coordinate取球面上對(duì)應(yīng)位置的像素值(或附近像素通過(guò)插值計(jì)算得到相應(yīng)像素值),作為平面圖像B中像素點(diǎn)(X,Y)的像素值。上述方法的具體過(guò)程包括如下步驟11)~13):
11)計(jì)算得到主視點(diǎn)中心為北緯90度時(shí),平面圖像B中的像素點(diǎn)(X,Y)對(duì)應(yīng)到球面上的坐標(biāo);具體包括如下步驟:
A)計(jì)算平面圖像B中的每個(gè)像素點(diǎn)(X,Y)到平面圖像B中心的距離ρ;
B)根據(jù)ρ的值判斷像素點(diǎn)(X,Y)所在的區(qū)域,當(dāng)像素點(diǎn)(X,Y)在區(qū)域I或區(qū)域II中時(shí),轉(zhuǎn)入步驟C),反之計(jì)算像素點(diǎn)(X,Y)到圖像四個(gè)角的距離,取其中最小的距離記作ρ′,根據(jù)ρ′的值判斷像素點(diǎn)(X,Y)是否在區(qū)域III中,當(dāng)像素點(diǎn)(X,Y)在區(qū)域III中時(shí),轉(zhuǎn)入步驟C);當(dāng)像素點(diǎn)(X,Y)不在區(qū)域III中時(shí),像素點(diǎn)(X,Y)為未使用像素,填充成任意值(如果像素靠近II,III的區(qū)域邊界,優(yōu)選地,可填充成II,III區(qū)域邊界上像素的值或按照II,III區(qū)域的映射方式計(jì)算出像素值),結(jié)束操作;
C)根據(jù)像素點(diǎn)(X,Y)所在的區(qū)域以及ρ或ρ′的值,來(lái)計(jì)算當(dāng)前點(diǎn)與主視點(diǎn)中心夾角Z的值;
D)根據(jù)公式latitude=90°-Z(主視點(diǎn)中心為北緯90度)或latitude=-90°+Z(主視點(diǎn)中心為南緯90度),計(jì)算得到像素點(diǎn)(X,Y)對(duì)應(yīng)的緯度;
E)如果像素點(diǎn)(X,Y)在區(qū)域I或區(qū)域II中,根據(jù)平面上區(qū)域I,II選取的經(jīng)度為0的方向(經(jīng)度為0的方向可自行設(shè)置)以及X,Y的值,計(jì)算得到當(dāng)前像素點(diǎn)的經(jīng)度longitude;如果像素點(diǎn)(X,Y)在區(qū)域III中,根據(jù)四個(gè)四分之一圓所對(duì)應(yīng)的角度(其對(duì)應(yīng)的角度可自行設(shè)置,但需要覆蓋整個(gè)360°的范圍)和X,Y的值,計(jì)算得到當(dāng)前像素點(diǎn)的經(jīng)度longitude;
F)根據(jù)像素點(diǎn)的經(jīng)度和緯度得到該像素點(diǎn)在球面的坐標(biāo),該坐標(biāo)為主視點(diǎn)中心為北緯90度或南緯90度時(shí),平面圖像B中的像素點(diǎn)(X,Y)對(duì)應(yīng)到球面上的坐標(biāo);
12)對(duì)步驟F)所得到的坐標(biāo)進(jìn)行旋轉(zhuǎn),得到主視點(diǎn)中心為(lon,lat)時(shí),平面圖像B中的像素點(diǎn)(X,Y)所對(duì)應(yīng)的坐標(biāo);
13)根據(jù)步驟2)中旋轉(zhuǎn)后的坐標(biāo),取球面上對(duì)應(yīng)位置的像素值(或通過(guò)插值計(jì)算得到相應(yīng)像素值),作為平面圖像B中的像素點(diǎn)(X,Y)的像素值。
針對(duì)上述全景視頻正映射過(guò)程,進(jìn)一步地,全景圖像A的映射格式包括但不限于經(jīng)緯圖、立方體映射圖像、多路相機(jī)采集的全景視頻。
針對(duì)上述全景視頻正映射過(guò)程,進(jìn)一步地,所述方法中的參數(shù)lon,lat,Z1,Z2和ρ0的值均可自行設(shè)置。
針對(duì)上述全景視頻正映射過(guò)程,進(jìn)一步地,步驟A)計(jì)算平面圖像B中的像素點(diǎn)(X,Y)到平面圖像B中心的距離ρ,具體將平面圖像B中的像素點(diǎn)(X,Y)歸一化到-1到1,歸一化后的坐標(biāo)為(X′,Y′),再計(jì)算點(diǎn)(X′,Y′)到平面圖像B中心的距離為
針對(duì)上述全景視頻正映射過(guò)程,進(jìn)一步地,步驟B)判斷像素點(diǎn)(X,Y)所在的區(qū)域的方法為:當(dāng)ρ≤ρ0時(shí),所述像素點(diǎn)(X,Y)位于區(qū)域I中;當(dāng)1≥ρ>ρ0時(shí),所述像素點(diǎn)(X,Y)位于區(qū)域II中;當(dāng)ρ>1時(shí),計(jì)算像素點(diǎn)(X,Y)到平面圖像B四個(gè)角的距離,取其中最小的距離記作ρ′,當(dāng)時(shí),像素點(diǎn)(X,Y)位于區(qū)域III中,當(dāng)時(shí),平面圖像B中的像素點(diǎn)(X,Y)為未使用像素,填充成任意值(如果像素靠近II,III區(qū)域邊界,建議填充成II,III區(qū)域邊界上像素的值或按照II,III區(qū)域的映射方式計(jì)算出像素值);
針對(duì)上述全景視頻正映射過(guò)程,進(jìn)一步地,步驟C)根據(jù)像素點(diǎn)(X,Y)所在的區(qū)域以及ρ或ρ′的值,來(lái)計(jì)算方位角Z的值的方法為:如果像素點(diǎn)(X,Y)位于區(qū)域I中,方位角為C0由邊界條件:ρ=ρ0時(shí),Z=Z1來(lái)確定;如果像素點(diǎn)(X,Y)位于區(qū)域II中,方位角Z由ρ2=C1+C0∫sinZf1(Z)dZ求解得到,公式中的C0,C1由邊界條件:ρ=ρ0時(shí),Z=Z1和ρ=1時(shí),Z=Z2來(lái)確定;如果像素點(diǎn)(X,Y)位于區(qū)域III中,方位角Z由ρ′2=C1+C0∫sinZf2(Z)dZ求解得到,公式中的C0,C1由邊界條件:ρ′=0時(shí),Z=180°和時(shí),Z=Z2來(lái)確定;
針對(duì)上述全景視頻正映射過(guò)程,進(jìn)一步地,步驟12)所述旋轉(zhuǎn),具體根據(jù)經(jīng)度和緯度計(jì)算得到點(diǎn)在單位球面上的直角坐標(biāo)(X球,Y球,Z球),再將坐標(biāo)(X球,Y球,Z球)乘旋轉(zhuǎn)矩陣(該旋轉(zhuǎn)矩陣滿足以下條件:北緯90度(或南緯90度)的點(diǎn)的坐標(biāo)乘上該旋轉(zhuǎn)矩陣后得到的坐標(biāo)為主視點(diǎn)中心(lon,lat)處的坐標(biāo)),得到平面圖像B中的像素點(diǎn)(X,Y)對(duì)應(yīng)到球面上的直角坐標(biāo)(X球′,Y球′,Z球′)(也可通過(guò)此直角坐標(biāo)求出對(duì)應(yīng)的經(jīng)度和緯度)。
另一方面,全景視頻反映射過(guò)程,基于主視點(diǎn),將平面方形圖像B映射回球面;設(shè)方形圖像B的主視點(diǎn)中心的經(jīng)度和緯度為(lon,lat),區(qū)域I為圖像B上以圖像中心為圓心,半徑為ρ0的圓,對(duì)應(yīng)球面上與主視點(diǎn)中心道球心連線夾角為0°~Z1的區(qū)域;區(qū)域II為圖像B上以圖像中心為圓心,內(nèi)半徑為ρ0,外半徑為圖像尺寸一半的圓環(huán),對(duì)應(yīng)球面上與主視點(diǎn)中心道球心連線夾角為Z1~Z2的區(qū)域;區(qū)域III為以圖像B四個(gè)角為圓心的四個(gè)四分之一圓,四分之一圓與區(qū)域II對(duì)應(yīng)的圓環(huán)的外圈相切,對(duì)應(yīng)球面上與主視點(diǎn)中心道球心連線夾角為Z2~180°的區(qū)域;所述參數(shù)lon,lat,Z1,Z2和ρ0的值包括但不限于從碼流中獲取。
全景視頻反映射具體方法為:對(duì)于球面上的點(diǎn),根據(jù)其坐標(biāo)Coordinate計(jì)算其對(duì)應(yīng)到平面的坐標(biāo)(X,Y),平面坐標(biāo)(X,Y)與Coordinate的關(guān)系表示為:(X,Y)=F′(Coordinate)=fM′(fT′(Coordinate)),其中fT′表示旋轉(zhuǎn)操作對(duì)應(yīng)以下的步驟21),fM′表示映射的操作,對(duì)應(yīng)以下的步驟22)到24),然后根據(jù)平面坐標(biāo)(X,Y)取平面上對(duì)應(yīng)位置的像素值(或附近像素通過(guò)插值計(jì)算得到相應(yīng)像素值),作為球面上Coordinate處像素點(diǎn)的像素值,以上球面坐標(biāo)Coordinate可表示為(longitude′,latitude′)或(X球′,Y球′,Z球′),上述方法的具體步驟如下:
21)對(duì)球面上的點(diǎn)進(jìn)行旋轉(zhuǎn),得到假設(shè)當(dāng)前主視點(diǎn)中心為北緯90度(或南緯90度),其所對(duì)應(yīng)的經(jīng)緯度(longitude,latitude);
22)根據(jù)緯度latitude,計(jì)算出與北緯90度(或南緯90度)的夾角Z,然后根據(jù)Z的值判斷當(dāng)前點(diǎn)所在的區(qū)域(區(qū)域I,區(qū)域II或區(qū)域III);
23)根據(jù)當(dāng)前點(diǎn)所對(duì)應(yīng)的區(qū)域以及Z的值,計(jì)算出當(dāng)前點(diǎn)對(duì)應(yīng)到平面上后距離平面圖像B中心的距離ρ或距離平面圖像B四個(gè)角的最小距離ρ′;
24)根據(jù)步驟23)中求出的ρ或ρ′以及經(jīng)度longitude,來(lái)求出當(dāng)前點(diǎn)對(duì)應(yīng)到平面圖像B上后的坐標(biāo)(X,Y);
25)取平面圖像B上(X,Y)處的像素值(或附近像素進(jìn)行插值),作為球面上坐標(biāo)為(longitude′,latitude′)或(X球′,Y球′,Z球′)的點(diǎn)的像素值;
針對(duì)上述全景視頻反映射過(guò)程,進(jìn)一步地,步驟21)所述旋轉(zhuǎn),具體將球面坐標(biāo)(longitude′,latitude′)或(X球′,Y球′,Z球′)轉(zhuǎn)換為直角坐標(biāo)(X球′,Y球′,Z球′),再將坐標(biāo)(X球′,Y球′,Z球′)乘以旋轉(zhuǎn)矩陣(該旋轉(zhuǎn)矩陣滿足以下條件:能將主視點(diǎn)中心(lon,lat)處的點(diǎn)旋轉(zhuǎn)到北緯90度(或南緯90度)處),得到旋轉(zhuǎn)后的直角坐標(biāo)(X球,Y球,Z球),然后根據(jù)直角坐標(biāo)(X球,Y球,Z球)算出對(duì)應(yīng)的經(jīng)緯度(longitude,latitude)。
針對(duì)上述全景視頻反映射過(guò)程,進(jìn)一步地,步驟22)根據(jù)緯度latitude計(jì)算出與北緯90度(或南緯90度)的夾角Z,然后根據(jù)Z的值判斷當(dāng)前點(diǎn)所在的區(qū)域(區(qū)域I,區(qū)域II或區(qū)域III),其具體的方法為:由公式Z=90°-latitude(主視點(diǎn)中心為北緯90度)或Z=latitude+90°(主視點(diǎn)中心為南緯90度)計(jì)算出Z的值;如果0°≤Z<Z1,則其位于區(qū)域I中;如果Z1<Z<Z2,則其位于區(qū)域II中;如果Z2<Z≤180°,則其位于區(qū)域III中;如果Z=Z1,可歸為區(qū)域I或區(qū)域II,如果Z=Z2,可歸為區(qū)域II或區(qū)域III,但需要與正映射一致。
針對(duì)上述全景視頻反映射過(guò)程,進(jìn)一步地,步驟23)根據(jù)當(dāng)前點(diǎn)所對(duì)應(yīng)的區(qū)域以及Z的值,計(jì)算出當(dāng)前點(diǎn)對(duì)應(yīng)到平面上后距離平面圖像B中心的距離ρ或距離平面圖像B四個(gè)角的最小距離ρ′的具體方法為:當(dāng)前點(diǎn)位于區(qū)域I中時(shí),ρ由公式計(jì)算得到,C0由邊界條件:ρ=ρ0時(shí),Z=Z1來(lái)確定;當(dāng)前點(diǎn)位于區(qū)域II中時(shí),ρ由公式ρ2=C1+C0∫sinZf1(Z)dZ求解得到,其中的C0,C1由邊界條件:ρ=ρ0時(shí),Z=Z1和ρ=1時(shí),Z=Z2來(lái)確定;當(dāng)前點(diǎn)位于區(qū)域III中時(shí),ρ′由公式ρ′2=C1+C0∫sinZf2(Z)dZ求解得到,其中的C0,C1由邊界條件:ρ′=0時(shí),Z=180°和時(shí),Z=Z2來(lái)確定。
針對(duì)上述全景視頻反映射過(guò)程,進(jìn)一步地,步驟24)求解坐標(biāo)(X,Y)的值,具體的如果點(diǎn)位于區(qū)域I或II中,根據(jù)longitude得到當(dāng)前點(diǎn)與平面上區(qū)域I或II所選的經(jīng)度為0的方向的夾角,根據(jù)夾角的大小以及ρ的值求解出當(dāng)前點(diǎn)映射到平面上的坐標(biāo)(X,Y)的值;如果點(diǎn)位于區(qū)域III中,根據(jù)longitude、ρ′的值以及四個(gè)四分之一圓所對(duì)應(yīng)的角度得到當(dāng)前點(diǎn)映射到平面上的坐標(biāo)(X,Y)的值。區(qū)域I或II所選的經(jīng)度為0的方向以及四個(gè)四分之一圓所對(duì)應(yīng)的角度應(yīng)與正映射過(guò)程一致。
本發(fā)明實(shí)施例中,采用基于主視點(diǎn)的全景視頻映射方法,包括全景視頻正映射過(guò)程和全景視頻反映射方法過(guò)程;通過(guò)正映射過(guò)程的上述步驟,可將圖像A(球面上的區(qū)域)分別映射到平面圖像B(平面上的相應(yīng)區(qū)域),通過(guò)反映射過(guò)程的上述步驟,可將平面圖像B映射回球面進(jìn)行渲染觀看。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明提供一種新的全景圖像正映射技術(shù)及反映射技術(shù),在保證主視點(diǎn)區(qū)域視頻質(zhì)量不變的情況下,大大降低視頻的分辨率,從而有效地降低全景視頻編碼的碼率和編解碼的復(fù)雜度,達(dá)到減少全景視頻編碼的碼率并保證主視點(diǎn)區(qū)域的視頻質(zhì)量的目的。
具體地,本發(fā)明具有以下優(yōu)點(diǎn):
(一)本發(fā)明中的全景圖像映射參數(shù)Z1,Z2,ρ0,f(Z)均是可調(diào)的,即主視點(diǎn)區(qū)域的范圍一集采樣密度的變化速度是可調(diào)的。
(二)在合理選擇映射的參數(shù)Z1,Z2,ρ0,f(Z)時(shí)(比如Z1=60°,Z2=90°,ρ0=sin60°,時(shí)),即可保證主視點(diǎn)區(qū)域及有較好的質(zhì)量,又能有效地降低非主視點(diǎn)區(qū)域的采樣密度,大大減小圖像的分辨率,從而有效地降低全景視頻編碼的碼率和編解碼的復(fù)雜度。
在上述參數(shù)條件下,我們將分辨率為4096x2048的圖像映射成分辨率為1536x1536的圖像,像素?cái)?shù)下降了約72%,在測(cè)試中,編碼的所需的碼率下降了約55%,主視點(diǎn)區(qū)域的視頻質(zhì)量基本不變。
(三)通過(guò)反映射方法,可將本發(fā)明中的平面圖像B映射回球面進(jìn)行渲染觀看。
附圖說(shuō)明
圖1是全景圖像映射與球面對(duì)應(yīng)關(guān)系的示意圖,通過(guò)本發(fā)明提供的全景圖像正映射方法,將球面上的I,II,III區(qū)域分別映射到平面上的I,II,III區(qū)域;通過(guò)本發(fā)明提供的全景圖像反映射方法,將平面上的I,II,III區(qū)域分別映射回球面上的I,II,III區(qū)域;
其中,(a)為球面上的全景圖像的示意圖;(b)為經(jīng)本發(fā)明方法映射后的圖像的示意圖;(a)中的區(qū)域I為以點(diǎn)C為中心的主視點(diǎn)區(qū)域,其對(duì)應(yīng)從0°到Z1的區(qū)域;Z1為(a)圖中∠BOC的度數(shù),可自行設(shè)置;本發(fā)明將其映射到(b)中的區(qū)域I的圓面上,(b)中的I區(qū)域圓面半徑為ρ0,可自行設(shè)置;(a)球面上的II區(qū)域?yàn)榈谝患?jí)的非主視點(diǎn)區(qū)域,其對(duì)應(yīng)從Z1到Z2之間的區(qū)域,Z2為(a)圖中∠AOC的度數(shù),可自行設(shè)置;本發(fā)明將其映射到(b)方形中的II區(qū)域的圓環(huán)上;(a)球面上的III區(qū)域?yàn)榈诙?jí)非主視點(diǎn)區(qū)域,其對(duì)應(yīng)從R′到180°之間的區(qū)域,本發(fā)明將其映射到(b)方形中的III區(qū)域的圓面上,方形中的III區(qū)域的圓面由四個(gè)1/4圓面組成;(b)方形中除I、II、III區(qū)域之外的區(qū)域?yàn)槲词褂脜^(qū)域,填充成任意的像素值。
圖2是本發(fā)明中的映射與球面上面積對(duì)應(yīng)的示意圖;其中,(a)為球面上一小塊區(qū)域面積計(jì)算的示意圖;(b)為平面上一小塊區(qū)域面積計(jì)算的示意圖;單位球面上一個(gè)較小區(qū)域的面積可表示為S球=sinZdαdZ,將其映射到平面中的圓面上后對(duì)應(yīng)的面積為S圓面=ρdαdρ,二者面積之比為當(dāng)其面積之比為一個(gè)常數(shù),即時(shí),解出ρ與Z的關(guān)系為這保證了主視點(diǎn)區(qū)域中的采樣密度是一樣的;當(dāng)令其面積之比為一個(gè)值隨Z增加而非遞增的函數(shù)f(Z),即時(shí),解出ρ與Z的關(guān)系為ρ2=C1+C0∫sinZf(Z)dZ,這保證了離主視點(diǎn)區(qū)域越遠(yuǎn),采樣密度越低。
圖3是本發(fā)明正映射方法的流程圖。
圖4是本發(fā)明反映射方法的流程圖。
圖5是本發(fā)明實(shí)施例中進(jìn)行正映射和反映射計(jì)算的示意圖;
其中,I,II區(qū)域選擇X軸正方向?yàn)閘ongitude為0°的方向,通過(guò)映射計(jì)算得到III區(qū)域上longitude的對(duì)應(yīng)關(guān)系。
圖6是本發(fā)明實(shí)施例進(jìn)行正映射得到的效果圖。
具體實(shí)施方式
下面結(jié)合附圖,通過(guò)實(shí)施例進(jìn)一步描述本發(fā)明,但不以任何方式限制本發(fā)明的范圍。
本發(fā)明實(shí)施例提供了一種基于主視點(diǎn)的全景圖像映射方法,包括全景圖像正映射方法以及相應(yīng)的反映射方法,以下分別介紹正映射方法以及反映射方法的實(shí)施例。
全景圖像正映射方法如圖1所示,通過(guò)本發(fā)明提供的全景圖像正映射方法,將球面上的I,II,III區(qū)域分別映射到平面上的I,II,III區(qū)域。圖1中,左邊為球面上的全景圖像的示意圖,右邊為本發(fā)明方法映射后的圖像的示意圖。球面上的I區(qū)域?yàn)橐渣c(diǎn)C為中心的主視點(diǎn)區(qū)域,其對(duì)應(yīng)從0°到Z1(Z1為圖中∠BOC的度數(shù),可自行設(shè)置)之間的區(qū)域,本發(fā)明將其映射到方形中的I區(qū)域的圓面上(I區(qū)域圓面半徑為ρ0,可自行設(shè)置);球面上的II區(qū)域?yàn)榈谝患?jí)的非主視點(diǎn)區(qū)域,其對(duì)應(yīng)從Z1到Z2(Z2為圖中∠AOC的度數(shù),可自行設(shè)置)之間的區(qū)域,本發(fā)明將其映射到方形中的II區(qū)域的圓環(huán)上;球面上的III區(qū)域?yàn)榈诙?jí)非主視點(diǎn)區(qū)域,其對(duì)應(yīng)從R′到180°之間的區(qū)域,本發(fā)明將其映射到方形中的III區(qū)域的圓面上(方形中的III區(qū)域的圓面由四個(gè)1/4圓面組成);方形中除I,II,II區(qū)域之外的區(qū)域?yàn)槲词褂脜^(qū)域,可填充成任意的像素值。
如圖2所示,單位球面上一個(gè)較小區(qū)域的面積可表示為S球=sinZdαdZ,其映射到平面中的圓面上后對(duì)應(yīng)的面積為S圓面=ρdαdρ,他們的面積之比為在方形中的I區(qū)域?qū)?yīng)的圓面中,令其面積之比為一個(gè)常數(shù),即解出ρ與Z的關(guān)系為這保證了方形中I區(qū)域的圓面中(主視點(diǎn)區(qū)域中)的采樣密度是一樣的。在方形中的II,III區(qū)域?qū)?yīng)的圓面中,令其面積之比為一個(gè)值隨Z增加而非遞增的函數(shù)f(Z)(方形中的II,III區(qū)域的f(Z)函數(shù)可以不同),即解出ρ與Z的關(guān)系為ρ2=C1+C0∫sinZf(Z)dZ,這保證了離主視點(diǎn)區(qū)域越遠(yuǎn),采樣密度越低。
在實(shí)施例中,我們將某種映射格式的全景圖像A(如經(jīng)緯圖,立方體映射圖像等)所對(duì)應(yīng)的球面映射到本發(fā)明中設(shè)計(jì)的全景映射對(duì)應(yīng)的平面圖像B(平面圖像B的分辨率為N×N)。其具體的流程如下(其中第一步到第六步為計(jì)算主視點(diǎn)中心為北緯90度時(shí),平面圖像B中的像素點(diǎn)(X,Y)對(duì)應(yīng)到球面上的坐標(biāo),第七步經(jīng)過(guò)旋轉(zhuǎn)將坐標(biāo)旋轉(zhuǎn)到當(dāng)前主視點(diǎn)中心所對(duì)應(yīng)的坐標(biāo)):
第一步:將平面圖像B中的像素點(diǎn)(X,Y)歸一化到-1到1,歸一化后的坐標(biāo)為(X′,Y′)(這里可以不進(jìn)行歸一化,但歸一化以后后面的公式更便于推導(dǎo))。
第二步:計(jì)算點(diǎn)(X′,Y′)到平面圖像B中心的距離
第三步:如果ρ≤ρ0,則點(diǎn)位于區(qū)域I中,方位角(公式中的C0由邊界條件:ρ=ρ0時(shí),Z=Z1來(lái)確定);如果1≥ρ>ρ0,則點(diǎn)位于區(qū)域II中,方位角Z由ρ2=C1+C0∫sinZf1(Z)dZ求解出(公式中的C0,C1由邊界條件:ρ=ρ0時(shí),Z=Z1和ρ=1時(shí),Z=Z2來(lái)確定);如果ρ>1,計(jì)算點(diǎn)(X′,Y′)到平面圖像B四個(gè)角的距離,取其中最小的距離記作ρ′,如果則點(diǎn)位于區(qū)域III中,方位角Z由ρ′2=C1+C0∫sinZf2(Z)dZ求解出(公式中的C0,C1由邊界條件:ρ′=0時(shí),Z=180°和1時(shí),Z=Z2來(lái)確定),如果則平面圖像B中的像素點(diǎn)(X,Y)為未使用像素這,可填充成任意值。
第四步:根據(jù)公式latitude=90°-Z計(jì)算出該點(diǎn)對(duì)應(yīng)的緯度,latitude為正時(shí)表示北緯,latitude為負(fù)時(shí)表示南緯。
第五步:根據(jù)X′,Y′的值計(jì)算出當(dāng)前點(diǎn)的經(jīng)度longitude,longitude為正表示東經(jīng),longitude為負(fù)表示西經(jīng)。
第六步:根據(jù)經(jīng)度和緯度便可知道該點(diǎn)在球面的坐標(biāo),即為主視點(diǎn)中心為北緯90度時(shí),平面圖像B中的像素點(diǎn)(X,Y)對(duì)應(yīng)到球面上的坐標(biāo)。
第七步:根據(jù)經(jīng)度緯度計(jì)算出點(diǎn)在單位球面上的笛卡爾坐標(biāo)(X球,Y球,Z球),再將坐標(biāo)(X球,Y球,Z球)乘上從北緯90度旋轉(zhuǎn)到主視點(diǎn)中心所對(duì)應(yīng)的旋轉(zhuǎn)矩陣得到平面圖像B中的像素點(diǎn)(X,Y)對(duì)應(yīng)到球面上的笛卡爾坐標(biāo)(X球′,Y球′,Z球′)(這里也可以對(duì)經(jīng)度緯度坐標(biāo)直接進(jìn)行旋轉(zhuǎn),但對(duì)笛卡爾坐標(biāo)進(jìn)行旋轉(zhuǎn)在計(jì)算上比較簡(jiǎn)單)。
第八步:根據(jù)球面上坐標(biāo)(X球′,Y球′,Z球′)取球面上對(duì)應(yīng)位置的像素值(或通過(guò)插值計(jì)算得到相應(yīng)像素值),作為平面圖像B中的像素點(diǎn)(X,Y)的像素值。
圖3是本發(fā)明正映射方法的流程圖。本實(shí)施例正映射過(guò)程的具體計(jì)算如下:
第一步:將平面圖像B(分辨率為N×N)中的像素點(diǎn)(X,Y)歸一化到-1到1,歸一化后的坐標(biāo)為(X′,Y′),其計(jì)算公式如下:
第二步:計(jì)算點(diǎn)(X′,Y′)到平面圖像B中心的距離:
其中,ρ為點(diǎn)(X′,Y′)到平面圖像B中心的距離。
第三步:如果ρ≤ρ0,則點(diǎn)位于區(qū)域I中;如果1≥ρ>ρ0,則點(diǎn)位于區(qū)域II中;如果ρ>1,計(jì)算點(diǎn)(X′,Y′)到平面圖像B四個(gè)角的距離,取其中最小的距離記作ρ′,如果則點(diǎn)位于區(qū)域III中,,如果則平面圖像B中的像素點(diǎn)(X,Y)為未使用像素這,可填充成任意值,然后直接跳過(guò)后面的步驟。如果點(diǎn)位于區(qū)域I,II,III中,則根據(jù)ρ或ρ′和Z的關(guān)系解出Z的值,其計(jì)算的關(guān)系如下:
區(qū)域I中:
區(qū)域II中:ρ2=C1+C0∫sinZf1(Z)dZ 式5)
區(qū)域III中:ρ′2=C1+C0∫sinZf2(Z)dZ (式6)
以上公式中的C0,C1由邊界條件解出,區(qū)域I,II,III的邊界條件如下:
區(qū)域I中:
區(qū)域II中:
區(qū)域III中:
第四步:根據(jù)Z計(jì)算出該點(diǎn)對(duì)應(yīng)的緯度latitude,latitude為正時(shí)表示北緯,latitude為負(fù)時(shí)表示南緯,計(jì)算公式如下:
latitude=90°-Z (式10)
第五步:根據(jù)X′,Y′的值計(jì)算出當(dāng)前點(diǎn)的經(jīng)度longitude,longitude為正表示東經(jīng),longitude為負(fù)表示西經(jīng)。平面圖像B中的I,II區(qū)域上longitude為0°的方向和III區(qū)域上longitude的對(duì)應(yīng)關(guān)系可自行設(shè)置。本實(shí)施例中I,II區(qū)域選擇X軸正方向?yàn)閘ongitude為0°的方向,III區(qū)域上longitude的對(duì)應(yīng)關(guān)系如圖5所示,其具體的計(jì)算公式:
區(qū)域I,II中:
區(qū)域III中:
第六步:根據(jù)經(jīng)度和緯度便可知道該點(diǎn)在球面的坐標(biāo),即為主視點(diǎn)中心為北緯90度時(shí),平面圖像B中的像素點(diǎn)(X,Y)對(duì)應(yīng)到球面上的坐標(biāo)。
第七步:根據(jù)經(jīng)度緯度計(jì)算出點(diǎn)在單位球面上的笛卡爾坐標(biāo)(X球,Y球,Z球)(坐標(biāo)系的X,Y,Z軸如圖1所示),其計(jì)算如下:
X球=sin(longitude)×cos(latitude) (式13)
Y球=sin(latitude) (式14)
Z球=cos(longitude)×cos(latitude) (式15)
再將坐標(biāo)(X球,Y球,Z球)乘上從北緯90度旋轉(zhuǎn)到主視點(diǎn)中心所對(duì)應(yīng)的旋轉(zhuǎn)矩陣得到平面圖像B中的像素點(diǎn)(X,Y)對(duì)應(yīng)到球面上的笛卡爾坐標(biāo)(X球′,Y球′,Z球′)。
第八步:根據(jù)球面上坐標(biāo)(X球′,Y球′,Z球′)取球面上對(duì)應(yīng)位置的像素值(或通過(guò)插值計(jì)算得到相應(yīng)像素值),作為平面圖像B中的像素點(diǎn)(X,Y)的像素值。
至此,該本發(fā)明正映射方法實(shí)施例的所有步驟完成,實(shí)施例展示效果如圖6所示。
另一方面,全景圖像反映射方法將平面方形圖像B映射回球面。在本實(shí)施例中,設(shè)方形圖像B的主視點(diǎn)中心的經(jīng)度和緯度為(lon,lat),分辨率為N×N,區(qū)域I為圖像B上以圖像中心為圓心,半徑為ρ0的圓,對(duì)應(yīng)球面上與主視點(diǎn)中心道球心連線夾角為0°~Z1的區(qū)域;區(qū)域II為圖像B上以圖像中心為圓心,內(nèi)半徑為ρ0,外半徑為圖像尺寸一半的圓環(huán),對(duì)應(yīng)球面上與主視點(diǎn)中心道球心連線夾角為Z1~Z2的區(qū)域;區(qū)域III為以圖像B四個(gè)角為圓心的四個(gè)四分之一圓,四分之一圓與區(qū)域II對(duì)應(yīng)的圓環(huán)的外圈相切,對(duì)應(yīng)球面上與主視點(diǎn)中心道球心連線夾角為Z2~180°的區(qū)域;所述參數(shù)lon,lat,Z1,Z2和ρ0的值包括但不限于從碼流中獲取。
圖4是本發(fā)明反映射方法的流程圖。反映射方法實(shí)施例具體的流程如下:
第一步:將球面上坐標(biāo)為(longitude′,latitude′)或(X球′,Y球′,Z球′)的點(diǎn)的坐標(biāo)轉(zhuǎn)換為直角坐標(biāo)(X球′,Y球′,Z球′),其計(jì)算公式如下(坐標(biāo)系的X,Y,Z軸如圖1所示,如果輸入是(X球′,Y球′,Z球′),則不需要進(jìn)行轉(zhuǎn)換):
X球′=sin(longitude′)×cos(latitude′) (式16)
Y球′=sin(latitude′) (式17)
Z球′=cos(longitude′)×cos(latitude′) (式18)
第二步:將坐標(biāo)(X球′,Y球′,Z球′)乘以從主視點(diǎn)中心(lon,lat)旋轉(zhuǎn)到北緯90度(或南緯90度)所對(duì)應(yīng)的旋轉(zhuǎn)矩陣,得到旋轉(zhuǎn)后的直角坐標(biāo)(X球″,Y球″,Z球″);
第三步:對(duì)(X球″,Y球″,Z球″)進(jìn)行歸一化,歸一化后的直角坐標(biāo)為(X球,Y球,Z球),其計(jì)算的關(guān)系如下:
第三步:然后根據(jù)直角坐標(biāo)(X球,Y球,Z球)算出對(duì)應(yīng)的經(jīng)緯度(longitude,latitude),其計(jì)算的關(guān)系如下:
latitude=arcsin(Y球) (式20)
第四步:由公式Z=90°-latitude算出當(dāng)前點(diǎn)與主視點(diǎn)中心的夾角;
第五步:根據(jù)Z的值判斷當(dāng)前點(diǎn)所在的區(qū)域,如果0°≤Z≤Z1,則其位于區(qū)域I中;如果Z1<Z≤Z2,則其位于區(qū)域II中;如果Z2<Z≤180°,則其位于區(qū)域III中;
第六步:如果該點(diǎn)位于區(qū)域I、II中,則計(jì)算當(dāng)前點(diǎn)對(duì)應(yīng)到平面上后距離平面圖像B中心的距離ρ,如果該點(diǎn)位于區(qū)域III中,則計(jì)算當(dāng)前點(diǎn)對(duì)應(yīng)到平面上后距離平面圖像B四個(gè)角的最小距離ρ′,ρ或ρ′由以下公式解出:
區(qū)域I中:
區(qū)域II中:ρ2=C1+C0∫sinZf1(Z)dZ (式23)
區(qū)域III中:ρ′2=C1+C0∫sinZf2(Z)dZ (式24)
以上公式中,的C0,C1由邊界條件求解出,邊界條件如下:
區(qū)域I中:
區(qū)域II中:
區(qū)域III中:
第七步:根據(jù)longitude,ρ或ρ′的值計(jì)算出當(dāng)前點(diǎn)在平面上的坐標(biāo)(X,Y),具體的如果點(diǎn)位于區(qū)域I或II中,根據(jù)longitude得到當(dāng)前點(diǎn)與平面上區(qū)域I或II所選的經(jīng)度為0的方向的夾角,根據(jù)夾角的大小以及ρ的值求解出當(dāng)前點(diǎn)映射到平面上的坐標(biāo)(X,Y)的值;如果點(diǎn)位于區(qū)域III中,根據(jù)longitude、ρ′的值以及四個(gè)四分之一圓所對(duì)應(yīng)的角度得到當(dāng)前點(diǎn)映射到平面上的坐標(biāo)(X′,Y′)的值。本實(shí)施例中I,II區(qū)域選擇X軸正方向?yàn)閘ongitude為0°的方向,III區(qū)域上longitude的對(duì)應(yīng)關(guān)系如圖5所示,其具體的計(jì)算公式:
區(qū)域I,II中:X′=ρcos(longitude),Y′=ρsin(longitude) (式28)
區(qū)域III中:
第八步:上一步中算出的(X′,Y′)是歸一化到-1到1后的坐標(biāo),需反歸一化,反歸一化的計(jì)算如下:
第九步:取平面圖像B上(X,Y)處的像素值(或附近像素進(jìn)行插值),作為球面上坐標(biāo)為(longitude′,latitude′)或(X球′,Y球′,Z球′)的點(diǎn)的像素值;
至此,通過(guò)上述正映射過(guò)程和反映射過(guò)程的所有步驟,本發(fā)明實(shí)施例的正映射過(guò)程可將圖像A(球面上的區(qū)域)映射到平面圖像B(平面上的相應(yīng)區(qū)域),本發(fā)明實(shí)施例的反映射過(guò)程可將平面圖像B映射回球面進(jìn)行渲染觀看。
需要注意的是,公布實(shí)施例的目的在于幫助進(jìn)一步理解本發(fā)明,但是本領(lǐng)域的技術(shù)人員可以理解:在不脫離本發(fā)明及所附權(quán)利要求的精神和范圍內(nèi),各種替換和修改都是可能的。因此,本發(fā)明不應(yīng)局限于實(shí)施例所公開(kāi)的內(nèi)容,本發(fā)明要求保護(hù)的范圍以權(quán)利要求書(shū)界定的范圍為準(zhǔn)。