基于gpu加速的異形屏幕多投影拼接融合視頻播放的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于投影控制領(lǐng)域,尤其涉及一種基于GPU加速的異形屏幕多投影拼接融 合視頻播放的方法。
【背景技術(shù)】
[0002] 大型異形屏幕投影能夠增強(qiáng)用戶的沉浸感,帶來更好的體驗(yàn),在虛擬現(xiàn)實(shí)、教育、 娛樂、仿真訓(xùn)練等領(lǐng)域應(yīng)用廣泛。在實(shí)際應(yīng)用中有各種各樣的投影屏幕,即使對(duì)于一個(gè)特定 的應(yīng)用場(chǎng)景,其各項(xiàng)參數(shù)如投影儀的位置、屏幕形狀也會(huì)隨著時(shí)間的推移發(fā)生變化,所以希 望投影系統(tǒng)要易于搭建和維護(hù),而實(shí)際中的操作往往比較復(fù)雜。
[0003] 在用多個(gè)投影儀進(jìn)行拼接時(shí),使用硬邊拼接,即讓兩個(gè)投影儀的畫面簡(jiǎn)單的靠在 一起,存在的問題為:通常會(huì)有明顯的分割線;使用重疊時(shí),如果不對(duì)圖像的亮度加以處 理,重疊區(qū)域的亮度會(huì)較高,影響視覺效果,所以要使用亮度融合。
[0004] 對(duì)于視頻播放,基于投影屏幕的形狀,需要對(duì)要投影視頻中的每一幀進(jìn)行校正后 再投出,由于圖像處理比較費(fèi)時(shí),很多應(yīng)用是將視頻在線下預(yù)處理后再播放,如果場(chǎng)景轉(zhuǎn)換 則需要重新對(duì)視頻進(jìn)行預(yù)處理,這樣轉(zhuǎn)換場(chǎng)景后就需要等待一段比較長(zhǎng)的時(shí)間才能觀看, 而且每個(gè)場(chǎng)景都要保存相應(yīng)的一個(gè)視頻文件。
【發(fā)明內(nèi)容】
[0005] 為了解決現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明提供一種基于GPU加速的異形屏幕多投影拼接 融合視頻播放的方法,該方法實(shí)現(xiàn)了多投影儀在異形屏幕上投影拼接,在投影儀和屏幕位 置不變的情況下,實(shí)時(shí)對(duì)視頻進(jìn)行校正播放,省去對(duì)視頻進(jìn)行預(yù)處理的工序。
[0006] 為實(shí)現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:
[0007] -種基于GPU加速的異形屏幕多投影拼接融合視頻播放的方法,包括:
[0008] 步驟(1):設(shè)置至少兩個(gè)投影儀,根據(jù)投影儀的個(gè)數(shù)生成控制網(wǎng)格,在異形屏幕上 調(diào)整控制網(wǎng)格,每一組控制網(wǎng)格對(duì)應(yīng)一個(gè)投影儀;
[0009] 步驟(2):讀取視頻文件,獲取視頻文件屬性;讀取視頻文件的一幀圖像作為源圖 像;調(diào)整控制網(wǎng)格對(duì)源圖像進(jìn)行幾何校正,得到的校正后圖像作為目標(biāo)圖像,并求取源圖像 與目標(biāo)圖像中像素點(diǎn)的映射矩陣;
[0010] 步驟(3):讀取視頻文件的下一幀圖像;根據(jù)相鄰?fù)队皟x的重疊區(qū)域所占整個(gè)投 影儀幀緩沖區(qū)域大小的比例,生成一幅中間圖像;
[0011] 步驟⑷:采用GPU加速的方法對(duì)中間圖像進(jìn)行亮度處理和圖像拼接融合;根據(jù)源 圖像與目標(biāo)圖像中像素點(diǎn)的映射矩陣和GPU加速的方法對(duì)拼接融合后的圖像進(jìn)行幾何校 正,獲得拼接融合后圖像對(duì)應(yīng)的目標(biāo)圖像;
[0012] 步驟(5):在異形屏幕上投影拼接融合后圖像對(duì)應(yīng)的目標(biāo)圖像;
[0013] 步驟(6):重復(fù)步驟(3)~步驟(5),直到視頻播放完成。
[0014] 所述步驟⑴中的調(diào)整控制網(wǎng)格的具體過程為:
[0015] 將生成控制網(wǎng)格全屏顯示在異形屏幕上,然后對(duì)控制網(wǎng)格進(jìn)行增加或減少一組控 制網(wǎng)格、增減網(wǎng)格線的條數(shù)或移動(dòng)控制點(diǎn)操作,使得投影在屏幕上的控制網(wǎng)格不變形,且不 同投影儀的網(wǎng)格線對(duì)齊。
[0016] 所述步驟(1)中的視頻文件屬性,包括:視頻幀率、每一幀的大小和視頻總時(shí)長(zhǎng)。
[0017] 所述步驟⑵中求取源圖像與目標(biāo)圖像中像素點(diǎn)的映射矩陣的具體過程為:
[0018] 步驟(2. 1):定義源圖像與目標(biāo)圖像的映射矩陣為二維矩陣MdPMy,二維矩陣凡 和My均與目標(biāo)圖像的大小相同;
[0019] 步驟(2.2):源圖像中的任一像素點(diǎn)(i,j),通過調(diào)整控制網(wǎng)格的方法獲取目標(biāo)圖 像對(duì)應(yīng)像素a',j'),并在mx中保存i',在My中保存j' ;其中,i和j表示整數(shù)變量。
[0020] 所述步驟⑶中生成中間圖像的具體過程為:
[0021] 假設(shè)有N個(gè)投影儀,校正后相鄰兩個(gè)投影儀的重疊區(qū)域?yàn)閱蝹€(gè)投影區(qū)域的1, m 那么首先將源圖像在水平方向等分為N(m-1)+1份,每一份的寬度為d,將它們編號(hào)為 0, 1,. . .,N(m-l);生成一幅高與源圖像相同且寬為dXmXN的中間圖像,將中間圖像等分 為mXN份;
[0022] 將源圖像中編號(hào)為k(m-l),k(m-l)+l,…(k+1) (m-1)的區(qū)域疊加到中間圖像中編 號(hào)為km,km+l,…(k+l)m-l的區(qū)域,每個(gè)重疊區(qū)域分別由兩個(gè)投影儀投出;其中,N表示大 于等于2的整數(shù);m表示大于等于2的整數(shù);d表示常數(shù);k表示從0到N的任一整數(shù)。
[0023]所述步驟(4)中對(duì)拼接融合后的圖像進(jìn)行幾何校正的具體過程,包括:
[0024] 步驟(4. 1):確定圖像重疊區(qū)域的漸變因子;
[0025] 步驟(4. 2):采用GPU加速的方法獲取圖像重疊區(qū)域的每個(gè)像素,將獲取圖像重 疊區(qū)域的每個(gè)像素的RGB值都乘上其各自對(duì)應(yīng)的漸變因子后,得到新的值替換原來的像素 值。
[0026] 所述步驟(4. 1)中,若圖像重疊區(qū)域的亮度不變,則不存在重疊區(qū)域,漸變因子為 1 ;否則,存在重疊區(qū)域,圖像重疊區(qū)域的漸變因子包括右圖像重疊區(qū)域漸變因子和左圖像 重疊區(qū)域漸變因子。
[0027] 所述右圖像重疊區(qū)域漸變因子的表達(dá)式為:
[0028]
[0029] 所述左圖像重疊區(qū)域漸變因子的表達(dá)式為:
[0030]
[0031] 其中,《= 0. 7,u= 2. 5,x表示左圖像或右圖像中當(dāng)前列在重疊區(qū)域列號(hào)與單 個(gè)重疊區(qū)域的總列數(shù)之比。
[0032] 所述步驟(4. 2)中GPU加速的方法的具體過程為:
[0033] 在GPU核函數(shù)中,首先獲取線程號(hào),計(jì)算出該線程所對(duì)應(yīng)的像素點(diǎn)(i,j)以及像素 點(diǎn)(i,j)所對(duì)應(yīng)的漸變因子,將像素點(diǎn)(i,j)所對(duì)應(yīng)的漸變因子與像素點(diǎn)(i,j)的RGB值 相乘,作為像素點(diǎn)(i,j)最終的像素值。
[0034] 所述步驟(1)和步驟(5)中的異形屏幕包括弧形屏幕、環(huán)形屏幕和球形屏幕。
[0035] 本發(fā)明的有益效果為:
[0036] (1)本發(fā)明在異型屏幕多個(gè)投影儀進(jìn)行拼接時(shí),采用GPU加速的方法對(duì)中間圖像 進(jìn)行亮度處理和圖像拼接融合,降低了兩個(gè)圖像之間的分割線,而且對(duì)兩個(gè)重疊圖像進(jìn)行 亮度融合,增強(qiáng)了視覺效果;
[0037] (2)本發(fā)明采用拼接融合和調(diào)整控制網(wǎng)格的方法改善了視頻播放對(duì)圖像校正的效 率以及場(chǎng)景轉(zhuǎn)換的特殊需求,實(shí)現(xiàn)在異形屏幕上的視頻實(shí)時(shí)校正播放;
[0038] (3)本發(fā)明的該方法成本低,操作簡(jiǎn)單,易于搭建和維護(hù)。
【附圖說明】
[0039] 圖1(a)是原始控制網(wǎng)格對(duì)應(yīng)控制點(diǎn)示意圖;
[0040] 圖1 (b)是調(diào)整后的控制對(duì)應(yīng)控制點(diǎn)不意圖;
[0041] 圖2(a)是原始控制網(wǎng)格對(duì)應(yīng)像素點(diǎn)示意圖;
[0042] 圖2 (b)是調(diào)整后的控制對(duì)應(yīng)像素點(diǎn)不意圖;
[0043] 圖3是控制網(wǎng)格調(diào)整流程圖;
[0044] 圖4(a)是原始控制網(wǎng)格圖像;
[0045] 圖4(b)是調(diào)整后的控制網(wǎng)格圖像;
[0046] 圖5 (a)是未校正的圖像;
[0047] 圖5 (b)是投影拼接校正結(jié)果;
[0048] 圖6是視頻播放流程圖。
【具體實(shí)施方式】
[0049] 下面結(jié)合附圖與實(shí)施例對(duì)本發(fā)明做進(jìn)一步說明:
[0050] 本程序以Windows7中的VisualStudio2010為開發(fā)平臺(tái),其【具體實(shí)施方式】如 下:
[0051] 本發(fā)明通過顯卡或分線器將多臺(tái)投影儀連接到同一臺(tái)計(jì)算機(jī)上,將投影儀隨意擺 放,但是要使得相鄰?fù)队皟x的投影區(qū)域有一定的重疊,將多個(gè)顯示器設(shè)置為擴(kuò)展模式,設(shè)置 好投影儀的投影區(qū)域。
[0052] 本發(fā)明的基于GPU加速的異形屏幕多投影拼接融合視頻播放的方法,通過手動(dòng)調(diào) 整控制網(wǎng)格,快速完成多投影儀拼接校正,通過使用GPU加速實(shí)現(xiàn)視頻實(shí)時(shí)處理播放的系 統(tǒng)。
[0053] 本發(fā)明的系統(tǒng)包括:
[0054] 投影儀(2個(gè)及以上):投影圖像;
[0055] 弧形幕布:顯示投影儀所投圖像;
[0056] 異型屏幕投影拼接系統(tǒng):生成控制網(wǎng)格,接收人工調(diào)整,對(duì)圖像進(jìn)行處理并顯示, 實(shí)時(shí)處理播放視頻。
[0057] 本發(fā)明中的圖像拼接為手動(dòng)拼接,其原理是:
[0058] 通過投影儀把控制網(wǎng)格投影到屏幕上,網(wǎng)格線的交點(diǎn)稱為控制點(diǎn),對(duì)控制點(diǎn)進(jìn)行 調(diào)整,在屏幕上確定一個(gè)理想的目標(biāo)投影區(qū)域,對(duì)圖像進(jìn)行校正使其填充在這個(gè)區(qū)域中,也 就達(dá)到了我們想要的效果。有幾個(gè)投影儀就有幾組控制網(wǎng)格,一組控制網(wǎng)格只能由一個(gè)投 影儀投出,各組控制網(wǎng)格之間相互獨(dú)立。在屏幕上,相鄰?fù)队皟x重疊區(qū)域?qū)?yīng)的網(wǎng)格線、控 制點(diǎn)要對(duì)齊。
[0059] 首先手動(dòng)調(diào)整控制點(diǎn),使網(wǎng)格投影圖像在屏幕上達(dá)到理想的視覺效果,各個(gè)小網(wǎng) 格的大小和分布均勻,重疊區(qū)域的網(wǎng)格線和控制點(diǎn)對(duì)齊,可以將調(diào)整好的控制網(wǎng)格保存起 來。只要將一幅圖像進(jìn)行與控制網(wǎng)格同樣的變形通過同一位置的同一投影儀投出,便可以 得到未變形的投影圖像。
[0060] 以下是進(jìn)行圖像校正的過程:
[0061] 對(duì)于某個(gè)投影儀對(duì)應(yīng)的源圖像區(qū)域Is,假設(shè)其對(duì)應(yīng)的控制網(wǎng)格有u行v列,我們把 校正后的圖像稱為目標(biāo)圖像,生成一幅大小與網(wǎng)格圖像相同的全黑圖像作為目標(biāo)圖像,這 個(gè)投影儀對(duì)應(yīng)目標(biāo)圖像的區(qū)域?yàn)镮d,將源圖像區(qū)域Is均勻劃分為(U-1)行,(V-1)列,圖像 中的角點(diǎn)按照行列順序與控制點(diǎn)是一一對(duì)應(yīng)的,這樣就得到了這些角點(diǎn)在目標(biāo)圖像中的位 置,即得到了源圖像與目標(biāo)圖像中一部分點(diǎn)的對(duì)應(yīng)關(guān)系。這些點(diǎn)處的像素可以很容易地找 到原始像素,而對(duì)于其他的像素點(diǎn)要通過插值計(jì)算出對(duì)應(yīng)的原始像素:
[0062] 假設(shè)Is上有原始的控制網(wǎng)格(^,^上有調(diào)整后的控制網(wǎng)格C1:
[0063] 對(duì)于Id中的每一個(gè)像素Pi(Xl,yi),根據(jù)Q,判斷其是否位于控制網(wǎng)格內(nèi)部,如 果在外部則此像素置為黑色。如果在網(wǎng)格內(nèi)部,則找到這個(gè)像素是在由哪四個(gè)控制點(diǎn) 八 1,81,(:1,01構(gòu)成的四邊形內(nèi),據(jù)此可以找到(: (|中對(duì)應(yīng)的四個(gè)點(diǎn)4,8,(:,0,如圖1(&)和圖 1 (b)所示。
[0064] 進(jìn)一步地,找到所在的三角形,為了求得顏色值,需要找到源圖像13中的對(duì)應(yīng) 點(diǎn)?。如圖2( &)和圖2〇3)所示,控制點(diǎn)八,8,(:,0及41,81,(: 1,01的坐標(biāo)都可以得到,所以根 據(jù)狄洛尼三角插值:
[0065]
[0066] 用三個(gè)頂點(diǎn)的坐標(biāo)表示三角形的面積,例如:[0067]
[0068]
[0069]
[0070]
[0071] 由此計(jì)算出P點(diǎn)的近似坐標(biāo),根據(jù)圖像的屬性,相鄰像素點(diǎn)的顏色值有極大可能 性是相同的,用此近似坐標(biāo)作為P的坐標(biāo)。然后將點(diǎn)(x,y)的像素值賦給Pi,這樣就完成了 目標(biāo)圖像的生成。
[0072] 圖3是控制網(wǎng)格調(diào)整流程圖。以下對(duì)圖中各個(gè)步驟作詳細(xì)說明:
[0073] 步驟1 :生成新的控制網(wǎng)格或加載之前保存的控制網(wǎng)格;
[0074] 步驟2 :將控制網(wǎng)格全屏顯示;
[0075] 步驟3 :調(diào)整控