本發(fā)明涉及一種基于平面表面高動(dòng)態(tài)范圍圖像的真實(shí)點(diǎn)光源位置測(cè)算方法,屬于增強(qiáng)現(xiàn)實(shí)技術(shù)領(lǐng)域。
背景技術(shù):
目前,為了加強(qiáng)增強(qiáng)現(xiàn)實(shí)中虛擬對(duì)象的沉浸感,大多數(shù)的光照環(huán)境重構(gòu)技術(shù)基本都是對(duì)測(cè)算設(shè)備或者場(chǎng)景有較高要求,并且為了減少對(duì)其他應(yīng)用的影響,光照環(huán)境重構(gòu)操作過(guò)程相對(duì)獨(dú)立,使得整個(gè)增強(qiáng)現(xiàn)實(shí)系統(tǒng)的完成過(guò)程顯得十分繁瑣。
基于增強(qiáng)現(xiàn)實(shí)的立體電影制作過(guò)程中,決定真實(shí)場(chǎng)景、角色同虛擬場(chǎng)景、角色合成效果真實(shí)感的一個(gè)關(guān)鍵技術(shù)是光照一致性技術(shù),包括明暗、反射、陰影等方面。早期基于增強(qiáng)現(xiàn)實(shí)的立體電影制作過(guò)程中,光照效果的解決方案多是虛擬布光和后期調(diào)整,這種方法只能提供一種近似的逼真感,并且這種方法需要花費(fèi)大量的后期制作時(shí)間和精力,如果更換了環(huán)境,則需要對(duì)場(chǎng)景進(jìn)行重新布光和調(diào)整。
基于圖像的光照,其核心技術(shù)是記錄真實(shí)場(chǎng)景光照信息載體的獲取。經(jīng)典的球鏡模型是在2002年Kanbara等人將一個(gè)二維方形板和一個(gè)球鏡組合在一起,形成一個(gè)三維標(biāo)志物,能夠同時(shí)完成幾何注冊(cè)和光照注冊(cè),以及更適用于復(fù)雜場(chǎng)景的改進(jìn)方法,將隨機(jī)點(diǎn)云標(biāo)定技術(shù)應(yīng)用其中,從而增強(qiáng)了該模型的魯棒性和估測(cè)范圍;美國(guó)特拉華大學(xué)的Wei Zhou等人,針對(duì)于以往光照估計(jì)中要求單一特定類(lèi)型光源的局限,提出了一種場(chǎng)景光照模型的統(tǒng)一化框架,對(duì)不同類(lèi)型的光源建立了更普遍適用的光源模型;Willianms提出的陰影映射算法,首先提取從光源到場(chǎng)景物體所有輪廓邊,然后得到由光源點(diǎn)及每個(gè)輪廓邊生成的半無(wú)限四邊形,這些四邊形構(gòu)成物體的陰影體。
目前真實(shí)光照恢復(fù)方法主要有三種:第一種是在已知物體幾何形狀以及物體表面為 Lambert 漫反射的前提下,從單幅圖像中根據(jù)物體表面明暗信息恢復(fù)出光源的數(shù)目和方向;第二種是通過(guò)已知幾何形狀的物體在場(chǎng)景中投射出的陰影區(qū)域,計(jì)算區(qū)域內(nèi)的光能輻射分布來(lái)恢復(fù)出場(chǎng)景中的光照分布;第三種是為了模擬真實(shí)世界中的復(fù)雜光照,利用純鏡面反光球計(jì)算場(chǎng)景中某一點(diǎn)處的環(huán)境映照?qǐng)D,然后通過(guò)高動(dòng)態(tài)范圍的恢復(fù)算法計(jì)算場(chǎng)景的輻射度圖。當(dāng)獲得了光照信息之后,其中虛擬光生成方法分為:一種是先用經(jīng)驗(yàn)光照明模型和場(chǎng)景幾何來(lái)恢復(fù)物體材料的光照屬性,再根據(jù)這些屬性生成新光照條件或新視點(diǎn)下的同一場(chǎng)景的圖像。該方法可以實(shí)現(xiàn)漫游和交互,但比較復(fù)雜;另一種是基于不同視點(diǎn)、光照方向的采樣圖像,采用合適的基函數(shù)對(duì)采樣圖像進(jìn)行插值、擬合等處理,從而獲得以視點(diǎn)和光照方向?yàn)樽兞康闹毓庹蘸瘮?shù),包含了間接光照和環(huán)境光照,具有全局性,但全局光照計(jì)算復(fù)雜度較高。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種基于平面表面高動(dòng)態(tài)范圍圖像的真實(shí)點(diǎn)光源位置測(cè)算方法,測(cè)算出真實(shí)點(diǎn)光源位置的測(cè)算模型,具有高效、簡(jiǎn)便等優(yōu)點(diǎn),更適合在實(shí)際用使用;其高效、快捷地估計(jì)出實(shí)際空間中點(diǎn)光源的位置并且為后期在三維建模軟件中將其虛擬化做準(zhǔn)備。
本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:一種基于平面表面高動(dòng)態(tài)范圍圖像的真實(shí)點(diǎn)光源位置測(cè)算方法,其特征在于:采用彩色數(shù)碼相機(jī)與三角架相連,彩色數(shù)碼相機(jī)與計(jì)算機(jī)相連,計(jì)算機(jī)中存有若干即62個(gè)圓,并將其編號(hào)dt記為1,2,3,...,62的半徑為10mm大正圓隨機(jī)分布,做為隨機(jī)點(diǎn)云標(biāo)定模板,將隨機(jī)點(diǎn)云標(biāo)定模板印刷于210mm*297mm純白色表面光滑不透光pvc板上,記作隨機(jī)點(diǎn)云標(biāo)記板;
具體的測(cè)算步驟如下:
步驟1、將三角架調(diào)至適當(dāng)高度,并調(diào)整三腳架的云臺(tái)部分,使得通過(guò)彩色數(shù)碼相機(jī)具體步驟如下的取景器目鏡能夠看到隨機(jī)點(diǎn)云標(biāo)記板的全部,將彩色數(shù)碼相機(jī)調(diào)至M檔,拍攝五張僅曝光時(shí)間不同的標(biāo)記板照片,分別記為Pic0、Pic1、Pic2、Pic3、Pic4,對(duì)應(yīng)的曝光時(shí)間依次記為Ev0、Ev1、Ev2、Ev3、Ev4,五張標(biāo)記板照片的圖像分辨率均為pix1*pix2。
步驟2、使用MALAB R2012b中的makehdr函數(shù)和Ev0、Ev1、Ev2、Ev3、Ev4,將Pic0、Pic1、Pic2、Pic3、Pic4合成為一張隨機(jī)點(diǎn)云標(biāo)記板高動(dòng)態(tài)范圍圖像,記為HDRI,存儲(chǔ)于計(jì)算機(jī)中。
步驟3、在隨機(jī)點(diǎn)云標(biāo)記板上建立以隨機(jī)點(diǎn)云標(biāo)記板的幾何中心為原點(diǎn)O、沿紙面向上為Z軸正方向的右手坐標(biāo)系,記為世界坐標(biāo)系。
步驟4、使用MALAB R2012b將HDRI上所有像素點(diǎn)的luminance值存儲(chǔ)到pix1*pix2的數(shù)組中,記為lum,其中l(wèi)um(i,j)表示HDRI上坐標(biāo)為(i,j)像素點(diǎn)的luminance值。在HDRI中隨機(jī)點(diǎn)云標(biāo)記板區(qū)域內(nèi)的白色部分任意選取五個(gè)像素點(diǎn),依次分別記為point0、point1、point2、point3、point4,并記它們?cè)贖DRI中的像素坐標(biāo)依次分別為
,
同時(shí),易獲取point0、point1、point2、point3、point4所對(duì)應(yīng)的luminance值,依次分別記為
。
步驟5、使用OpenCV1.0中的cvThreshold函數(shù),對(duì)隨機(jī)點(diǎn)云標(biāo)定模板進(jìn)行二值化;使用OpenCV1.0中的cvFindContours函數(shù),在二值化后的HDRI中找出各圖形的輪廓的點(diǎn)集;使用OpenCV1.0中的cvCvtSeqToArray函數(shù),依次將每一個(gè)圖形的輪廓的點(diǎn)集轉(zhuǎn)換為一維數(shù)組,一維數(shù)組中元素的類(lèi)型都為CvPoint;最后,使用OpenCV1.0中的cvFindContours函數(shù),對(duì)每個(gè)一維數(shù)組進(jìn)行圓擬合,得到每個(gè)圓的圓心坐標(biāo),記為
,
并從rotatedrect數(shù)據(jù)結(jié)構(gòu)中提取出每個(gè)圓的二次曲線方程記為:
其中分別為編號(hào)為dt的圓二次曲線方程的多項(xiàng)式系數(shù),令
,
并將歸一化記為。
步驟6、將隨機(jī)點(diǎn)云標(biāo)定模板中的每一個(gè)圓的 (后文稱做“中心圓”)與其最近的4個(gè)圓的(后文稱做“鄰近圓”)構(gòu)成一個(gè)按照中心圓編號(hào)為次序的PN*5矩陣,記為YU,其中YU[dt][0]記錄中心圓的,YU[dt][ii]記錄其最近4個(gè)圓的,ii=0,1,2,3,如圖4所示為一組,計(jì)算出每個(gè)中心圓曲線與其鄰近圓曲線間的做為邊長(zhǎng),其中
。
根據(jù)余弦定理計(jì)算方法如下:
將每個(gè)中心圓的四個(gè)余弦值存儲(chǔ)為62*4的數(shù)組,記為YXJ1,其中YXJ1(dt,0)、YXJ1(dt,1)、YXJ1(dt,2)、YXJ1(dt,3)表示隨機(jī)點(diǎn)云標(biāo)定模板中編號(hào)為dt的圓的4個(gè)相關(guān)余弦值,記為
。
步驟7、使用OpenCV1.0中的cvThreshold函數(shù),對(duì)HDRI進(jìn)行二值化;使用OpenCV1.0中的cvFindContours函數(shù),找出每一個(gè)可見(jiàn)橢圓的輪廓點(diǎn)集;隨后,需使用OpenCV1.0中的cvCvtSeqToArray函數(shù),依次將每一個(gè)可見(jiàn)橢圓的輪廓的點(diǎn)集轉(zhuǎn)換為一維數(shù)組,一維數(shù)組中元素的類(lèi)型都為CvPoint;最后,使用OpenCV1.0中的cvFitEllipse函數(shù),對(duì)每個(gè)一維數(shù)組進(jìn)行橢圓擬合,得到每個(gè)橢圓的圓心在世界坐標(biāo)系下的坐標(biāo),記為
,
并從rotatedrect數(shù)據(jù)結(jié)構(gòu)中提取出每個(gè)可見(jiàn)橢圓的二次曲線方程記為:
其中分別為編號(hào)為的橢圓二次曲線方程的多項(xiàng)式系數(shù),令
,
并將歸一化記為,其中表示HDRI中可見(jiàn)橢圓的編號(hào)。
步驟8、將HDRI中的每一個(gè)可見(jiàn)的橢圓的 (后文稱做“中心橢圓”)與其最近的4個(gè)橢圓的(后文稱做“鄰近橢圓”)構(gòu)成一個(gè)按照中心橢圓編號(hào)為次序的TN*5矩陣,記為T(mén)U,其中TU(dt’,0)記錄中心橢圓的,TU(dt’, ii)記錄其最近4橢圓的,ii=0,1,2,3,如圖5所示為一組,計(jì)算出每個(gè)中心橢圓與其鄰近橢圓間的做為邊長(zhǎng),其中
。
根據(jù)余弦定理計(jì)算方法如下:
將每個(gè)中心橢圓處的四個(gè)余弦值存儲(chǔ)為T(mén)N*4的數(shù)組,記為YXJ2[TN][4],其中YXJ2[dt’]表示攝影球圖片中可見(jiàn)的編號(hào)為dt’的橢圓的4個(gè)相關(guān)余弦值可記為
,TN表示在HDRI中觀察到的橢圓圓點(diǎn)的總數(shù)。
步驟9、將數(shù)組YXJ2與YXJ1進(jìn)行比較,找出其中相匹配的點(diǎn),其滿足:
。
按照YXJ1中各點(diǎn)順序?qū)XJ2中與YXJ1中相匹配的點(diǎn)存儲(chǔ)于TN*4的數(shù)組中,記為YXJ3。
步驟10、將YXJ1中每個(gè)圓形的圓心的坐標(biāo)和YXJ3中對(duì)應(yīng)的橢圓圓心的坐標(biāo)傳遞給OpenCV1.0中的攝像機(jī)標(biāo)定函數(shù)CalibrateCamera2,便可得彩色數(shù)碼相機(jī)2的3*3旋轉(zhuǎn)矩陣R和3*1平移矩陣T,從而可以計(jì)算得到point0、point1、point2、point3、point4在世界坐標(biāo)系中的坐標(biāo),N=0,1,2,3,4:
令
,
,
由解出采樣點(diǎn)point0、point1、point2、point3、point4在世界坐標(biāo)系中的坐標(biāo)。
步驟11、將point0、point1、point2、point3、point4中的任意四個(gè)點(diǎn)為一組,分為不重復(fù)的五組,并將這五組采樣點(diǎn)所對(duì)應(yīng)的在世界坐標(biāo)系中的坐標(biāo)和luminance值存儲(chǔ)到一個(gè)5*4*4數(shù)組中,記為g_pi,其中g(shù)_pi[n][p][q](q=0,1,2)表示第n組采樣點(diǎn)中第p個(gè)采樣點(diǎn)在世界坐標(biāo)系中的坐標(biāo),g_pi[n][p][3]表示第n組采樣點(diǎn)中第p個(gè)采樣點(diǎn)的luminance值。
步驟12、分別假設(shè)n=0、1、2、3、4,對(duì)g_pi[n][p][3]執(zhí)行步驟13、14、15操作。
步驟13、根據(jù)對(duì)實(shí)際點(diǎn)光源的位置,估計(jì)出大致測(cè)算范圍M,使得欲測(cè)算的點(diǎn)光源能夠位于以隨機(jī)點(diǎn)云標(biāo)記板所在平面為底面的M*M*M的立方體內(nèi),該立方體記為C。設(shè)該場(chǎng)景下環(huán)境光的luminance值為lum_amb,則可針對(duì)每組采樣點(diǎn)利用牛頓迭代法解如下方程組:
設(shè)最終待求點(diǎn)光源在圖2所示坐標(biāo)系中的坐標(biāo)為,
,該方程組記為“三球方程組”。
步驟14、每組采樣點(diǎn)在解步驟13中涉及的方程組時(shí)所選取的初始值可采用如下方法確定:
由M*M*M立方體的各邊中點(diǎn),將M*M*M的待分割立方體分割為等大的八個(gè)較小的立方體,按照方位順序?qū)⑦@八個(gè)較小立方體編號(hào),并記為Cf,其中f=0,1,2,…,7,此八個(gè)較小立方體的體中心點(diǎn)在世界系中的空間坐標(biāo)記為,并計(jì)算如下式子:
,該式記為“最小距離式”。其中為步驟13中牛頓迭代法解方程組時(shí)以為初始值的估算結(jié)果。
步驟15、選取使得最小距離式成立的體中心點(diǎn)所在較小立方體作為新的待分割立方體,重復(fù)操作步驟14,直到最小距離式的結(jié)果值小于0.001或者待分割立方體的邊長(zhǎng)不大于0.01,重復(fù)步驟14終止。至此,求得每組采樣點(diǎn)所估算出的關(guān)于lum_amb的點(diǎn)光源坐標(biāo),記為
。
步驟16、以步驟13中涉及的lum_amb為自變量,求解出滿足下式的lum_amb值:
。
步驟17、根據(jù)步驟16中所得的lum_amb值,依照步驟14、15所述操作求解三球方程組,并將五個(gè)三球方程組的結(jié)果坐標(biāo)取平均值。
通過(guò)以上步驟便可快速、高精度地估計(jì)實(shí)際空間中點(diǎn)光源的位置并且為后期在三維建模軟件中將其虛擬化做準(zhǔn)備。
本發(fā)明的積極效果是提出了一種基于平面表面高動(dòng)態(tài)范圍圖像中的照度信息,測(cè)算出真實(shí)點(diǎn)光源位置的測(cè)算模型。該方法操作簡(jiǎn)單,對(duì)輸入?yún)?shù)要求較低,僅需一副平面表面的高動(dòng)態(tài)范圍圖像,獲得點(diǎn)光源的空間位置;同時(shí),為了增強(qiáng)魯棒性,使用了點(diǎn)云標(biāo)定,克服了傳統(tǒng)的方形標(biāo)定板無(wú)法標(biāo)定大角度位置的缺陷;可以與各種增強(qiáng)現(xiàn)實(shí)的應(yīng)用相結(jié)合,對(duì)沉浸感的增強(qiáng)起到了很大的幫助,對(duì)光照的重構(gòu)提供了參考。
附圖說(shuō)明
圖1是一種基于單幅圖像中的點(diǎn)光源信息,生成虛擬點(diǎn)光源姿態(tài)的方法所需設(shè)備構(gòu)成圖,其中:1為A4隨機(jī)點(diǎn)云標(biāo)記板,2為彩色數(shù)碼相機(jī),3為三角架,4為計(jì)算機(jī),此圖是說(shuō)明書(shū)摘要附圖。
圖2是隨機(jī)點(diǎn)云標(biāo)記板1坐標(biāo)系圖,其中:1為A4隨機(jī)點(diǎn)云標(biāo)記板,此圖是說(shuō)明書(shū)摘要附圖。
圖3為本方法中使用的A4隨機(jī)點(diǎn)云標(biāo)記圖,此圖是說(shuō)明書(shū)摘要附圖。
圖4是隨機(jī)點(diǎn)云標(biāo)記板1中五個(gè)圓點(diǎn)組示意圖,此圖是說(shuō)明書(shū)摘要附圖。
圖5是隨機(jī)點(diǎn)云標(biāo)記板1中五個(gè)圓點(diǎn)組透視示意圖,此圖是說(shuō)明書(shū)摘要附圖。
圖6是估計(jì)立方體空間的分割示意圖,此圖是說(shuō)明書(shū)摘要附圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的描述:如圖1所示,一種基于平面表面高動(dòng)態(tài)范圍圖像的真實(shí)點(diǎn)光源位置測(cè)算方法,其特征在于:采用彩色數(shù)碼相機(jī)2與三角架3相連,彩色數(shù)碼相機(jī)2與計(jì)算機(jī)4相連,計(jì)算機(jī)4中存有若干即62個(gè)圓,并將其編號(hào)dt記為1,2,3,...,62的半徑為10mm大正圓隨機(jī)分布,做為隨機(jī)點(diǎn)云標(biāo)定模板,將隨機(jī)點(diǎn)云標(biāo)定模板印刷于210mm*297mm純白色表面光滑不透光pvc板上,記作隨機(jī)點(diǎn)云標(biāo)記板1;
具體的測(cè)算步驟如下:
步驟1、將三角架3調(diào)至適當(dāng)高度,并調(diào)整三腳架3的云臺(tái)部分,使得通過(guò)彩色數(shù)碼相機(jī)2具體步驟如下的取景器目鏡能夠看到隨機(jī)點(diǎn)云標(biāo)記板1的全部,將彩色數(shù)碼相機(jī)2調(diào)至M檔,拍攝五張僅曝光時(shí)間不同的標(biāo)記板照片,分別記為Pic0、Pic1、Pic2、Pic3、Pic4,對(duì)應(yīng)的曝光時(shí)間依次記為Ev0、Ev1、Ev2、Ev3、Ev4,五張標(biāo)記板照片的圖像分辨率均為pix1*pix2。
步驟2、使用MALAB R2012b中的makehdr函數(shù)和Ev0、Ev1、Ev2、Ev3、Ev4,將Pic0、Pic1、Pic2、Pic3、Pic4合成為一張隨機(jī)點(diǎn)云標(biāo)記板1高動(dòng)態(tài)范圍圖像,記為HDRI,存儲(chǔ)于計(jì)算機(jī)4中。
步驟3、在隨機(jī)點(diǎn)云標(biāo)記板1上建立以隨機(jī)點(diǎn)云標(biāo)記板1的幾何中心為原點(diǎn)O、沿紙面向上為Z軸正方向的右手坐標(biāo)系,記為世界坐標(biāo)系。
步驟4、使用MALAB R2012b將HDRI上所有像素點(diǎn)的luminance值存儲(chǔ)到pix1*pix2的數(shù)組中,記為lum,其中l(wèi)um(i,j)表示HDRI上坐標(biāo)為(i,j)像素點(diǎn)的luminance值。在HDRI中隨機(jī)點(diǎn)云標(biāo)記板1區(qū)域內(nèi)的白色部分任意選取五個(gè)像素點(diǎn),依次分別記為point0、point1、point2、point3、point4,并記它們?cè)贖DRI中的像素坐標(biāo)依次分別為
,
同時(shí),易獲取point0、point1、point2、point3、point4所對(duì)應(yīng)的luminance值,依次分別記為
。
步驟5、使用OpenCV1.0中的cvThreshold函數(shù),對(duì)隨機(jī)點(diǎn)云標(biāo)定模板進(jìn)行二值化;使用OpenCV1.0中的cvFindContours函數(shù),在二值化后的HDRI中找出各圖形的輪廓的點(diǎn)集;使用OpenCV1.0中的cvCvtSeqToArray函數(shù),依次將每一個(gè)圖形的輪廓的點(diǎn)集轉(zhuǎn)換為一維數(shù)組,一維數(shù)組中元素的類(lèi)型都為CvPoint;最后,使用OpenCV1.0中的cvFindContours函數(shù),對(duì)每個(gè)一維數(shù)組進(jìn)行圓擬合,得到每個(gè)圓的圓心坐標(biāo),記為
,
并從rotatedrect數(shù)據(jù)結(jié)構(gòu)中提取出每個(gè)圓的二次曲線方程記為:
其中分別為編號(hào)為dt的圓二次曲線方程的多項(xiàng)式系數(shù),令
,
并將歸一化記為。
步驟6、將隨機(jī)點(diǎn)云標(biāo)定模板中的每一個(gè)圓的 (后文稱做“中心圓”)與其最近的4個(gè)圓的(后文稱做“鄰近圓”)構(gòu)成一個(gè)按照中心圓編號(hào)為次序的PN*5矩陣,記為YU,其中YU[dt][0]記錄中心圓的,YU[dt][ii]記錄其最近4個(gè)圓的,ii=0,1,2,3,如圖4所示為一組,計(jì)算出每個(gè)中心圓曲線與其鄰近圓曲線間的做為邊長(zhǎng),其中
。
根據(jù)余弦定理計(jì)算方法如下:
將每個(gè)中心圓的四個(gè)余弦值存儲(chǔ)為62*4的數(shù)組,記為YXJ1,其中YXJ1(dt,0)、YXJ1(dt,1)、YXJ1(dt,2)、YXJ1(dt,3)表示隨機(jī)點(diǎn)云標(biāo)定模板中編號(hào)為dt的圓的4個(gè)相關(guān)余弦值,記為
。
步驟7、使用OpenCV1.0中的cvThreshold函數(shù),對(duì)HDRI進(jìn)行二值化;使用OpenCV1.0中的cvFindContours函數(shù),找出每一個(gè)可見(jiàn)橢圓的輪廓點(diǎn)集;隨后,需使用OpenCV1.0中的cvCvtSeqToArray函數(shù),依次將每一個(gè)可見(jiàn)橢圓的輪廓的點(diǎn)集轉(zhuǎn)換為一維數(shù)組,一維數(shù)組中元素的類(lèi)型都為CvPoint;最后,使用OpenCV1.0中的cvFitEllipse函數(shù),對(duì)每個(gè)一維數(shù)組進(jìn)行橢圓擬合,得到每個(gè)橢圓的圓心在世界坐標(biāo)系下的坐標(biāo),記為
,
并從rotatedrect數(shù)據(jù)結(jié)構(gòu)中提取出每個(gè)可見(jiàn)橢圓的二次曲線方程記為:
其中分別為編號(hào)為的橢圓二次曲線方程的多項(xiàng)式系數(shù),令
,
并將歸一化記為,其中表示HDRI中可見(jiàn)橢圓的編號(hào)。
步驟8、將HDRI中的每一個(gè)可見(jiàn)的橢圓的 (后文稱做“中心橢圓”)與其最近的4個(gè)橢圓的(后文稱做“鄰近橢圓”)構(gòu)成一個(gè)按照中心橢圓編號(hào)為次序的TN*5矩陣,記為T(mén)U,其中TU(dt’,0)記錄中心橢圓的,TU(dt’, ii)記錄其最近4橢圓的,ii=0,1,2,3,如圖5所示為一組,計(jì)算出每個(gè)中心橢圓與其鄰近橢圓間的做為邊長(zhǎng),其中
。
根據(jù)余弦定理計(jì)算方法如下:
將每個(gè)中心橢圓處的四個(gè)余弦值存儲(chǔ)為T(mén)N*4的數(shù)組,記為YXJ2[TN][4],其中YXJ2[dt’]表示攝影球圖片中可見(jiàn)的編號(hào)為dt’的橢圓的4個(gè)相關(guān)余弦值可記為
,TN表示在HDRI中觀察到的橢圓圓點(diǎn)的總數(shù)。
步驟9、將數(shù)組YXJ2與YXJ1進(jìn)行比較,找出其中相匹配的點(diǎn),其滿足:
。
按照YXJ1中各點(diǎn)順序?qū)XJ2中與YXJ1中相匹配的點(diǎn)存儲(chǔ)于TN*4的數(shù)組中,記為YXJ3。
步驟10、將YXJ1中每個(gè)圓形的圓心的坐標(biāo)和YXJ3中對(duì)應(yīng)的橢圓圓心的坐標(biāo)傳遞給OpenCV1.0中的攝像機(jī)標(biāo)定函數(shù)CalibrateCamera2,便可得彩色數(shù)碼相機(jī)2的3*3旋轉(zhuǎn)矩陣R和3*1平移矩陣T,從而可以計(jì)算得到point0、point1、point2、point3、point4在世界坐標(biāo)系中的坐標(biāo):
令
,
,
由解出采樣點(diǎn)point0、point1、point2、point3、point4在世界坐標(biāo)系中的坐標(biāo)。
步驟11、將point0、point1、point2、point3、point4中的任意四個(gè)點(diǎn)為一組,分為不重復(fù)的五組,并將這五組采樣點(diǎn)所對(duì)應(yīng)的在世界坐標(biāo)系中的坐標(biāo)和luminance值存儲(chǔ)到一個(gè)5*4*4數(shù)組中,記為g_pi,其中g(shù)_pi[n][p][q](q=0,1,2)表示第n組采樣點(diǎn)中第p個(gè)采樣點(diǎn)在世界坐標(biāo)系中的坐標(biāo),g_pi[n][p][3]表示第n組采樣點(diǎn)中第p個(gè)采樣點(diǎn)的luminance值。
步驟12、分別假設(shè)n=0、1、2、3、4,對(duì)g_pi[n][p][3]執(zhí)行步驟13、14、15操作。
步驟13、根據(jù)對(duì)實(shí)際點(diǎn)光源的位置,估計(jì)出大致測(cè)算范圍M,使得欲測(cè)算的點(diǎn)光源能夠位于以隨機(jī)點(diǎn)云標(biāo)記板1所在平面為底面的M*M*M的立方體內(nèi),該立方體記為C。設(shè)該場(chǎng)景下環(huán)境光的luminance值為lum_amb,則可針對(duì)每組采樣點(diǎn)利用牛頓迭代法解如下方程組:
設(shè)最終待求點(diǎn)光源在圖2所示坐標(biāo)系中的坐標(biāo)為,
,該方程組記為“三球方程組”。
步驟14、每組采樣點(diǎn)在解步驟13中涉及的方程組時(shí)所選取的初始值可采用如下方法確定:
由M*M*M立方體的各邊中點(diǎn),將M*M*M的待分割立方體分割為等大的八個(gè)較小的立方體,按照方位順序?qū)⑦@八個(gè)較小立方體編號(hào),并記為Cf,其中f=0,1,2,…,7,此八個(gè)較小立方體的體中心點(diǎn)在世界系中的空間坐標(biāo)記為,并計(jì)算如下式子:
,該式記為“最小距離式”。其中為步驟13中牛頓迭代法解方程組時(shí)以為初始值的估算結(jié)果。
步驟15、選取使得最小距離式成立的體中心點(diǎn)所在較小立方體作為新的待分割立方體,重復(fù)操作步驟14,直到最小距離式的結(jié)果值小于0.001或者待分割立方體的邊長(zhǎng)不大于0.01,重復(fù)步驟14終止。至此,求得每組采樣點(diǎn)所估算出的關(guān)于lum_amb的點(diǎn)光源坐標(biāo),記為
。
步驟16、以步驟13中涉及的lum_amb為自變量,求解出滿足下式的lum_amb值:
。
步驟17、根據(jù)步驟16中所得的lum_amb值,依照步驟14、15所述操作求解三球方程組,并將五個(gè)三球方程組的結(jié)果坐標(biāo)取平均值。
通過(guò)以上步驟便可快速、高精度地估計(jì)實(shí)際空間中點(diǎn)光源的位置并且為后期在三維建模軟件中將其虛擬化做準(zhǔn)備。