李瑞民,張敬平
(1.上海風(fēng)格信息技術(shù)股份有限公司,上海201804;2.上海戲劇學(xué)院,上海200040)
現(xiàn)在大量城市標(biāo)志型建筑,喜歡在夜間將整座大樓作為一個(gè)天然的顯示屏,然后通過(guò)投影的方式,將要展示圖片或視頻投射到大樓上,以達(dá)到氣勢(shì)宏大和廣告宣傳的展示效果,這種方式稱為“大樓幕墻投射”[1],如圖 1所示。
圖1 大樓幕墻投影實(shí)例圖
不難想象,只要大樓投射面不是球面內(nèi)側(cè),并且投影機(jī)沒(méi)有位于“球心”位置,則會(huì)因?yàn)橥渡浣嵌鹊膯?wèn)題而產(chǎn)生在屏幕上圖像的變形。這種變形直接導(dǎo)致圖像的扭曲失真。如果是直接室內(nèi)的投射,通常的作法是在室內(nèi)先找一個(gè)銀幕,或者是一個(gè)白色墻的豎立面。投影機(jī)距離墻的豎立面很近,所以即使銀幕不是球形,或投影機(jī)球體的“球心”,這種小范圍的畫面扭曲變形并不明顯,因而這種方式被廣泛應(yīng)用。但當(dāng)將整座大樓的一面作為投射區(qū)的時(shí)候,該投影機(jī)一般只能固定放置在樓前的地面上的,并且由于樓前廣場(chǎng)的范圍有限,所以投影機(jī)距離大樓一般不是很遠(yuǎn),這時(shí),如果大樓的高度很高時(shí),所投射的圖像或視頻會(huì)產(chǎn)生較大的扭曲失真。
投影機(jī)將圖像投射到“大樓投面墻”上的“幕墻投影區(qū)”中,由于幕墻不是球面,投影機(jī)也不可能處于“球心”處,所以所投的影像效果肯定會(huì)產(chǎn)生失真,并且根據(jù)生活常識(shí),初步可以判斷越往幕墻的上部區(qū)域,失真越厲害。假設(shè)觀看投射內(nèi)容人位于無(wú)窮遠(yuǎn)處,雖然事實(shí)上無(wú)窮遠(yuǎn)是不可能的,但是當(dāng)觀眾足夠遠(yuǎn)的時(shí)候,其效果會(huì)更接近這種無(wú)窮遠(yuǎn),這時(shí)觀眾所看到畫面將因圖像扭曲而無(wú)法接受[2]。
分析上述現(xiàn)象產(chǎn)生的原因,是因?yàn)橥队皺C(jī)在設(shè)計(jì)的時(shí)候,其默認(rèn)的投影區(qū)域是一個(gè)內(nèi)側(cè)球面,當(dāng)不是球面的時(shí)候,就會(huì)產(chǎn)生失真;而位于“無(wú)窮遠(yuǎn)”的觀眾所需要看到的是一個(gè)接近于完全均勻的平面。當(dāng)室內(nèi)投射的時(shí)候,由于攝影機(jī)和投影區(qū)域距離很近,投射區(qū)域很小,并且最重要的是,投影機(jī)“接近”于投射區(qū)域的“球心”,所以失真很少,觀看者的失真感受不明顯;但當(dāng)上述條件不滿足相反時(shí),問(wèn)題就變得比較嚴(yán)重,甚至最終無(wú)法接受。
那么解決問(wèn)題的關(guān)鍵是,找到二者的契合點(diǎn),將投影
機(jī)的投射轉(zhuǎn)換為與投射區(qū)域“自適應(yīng)”的效果,使投影機(jī)在投射的時(shí)候,就能根據(jù)投射區(qū)域的形狀或位置,先行進(jìn)行“反扭曲”的轉(zhuǎn)換,這種轉(zhuǎn)換的目的,就是使得最終的投射效果本身就是扭曲的,但是對(duì)于觀眾來(lái)說(shuō),反而是正常的[3]。解決此問(wèn)題的辦法,一種是針對(duì)具體的大樓幕墻設(shè)計(jì)專一的投影機(jī),然而這種治標(biāo)不治本的辦法既增加了成本,也缺乏靈活性。另一種辦法就是直接在普通的投影機(jī)上加上一個(gè)“濾鏡”(Filter)對(duì)圖像或視頻進(jìn)行轉(zhuǎn)換,進(jìn)而針對(duì)不同的大樓,只需要通過(guò)幾個(gè)特定的參數(shù)設(shè)置,就可以自動(dòng)適應(yīng)不同的轉(zhuǎn)換,從而達(dá)到質(zhì)的改進(jìn)。
算法的關(guān)鍵在于如何找到這樣一個(gè)“濾鏡”,對(duì)投影機(jī)來(lái)說(shuō),所設(shè)計(jì)的投影區(qū)域是一個(gè)球面,對(duì)觀眾來(lái)說(shuō),所需要的投影區(qū)域是一個(gè)均勻平面?,F(xiàn)實(shí)中,二者都會(huì)設(shè)計(jì)成一個(gè)矩形的區(qū)域,并且無(wú)論是投影機(jī),還是大樓投影區(qū)域,其水平方面的點(diǎn)都是均勻的,不存在扭曲變形,所產(chǎn)生扭曲的區(qū)域主要是垂直方面,所以在下面算法的設(shè)計(jì)中,可以忽略水平方面,而只考慮其中的垂直截面即可[4]。當(dāng)然,如果投射的區(qū)域,在水平方向上也有類似的扭曲,則算法相同。
根據(jù)生活常識(shí),攝影機(jī)一般放置在大樓前面一定的距離,直接投向大樓的側(cè)面墻,并且為了使遠(yuǎn)處的人可以看到投影效果,所以投影的頂端一般位于大樓側(cè)面的頂端,而底端則并不位于大樓側(cè)面的底端,而是距離地面有一定的距離,如圖2所示。
圖2 大樓幕墻投影模型
圖2 中,C是投影機(jī)的位置,右側(cè)豎直線是大樓的投面墻的切面(假設(shè)該墻是一個(gè)豎直的垂面),投影機(jī)與大樓側(cè)墻與地的交點(diǎn)的距離為L(zhǎng)(稱為“離樓距離L”)。在大樓上,投影的最下一條線在大樓側(cè)墻上的高度距地高度為G(稱為“距地高度H”),與地夾角為β;投影的最上一條線與最下一條線在大樓側(cè)墻上的高度差為H(稱為“投影高度H”),在投影機(jī)上的夾角為α。
為了便于進(jìn)行定量分析,在上述分析中,夾角α內(nèi)的投影均會(huì)投射在“投影高度H”中,如果將二者各做一個(gè)四等分,則夾角α?xí)痪€(一)~線(五)四等分;“投影高度H”會(huì)被線(1)~線(5)四等分。根據(jù)前面的描述,可知線(一)和線(1)、線(五)和線(5)會(huì)始終重合,但線(二)、線(三)、線(四)和線(2)、線(3)、線(4)則不一定會(huì)兩兩重合。
首先分析線(一)~線(五)的計(jì)算方式,不難看出:
推而廣之,在現(xiàn)實(shí)應(yīng)用中,數(shù)字投影機(jī)所投的圖像,與計(jì)算機(jī)中所顯示的分辨率類似,都可以組成一個(gè)矩形點(diǎn)陣,根據(jù)上面的分析,如果只考慮垂直方面,則只需要任選一條垂直線進(jìn)行分析即可。假設(shè)垂直分辨率為v,根據(jù)上述分析,不難推出,這些第n根線與地的夾角為
其次再分析線(1)~線(5)的計(jì)算公式,同樣可以看到:
將上述公式進(jìn)行推廣,并同樣假設(shè)垂直分辨率為v,則不難推出第n根線與地的夾角為
在圖2的分析中,線(一)~線(五)對(duì)應(yīng)的是投影機(jī)所能提供的等分線,而線⑴~線⑸是大樓投影區(qū)所需要的等分線。前者線(一)~線(五)是可以進(jìn)行調(diào)整的,后者線(1)~線(5)則是無(wú)法進(jìn)行調(diào)整的,觀眾要看到的是后者的效果,所以應(yīng)該盡可能調(diào)整前者,以便后者與實(shí)際情況更接近。
根據(jù)圖2,可以看到線(一)投射到了線(1)處,故不需要再調(diào)整。線(二)位于線(1)和線(2)之間,為了保證線(2)顏色接近于實(shí)際的效果,可以調(diào)整線(二),將其值轉(zhuǎn)換為介于原線(一)和線(二)之間的顏色,并且,其調(diào)整的幅度,按比例線(二)位于線(1)和線(2)之間,距離線(1)和線(2)的遠(yuǎn)近作為比例。同樣的方法,線(三)、線(四)可以如法炮制做出轉(zhuǎn)換。最終,線(五)和線(1)重合,所以可以直接投射。
總結(jié)上述方法,就是對(duì)于垂直分辨率的第一和最后一根線,可以直接復(fù)制,對(duì)于介于其中的線,則首先找到該線位于哪一個(gè)投射區(qū)域等分線段內(nèi),然后根據(jù)該區(qū)域兩邊邊界的顏色值,結(jié)合該線在等分線段內(nèi)所占的比例,轉(zhuǎn)換顏色值。
要驗(yàn)證上述理論,最好的辦法就是通過(guò)程序進(jìn)行驗(yàn)證。分析上述算法,首要的是先將圖像或視頻中的像素點(diǎn)陣讀取出來(lái);第二步要做的就是根據(jù)上述算法對(duì)圖像點(diǎn)陣中每個(gè)像素進(jìn)行轉(zhuǎn)換,其轉(zhuǎn)換的目的,就是要將轉(zhuǎn)換后的圖像通過(guò)投影機(jī)投放到投影區(qū)里,可以適合于遠(yuǎn)處觀眾觀看無(wú)失真的圖像或視頻。
眾所周知,無(wú)論是圖像,還是視頻,都采用了各種壓縮算法,其目的就是避免圖像文件或視頻傳輸?shù)臄?shù)據(jù)量過(guò)大。要將圖像或視頻中的像素點(diǎn)陣從壓縮的視頻文件或視頻流中讀取出來(lái),方法有很多種,一種辦法是找到該圖像的壓縮標(biāo)準(zhǔn),然后按照解壓縮的算法自己編程進(jìn)行讀取;另一種辦法就是直接從網(wǎng)上查找一些現(xiàn)成的軟件工具包,直接進(jìn)行調(diào)用達(dá)到目的。例如OpenCV可以將目前主流的各種格式圖像文件打開,讀取點(diǎn)陣數(shù)據(jù),而FFmpeg則除了可以將各種主流的視頻文件打開之外,還可以打開視頻流,然后將其中每一幀的圖像點(diǎn)陣讀取出來(lái)。
將一張圖像的各個(gè)像素值讀取出來(lái)以后,就可以將所有數(shù)據(jù)看成一個(gè)二維的點(diǎn)陣,由于同一行中,每個(gè)像素值的處理方式是一樣的,所以下面的處理可以行為單位。
圖3 算法流程圖
從圖3可以看出,每一行的處理主要分為兩步,第一步是“找投影機(jī)角度所在投影區(qū)域的范圍”,由式(1)可知第i行線的角度是,由式(2)可知第n個(gè)區(qū)段的邊界值為arctan,只要將第i行線的角度分別與后面兩個(gè)邊界值作比較,即可知道第i行線是否位于第n個(gè)區(qū)段中。
第二步是“根據(jù)投影區(qū)域范圍測(cè)算實(shí)際RGB值”也不難計(jì)算,首先用“第i行線與第n個(gè)區(qū)段的上邊界的差”除以“第i行線與第n個(gè)區(qū)段的下邊界的差”算出第i行線占整個(gè)角跨度的比例。然后將兩邊界值所對(duì)應(yīng)的顏色進(jìn)行轉(zhuǎn)換。
以像素的紅色分量為例,則:
最后的r3即為所要顯示的紅色分量,同樣的辦法可以算出綠色和藍(lán)色分量。
通過(guò)上述的分析和設(shè)計(jì),可以程序的驗(yàn)證。在Win7下,通過(guò)Visual C++編寫演示程序,采用OpenCV技術(shù)實(shí)現(xiàn)其算法,算法的演示效果如圖4所示。
圖4 濾鏡算法實(shí)例圖(截圖)
圖4a為原始圖片,當(dāng)輸入“地面到投影區(qū)底部距離”(即圖2中的G)、“大樓投射區(qū)的高度”(即圖2中的H)和“投影機(jī)到樓底部的距離”(即圖2中的L),并單擊“開始投影”按鈕時(shí),可以看到濾鏡算法處理后的效果,即圖4b。
在實(shí)際應(yīng)用中,只需要知道上述3個(gè)參數(shù)即可。而這3個(gè)參數(shù)可以通過(guò)簡(jiǎn)單的測(cè)算獲得。
如果一個(gè)大樓的投影面不是一個(gè)與地面垂直的墻面,則并不影響該算法的使用,如圖5所示。
圖5 當(dāng)大樓投射面不是垂直面的示意圖
當(dāng)大樓不是垂直面時(shí),可以如圖5所示引出輔助線(圖5中虛線所示),然后通過(guò)一些簡(jiǎn)單的幾何運(yùn)算,即可獲得,即H'=H;L'=L×cosγ;G'=G+L×sinγ。
近年來(lái),隨著人們娛樂(lè)要求和商業(yè)活動(dòng)的緊密結(jié)合,越來(lái)越多的高樓大廈會(huì)在晚上以投放圖像或視頻的方式達(dá)到娛樂(lè)大眾的效果,全面采用LED彩屏成本太高,而直接采用數(shù)字投影機(jī)又會(huì)出現(xiàn)變形[5]。而本文,正是針對(duì)解決這一問(wèn)題的初步嘗試。通過(guò)本方式,將復(fù)雜的應(yīng)用通過(guò)濾鏡的方式得以解決,希望能拋磚引玉,推進(jìn)這種應(yīng)用的發(fā)展。
[1]李超,許春耀,潘林,等.面向投影環(huán)境的計(jì)算機(jī)視覺(jué)交互信息獲?。跩].電視技術(shù),2013,37(11):104-107.
[2]劉蘇醒,安平,張兆楊.DIBR中基于平面掃描的深度重建方法[J].電子器件,2008,31(1):320-324.
[3]李文杰,吳黎明.投影-攝像人機(jī)柔性互動(dòng)技術(shù)的分析與探討[J].電視技術(shù),2013,37(17):178-182.
[4]鮑緒良,王元慶.立體圖像生成的視差控制[J].現(xiàn)代電子技術(shù),2012,35(16):75-78.
[5]劉全恩.大屏幕投影機(jī)技術(shù)發(fā)展趨勢(shì)[J].電視技術(shù),2013,37(4):1-5.