本申請是申請日為2013年7月11日、申請?zhí)枮?01380036682.5、發(fā)明名稱為“用于圖像采集和處理的統(tǒng)一跨設(shè)備控制的抽象相機管道”的發(fā)明專利申請的分案申請。
本申請涉及用于在設(shè)備中獲取數(shù)字圖像的方法和系統(tǒng)。具體地,本公開涉及允許安裝在設(shè)備上的分立程序控制相同設(shè)備上的數(shù)字圖像傳感器的應(yīng)用編程接口(api)。
背景技術(shù):
很多現(xiàn)代設(shè)備依賴于來自一個供應(yīng)商的操作系統(tǒng)和來自一個或者多個其他供應(yīng)商的硬件。進(jìn)一步地,設(shè)備可以包括來自第三供應(yīng)商的另外的程序或者應(yīng)用。
在設(shè)備上,操作系統(tǒng)包括監(jiān)管操作系統(tǒng)或者硬件(例如,顯示器、觸摸屏、音頻輸出、網(wǎng)絡(luò)連接、數(shù)字圖像傳感器等)的應(yīng)用控制的應(yīng)用編程接口(api)。這些api提供用于在硬件上執(zhí)行功能的通用指令準(zhǔn)則。
當(dāng)前的相機api可以包括高水平準(zhǔn)則,諸如用于獲取圖像的指令和用于使閃光燈發(fā)光的指令。另外的低水平功能不存在于api中,并且因此應(yīng)用對數(shù)字圖像傳感器具有有限的控制。提供具有低水平功能但是與更大數(shù)目的獨立硬件配置兼容的api將是有利的。
技術(shù)實現(xiàn)要素:
一種用于具有集成相機的設(shè)備獲取數(shù)字圖像的系統(tǒng)包括應(yīng)用程序接口(api)。api適于從操作在設(shè)備上的分立應(yīng)用接收指令。指令可以包括圖像采集指令和圖像數(shù)據(jù)預(yù)處理指令。api還可以適于使用管道配置處理多個圖像采集指令,其中根據(jù)第一圖像采集請求執(zhí)行處理的不同元素,而根據(jù)第二圖像采集請求執(zhí)行處理的其他元素。在預(yù)處理后,系統(tǒng)將經(jīng)預(yù)處理的圖像輸出回到分立應(yīng)用,和/或到存儲器和gpu。
由api從分立應(yīng)用接收的指令允許分立應(yīng)用自定義api輸出的圖像數(shù)據(jù)的采集和預(yù)處理。
具體地,根據(jù)本發(fā)明的一方面,提供一種用于從產(chǎn)生傳感器數(shù)據(jù)的相機獲取數(shù)字圖像的系統(tǒng),所述系統(tǒng)包括:分立應(yīng)用,接收來自相機的圖像的第一請求和第二請求,所述分立應(yīng)用分別產(chǎn)生第一預(yù)處理指令和第二預(yù)處理指令;和接口,適于從所述分立應(yīng)用接收預(yù)處理指令,所述接口包括多個預(yù)處理模塊,每個模塊在所述傳感器數(shù)據(jù)上執(zhí)行相應(yīng)的預(yù)處理功能,所述接口適于響應(yīng)于所述第一預(yù)處理指令激活模塊的第一子集以生成第一預(yù)處理圖像,以及響應(yīng)于所述第二預(yù)處理指令激活模塊的第二子集以生成第二預(yù)處理圖像,其中由所述第一和第二模塊子集執(zhí)行的預(yù)處理功能的順序分別由所述第一預(yù)處理指令和第二預(yù)處理指令選擇性地控制。
根據(jù)本發(fā)明的另一方面,提供一種用于獲取在具有集成相機、分立應(yīng)用和適于從所述分立應(yīng)用接收預(yù)處理指令的接口的設(shè)備上操作的多個數(shù)字圖像的方法,所述接口包括多個預(yù)處理模塊,每個模塊執(zhí)行相應(yīng)的所述傳感器數(shù)據(jù)的預(yù)處理功能,所述方法包括以下步驟:生成第一請求以獲取圖像,所述第一請求包括第一預(yù)處理指令;生成獲取圖像的第二請求,所述第二請求包括第二預(yù)處理指令;根據(jù)第一請求獲取第一傳感器數(shù)據(jù);根據(jù)所述接口的第一預(yù)處理指令對第一傳感器數(shù)據(jù)進(jìn)行預(yù)處理,所述接口適于響應(yīng)于所述第一預(yù)處理指令激活模塊的第一子集以產(chǎn)生第一預(yù)處理圖像,其中由模塊的第一子集執(zhí)行的預(yù)處理功能的順序由第一預(yù)處理指令選擇性地控制;根據(jù)第二請求獲取第二傳感器數(shù)據(jù);根據(jù)所述接口的第二預(yù)處理指令對第二傳感器數(shù)據(jù)進(jìn)行預(yù)處理,所述接口適于響應(yīng)于所述第二預(yù)處理指令激活模塊的第二子集以產(chǎn)生第二預(yù)處理圖像,其中由模塊的第二子集執(zhí)行的預(yù)處理功能的順序由第二預(yù)處理指令選擇性地控制;和輸出第一預(yù)處理圖像和第二預(yù)處理圖像。根據(jù)本發(fā)明的一方面,提供一種用于獲取具有集成相機的設(shè)備的數(shù)字圖像的系統(tǒng),所述系統(tǒng)包括:適于從分立應(yīng)用接收多個指令的接口,其中所述指令被配置為在多個硬件配置上操作,所述接口包括多個接口模塊,并且其中所述接口適于對于每個所述指令激活所述模塊的不同子集;適于根據(jù)所述指令獲取初始圖像數(shù)據(jù)的傳感器;和處理器,其適于根據(jù)所述多個指令的第一指令預(yù)處理第一初始圖像數(shù)據(jù)并輸出第一預(yù)處理圖像數(shù)據(jù),并且并行地根據(jù)所述多個指令的第二指令預(yù)處理第二初始圖像數(shù)據(jù)并輸出第二預(yù)處理圖像數(shù)據(jù),其中所述預(yù)處理指令中的至少一個包括從由以下組成的組中選擇的指令:陰影校正、噪聲降低、去馬賽克、噪點校正、幾何校正、色彩校正和邊緣增強。
從下文的詳細(xì)描述中,本公開另外的特征將顯而易見,詳細(xì)描述借助于示例圖示了本公開的特征。
附圖說明
本領(lǐng)域的技術(shù)人員從下文的詳細(xì)描述和其附圖中將會領(lǐng)會和理解本公開的上述和其他優(yōu)點和特征。
圖1是本公開的用于獲取圖像的系統(tǒng)的示例的透視圖;
圖2是本公開的用于獲取圖像的系統(tǒng)的示例的示意圖;
圖3是本公開的用于獲取圖像的系統(tǒng)的示例的另一示意圖;
圖4是本公開的用于獲取圖像的系統(tǒng)的示例的預(yù)處理器的示意圖;以及
圖5是本公開的用于獲取圖像的系統(tǒng)的示例的另一示意圖。
具體實施方式
本公開提供用于相機和傳感器的改進(jìn)的api。如圖1所示,api(有時稱為“接口”)優(yōu)選地設(shè)計用于移動設(shè)備100,雖然它可以用在具有相機102的任何設(shè)備上。api被配置成基于指令集控制一類硬件配置。
假定設(shè)備100包括操作系統(tǒng)(os)210和分立應(yīng)用220。os210協(xié)調(diào)應(yīng)用220、集成相機202(貫穿本書面描述,術(shù)語相機和傳感器可以互換使用)和顯示器204的功能。os210進(jìn)一步包括相機api212和顯示器api214,其中相機api212與相機202通信,并且顯示器api214與顯示器204通信。
預(yù)處理
無論何時(相機的)圖像傳感器獲取圖像或視頻(下文中“圖像”可以用于包括圖像和視頻二者),初始傳感器數(shù)據(jù)在其可以被顯示前必須被預(yù)處理。初始傳感器數(shù)據(jù)包括噪聲、邊影、模糊(pixilation)和使圖像對于人眼更不可識別的其他特性。因此,必須使用預(yù)處理算法(例如,去馬賽克、噪聲降低、噪點校正、白平衡調(diào)整、對比度調(diào)整、邊緣增強)調(diào)整初始傳感器數(shù)據(jù)。本公開允許在圖像創(chuàng)建中的該數(shù)據(jù)的預(yù)處理中的更大的靈活性。
本公開將提供統(tǒng)一的指令集,借此在系統(tǒng)300上運行的分立應(yīng)用312(即,結(jié)合但獨立于操作系統(tǒng)運行的應(yīng)用)能夠操縱預(yù)處理器330。具體地,系統(tǒng)300允許應(yīng)用312控制包括在數(shù)字圖像獲取中的預(yù)處理器330。例如,隨后安裝在設(shè)備100上的應(yīng)用可以提供用于先前標(biāo)識的預(yù)處理功能的新算法。系統(tǒng)300還能夠操作在一類硬件配置上,而不是設(shè)計用于特定的圖像傳感器和處理器。
如圖3所示,圖像獲取系統(tǒng)300從傳感器302或者raw輸入308獲得初始傳感器數(shù)據(jù)306,其中傳感器302和raw輸入308可以由獲取圖像指令啟動。raw輸入308包括已經(jīng)存儲在存儲器中的先前獲得的傳感器數(shù)據(jù)。初始傳感器數(shù)據(jù)306被輸送到統(tǒng)計發(fā)生器320和raw輸出350。raw輸出350前進(jìn)到多路復(fù)用器360,這在下文中討論。
統(tǒng)計發(fā)生器320測量統(tǒng)計數(shù)字,諸如日期、分辨率、閃光、和與正被獲取的圖像相關(guān)的其他信息。在一個示例中,統(tǒng)計發(fā)生器320計算直方圖并且將直方圖輸出到應(yīng)用。
在生成統(tǒng)計數(shù)字后,基于來自應(yīng)用312的預(yù)處理指令314由如圖4所示的預(yù)處理器330處理raw輸入308。如上文所討論的那樣,預(yù)處理器適于執(zhí)行:陰影校正332、噪聲降低334、去馬賽克336、噪點校正338、幾何校正340、色彩校正342、色調(diào)曲線調(diào)整344、和邊緣增強346。這些功能的順序可以由預(yù)處理器330預(yù)定或者可以由預(yù)處理指令314控制。雖然系統(tǒng)還可以接受來自應(yīng)用312的作為預(yù)處理指令314的部分的預(yù)處理算法,但是系統(tǒng)可以包括用于預(yù)處理功能332、334、336、338、340、342、344、346的各種已知的算法。進(jìn)一步地,應(yīng)用312的預(yù)處理指令314可以包括禁用預(yù)處理功能332、334、336、338、340、342、344、346中的一個或者多個預(yù)處理功能。
新近預(yù)處理的數(shù)據(jù)348以yuvraw輸出352、壓縮輸出354和視頻輸出356的形式被轉(zhuǎn)換和輸出。yuvraw輸出352、壓縮輸出354和視頻輸出356通過多路復(fù)用器360與raw輸出350組合,并且然后從api310輸出到應(yīng)用312。然后應(yīng)用312基于多路復(fù)用器360的輸出可以進(jìn)一步處理數(shù)據(jù)(使用任何或者所有格式)和/或顯示圖像。
管道
如與圖2相補的圖5所圖示的那樣,提供用于獲取圖像的api500。api500可以由getcamerainfo()502和open(id)504命令啟動,所述命令由os210提供給系統(tǒng)500(部分對應(yīng)于api212)。getcamerainfo()502命令測量相機特性510,優(yōu)選地包括id512、位置信息514、光學(xué)信息516、傳感器信息518和管道信息520。
id512包括相機202的型號名稱和型號。位置信息514涉及設(shè)備上的傳感器的位置(可以應(yīng)用于多相機立體圖像獲取應(yīng)用)。光學(xué)信息516包括關(guān)于相機202的固定信息,諸如焦距和光圈范圍。傳感器信息518包括關(guān)于傳感器202的固定信息,諸如最大分辨率、類型(例如cmos、ccd等)和尺寸。管道信息520包括可用的處理類別(例如,肖像、運動、動畫、視頻、風(fēng)景等)。
open(id)命令504啟動api500并且允許創(chuàng)建多個管道530(圖5中圖示了四個createpipeline()函數(shù)522、524、526、528)和采集請求540(與createcapturerequest()538有關(guān))。createpipeline()函數(shù)522、524、526、528和createcapturerequest()函數(shù)538是從系統(tǒng)500調(diào)用的方法的所有實例。每個管道530是一組串聯(lián)連接的數(shù)據(jù)處理元素,其中一個元素的輸出是下一元素的輸入;第一管道530的一個元素可以與第二管道530的不同元素并行地執(zhí)行。
多個管道530中的每個管道被分配槽編號532、幀大小534和幀格式536。采集請求540包括針對傳感器控制544、透鏡控制546、3a控制(自動曝光、自動聚焦、自動白平衡)548、處理控制550和統(tǒng)計控制552的準(zhǔn)則。處理控制準(zhǔn)則550可以包括上文關(guān)于圖3和圖4描述的預(yù)處理指令314。通過包含與每個輸出管道530相關(guān)的采集請求信息544、546、548、550和552,采集請求540形成多個輸出管道530。
分別響應(yīng)于stream()方法554或capture()方法556,輸出管道540被轉(zhuǎn)發(fā)到輸入請求隊列560和/或流式保持槽570。輸入請求隊列560包含多個請求562,并且流式保持槽570包含流請求572。輸入請求隊列560和流式保持槽570還可以由reprocess()方法558填入。reprocess()方法558涉及來自存儲器而不是傳感器的數(shù)據(jù)。
輸入請求隊列560包括保持請求562的有序列表的多個空間,以采集具有采集請求538細(xì)節(jié)的圖像。一旦圖像傳感器580(圖5中稱為平臺硬件抽象層(hal)實施方式)已經(jīng)獲取圖像,輸入請求隊列560中的下一請求562被傳遞給傳感器580。傳感器580不僅獲取數(shù)據(jù),而且根據(jù)預(yù)處理指令314預(yù)處理數(shù)據(jù)以創(chuàng)建raw圖像592。
如果新請求562沒有在輸入請求隊列560中準(zhǔn)備好,則從流式保持槽570中獲取流請求572。流式保持槽570提供在存儲器要求方面可能較低的備份請求。在很多實例中,流式保持槽570用于在設(shè)備100的顯示器104上提供預(yù)覽圖像。在這樣的場景中,系統(tǒng)500避免生成連續(xù)請求562以維持連續(xù)的預(yù)覽圖像。在其他實例中,流式保持槽570用于防止冗余請求562的連續(xù)流動。
除了輸入請求隊列560和流式保持槽570之外,傳感器580可以接收再處理558的請求。再處理558的請求涉及來自先前圖像獲取的、現(xiàn)在正在被再處理成可視圖像的存儲的raw文件642。
在傳感器580獲取或者處理圖像592后,傳感器580輸出圖像592和元數(shù)據(jù)612。圖像被輸出到圖像緩沖管道590(其依賴于gralloc環(huán)形緩沖區(qū),其中有限數(shù)目的大容量存儲器位置被分配以存儲圖像數(shù)據(jù)并且位置以環(huán)形方式循環(huán)),其中具有針對每個管道530的分離的緩沖區(qū)590。元數(shù)據(jù)612被輸出到輸出幀元數(shù)據(jù)隊列,其包含多個元數(shù)據(jù)612。一旦由getframe()620請求,raw圖像592和元數(shù)據(jù)612二者都被移動到幀630。幀630將圖像592和與其相關(guān)聯(lián)的采集請求632、最終設(shè)置634、基本元數(shù)據(jù)636、統(tǒng)計輸出638和字節(jié)緩沖區(qū)640合并。字節(jié)緩沖區(qū)640保持圖像592。幀630被保存為raw文件642。另外,raw圖像592可以被發(fā)送到設(shè)備gpu650、視頻編碼器652、渲染腳本(3d渲染)654和/或應(yīng)用656。當(dāng)raw圖像592被發(fā)送到設(shè)備gpu650、視頻編碼器652和/或渲染腳本654時,raw圖像592被處理(例如,通過jpeg、yuv等)成可視格式并且被顯示。
附圖圖示了api以及其硬件環(huán)境的示例。其他類型和方式是可能的,并且就這點而言附圖并不旨在于是限制性的。因此,雖然上文的描述和附圖包含很多特殊性,但是所提供的細(xì)節(jié)不應(yīng)當(dāng)被解釋為限制示例的范圍,而是僅僅作為提供目前優(yōu)選示例中的一些示例的說明。附圖和描述不應(yīng)當(dāng)被認(rèn)為限制示例的范圍,而是根據(jù)本公開理解為廣義和一般教導(dǎo)。雖然已經(jīng)使用特定術(shù)語描述了本公開的現(xiàn)有示例,但是這樣的描述僅用于目前圖示性的目的,并且應(yīng)當(dāng)理解的是,對這些示例的修改和變化(包括但不限于等價特征、材料、或部分的替代,以及其各種特征的變更)在不脫離本公開的精神和范圍的情況下可以由本領(lǐng)域的普通技術(shù)人員實踐。