在Aurora中,目前提供了對(duì)白平衡(Write Balance)、效果(Effect)、亮度(brightness)、反沖帶(antibanding)、iso、夜間模式、旋轉(zhuǎn)、luma、質(zhì)量、幀速率等參數(shù)的默認(rèn)支持。下面以白平衡為例進(jìn)行介紹。
在進(jìn)一步了解白平衡前,需要首先了解黑體和色溫的概念。
根據(jù)基爾霍夫輻射定律,在熱平衡狀態(tài)的物體所輻射的能量與吸收的能量之比與物體本身物性無(wú)關(guān),只與波長(zhǎng)和溫度有關(guān)。而輻射出去的能量在各個(gè)波段是不同的,具有一定的譜分布。這種譜分布與物體本身的特性及其溫度有關(guān),稱之為熱輻射。
如果入射的能量能全部被吸收,則既沒(méi)有反射,也沒(méi)有透射,這種理想物體就是黑體。
英國(guó)著名物理學(xué)家Kelvin認(rèn)為,假定某一黑體物質(zhì),能夠?qū)⒙湓谄渖系乃袩崃课眨鴽](méi)有損失,同時(shí)又能夠?qū)崃可傻哪芰咳恳浴肮狻钡男问结尫懦鰜?lái),它便會(huì)因受到熱力的高低而變成不同的顏色。顏色成分與該黑體所受的熱力溫度是相對(duì)應(yīng)的,該溫度即色溫。
當(dāng)黑體受到的熱力相當(dāng)于500℃~550℃時(shí),就會(huì)變成暗紅色,達(dá)到1050℃~1150℃時(shí),就變成黃色,溫度繼續(xù)升高會(huì)呈現(xiàn)藍(lán)色。
由于人眼具有獨(dú)特的適應(yīng)性,使我們有的時(shí)候不能發(fā)現(xiàn)色溫的變化。比如在鎢絲燈下待久了,并不會(huì)覺(jué)得鎢絲燈下的白紙偏紅,如果突然把日光燈改為鎢絲燈照明,就會(huì)有白紙的顏色偏紅的感覺(jué),但這種意識(shí)也只能夠持續(xù)短暫的時(shí)間。
與人眼不同,數(shù)碼相機(jī)所采用的感光材料不具備這種適應(yīng)能力,如果攝像機(jī)的色彩調(diào)整同景物照明的色溫不一致就會(huì)發(fā)生偏色。
白平衡就是針對(duì)不同色溫條件,通過(guò)調(diào)整數(shù)碼相機(jī)內(nèi)部的色彩電路,使拍攝出來(lái)的影像抵消偏色,更接近人眼的視覺(jué)習(xí)慣。白平衡可以簡(jiǎn)單地理解為在任意色溫條件下,數(shù)碼相機(jī)所拍攝的標(biāo)準(zhǔn)白色經(jīng)過(guò)電路的調(diào)整,使之成像后仍然為白色。
所謂自動(dòng)白平衡,是指依賴數(shù)碼相機(jī)里的測(cè)色溫系統(tǒng),測(cè)出紅光和藍(lán)光的相對(duì)比例。再依據(jù)此數(shù)據(jù)調(diào)整曝光,產(chǎn)生紅、綠、藍(lán)電信號(hào)的增益。自動(dòng)白平衡大的優(yōu)勢(shì)是簡(jiǎn)單、快捷。
白平衡是圖像處理領(lǐng)域的一個(gè)重要概念,主要用來(lái)解決色彩還原和色調(diào)處理的一系列問(wèn)題。
在Aurora中,拍照參數(shù)的設(shè)置都是通過(guò)Camera驅(qū)動(dòng)來(lái)進(jìn)行的,Camera驅(qū)動(dòng)的實(shí)現(xiàn)遵循Linux驅(qū)動(dòng)的統(tǒng)一模型,為了設(shè)置參數(shù),需要通過(guò)調(diào)用ioctl來(lái)進(jìn)行。下面是Aurora中對(duì)白平衡參數(shù)的設(shè)置:
代碼:白平衡參數(shù)的設(shè)置
void QualcommCameraHardware::setSensorWBLighting(int camfd, const char* lighting)
{
int ioctlRetVal=TRUE, lightingValue=1;
struct msm_ctrl_cmd_t ctrlCmd;
ctrlCmd.timeout_ms=5000; //超時(shí)時(shí)間
ctrlCmd.type =CAMERA_SET_PARM_WB; //參數(shù)類型
ctrlCmd.length=sizeof(uint32_t);
ctrlCmd.value=NULL;
for (int i=1; i< MAX_WBLIGHTING_EFFECTS; i++) {
if (! strcmp(wb_lighting[i], lighting)) {
LOGV("In setSensorWBLighting : Match : %s : %d ", lighting, i);
lightingValue=i;
ctrlCmd.value=(void *)&lightingValue; //白平衡值
break;
}
}
if(ctrlCmd.value!=NULL)
{
//向Camera驅(qū)動(dòng)發(fā)送命令
if((ioctlRetVal=ioctl(camfd, MSM_CAM_IOCTL_CTRL_COMMAND, &ctrlCmd))<0) {
LOGV("setSensorWBLighting : ioctl failed. ioctl return value is %d \n", ioctlRetVal);
}
}
else
{
LOGV(" setSensorWBLighting : No match found for %s ", lighting);
}
}
其他Camera參數(shù)的設(shè)置和白平衡類似,相關(guān)的實(shí)現(xiàn)在QualcommCameraHardware.cpp文件中均可找到,這里就不再過(guò)多敘述了。