專利名稱:用于增強數(shù)據(jù)解析度的方法和設(shè)備的制作方法
相關(guān)申請參照本申請要求對題為“用于動態(tài)范圍彩色成像的設(shè)備和方法”的美國臨時專利申請(序列編號60/216395,2000年7月6日提交)的優(yōu)先權(quán),該申請完整引入以作參考。
關(guān)于聯(lián)邦資助研究或開發(fā)的說明本發(fā)明部分在來自國家科學基金信息技術(shù)研究獎金(編號IIS-00-85864)的美國政府資助下完成。因此,美國政府可在本發(fā)明中擁有某些權(quán)利。
背景技術(shù):
圖像處理的一個共同目的是從一組給定的輸入數(shù)據(jù)中獲得所可能的最高圖像質(zhì)量。圖像質(zhì)量一般以“解析度”來判斷,解析度一般指組成圖像的數(shù)據(jù)的準確和精確度,可以包括空間解析度(如,每個單位區(qū)域或每幅圖像的像素),每個像素的特征的精確和準確度(如,亮度和/或色彩的動態(tài)范圍),和/或每段單位時間的圖像幀數(shù)量(如,對于視頻應(yīng)用)。傳統(tǒng)圖像處理算法一般忽略所處理的數(shù)據(jù)的外在的但與之相關(guān)的信息與知識。其結(jié)果是,用某種傳統(tǒng)圖像處理算法產(chǎn)生的圖像的解析度就被減低了。特別是,盡管理論上輸入圖像可以實質(zhì)地具有任何特征,但多數(shù)圖像的特征受到支配所成像物體的物理法則的限制。而且,盡管理論上一個物體可以具有幾乎任何形狀,但某些形狀可能比其它的形狀更經(jīng)常地出現(xiàn)。
舉例而言,盡管理論上一幅圖像有可能包含一個亮度脈沖,即一個無窮亮的無窮小點,但這種情況在實際生活中不會發(fā)生。而且,真實物體的圖像經(jīng)常充滿簡單的幾何形狀,如直線、矩形、橢圓、平面和光滑球面。實際上很少有一個真實的物理場景的圖像是主要由一組以完全隨機方式分布的完全隨機形狀組成的。然而,傳統(tǒng)的圖像處理算法極大地忽略了前述的支配多數(shù)圖像的實際限制。
一種用于增強動態(tài)范圍的傳統(tǒng)方法是順序地使用不同的曝光度捕捉同一場景的多幅圖像。對每幅圖像的曝光度通過改變成像光學器件的光圈或圖像感測器的曝光時間來控制。高曝光的圖像(即使用大光圈或長曝光時間捕捉的圖像)總是趨向于在亮場景區(qū)域過于飽和,但在暗的區(qū)域捕捉較準確。相反,低曝光的圖像(即使用小光圈或短曝光時間捕捉的圖像)總是趨向于在亮區(qū)域較少飽和,但在暗的區(qū)域可能太暗及太多噪聲。這種高曝光與低曝光圖像的互補性質(zhì)使它們可以組合成一幅高動態(tài)范圍的圖像。這種方法可以通過利用所獲得圖像計算成像系統(tǒng)的輻射測度響應(yīng)函數(shù)來進一步加強。
以上方法更適于靜態(tài)場景而非移動場景,因為為獲得好的效果,成像系統(tǒng)、場景物體與物體的光最好在以不同曝光度順序捕捉圖像時保持恒定。但是,在有些情況下,固定場景的要求是通過使用多個成像系統(tǒng)來補償。在這樣的方法中,使用光束分離器來產(chǎn)生場景的光學圖像的多份拷貝。每一份拷貝由一個圖像感測器來探測,圖像感測器的曝光度使用光學衰減器或通過將感測器的曝光時間設(shè)定成一個特定的值來預設(shè)。每個感測器的曝光度設(shè)為不同的值。這一方法具有實時產(chǎn)生高動態(tài)范圍圖像的優(yōu)點。實時成像使場景物體和/或成像系統(tǒng)在捕捉時可以移動,而不會影響對多個圖像拷貝的處理。缺點是這一方法太昂貴,因為需要多個圖像感測器、用于對齊所有獲得圖像的精密光學器件和用于捕捉與處理多幅圖像的額外硬件。
另一種用于高動態(tài)范圍成像的方法使用一種特殊的CCD設(shè)計。在這一方法中,每個感測器單元包括兩個具有不同尺寸因而具有不同傳感能力的隱藏井的傳感元件。當感測器對準場景時,就在每個單元中產(chǎn)生兩種測量,在讀出圖像前,這些測量在芯片中組合起來。但是,這一技術(shù)太昂貴,因為需要制作復雜的CCD圖像傳感器。而且,所得到圖像的空間解析度會減小兩倍,因為兩個傳感元件占據(jù)的空間與在具單個傳感元件單元的圖像感測器中兩個像素所占據(jù)的空間數(shù)量相同。況且,為了在將信號送出芯片以作進一步處理前組合每個感測器中兩個傳感元件的輸出,這一技術(shù)需要額外的芯片電子器件。
還提出了一種用于高動態(tài)范圍成像的“自適應(yīng)像素”方法。這樣一種方法使用一個固態(tài)圖像傳感器,其中每個像素包含一個測量將隱藏井充滿電荷所需時間的計算元件。由于井的容量對所有像素都相同,充滿一個井所需要的時間就與射到相應(yīng)像素上的光線的強度成比例。所記錄的時間值被讀出并轉(zhuǎn)換成一幅高動態(tài)范圍圖像。在有些情況下,這一方法可以提供增強的動態(tài)范圍。但是,盡管已實現(xiàn)了一種32×32單元的設(shè)備,可能很難將該技術(shù)擴展到高解析度而不招致很高的制作成本。而且,由于在暗場景區(qū)域曝光時間總是趨向于很大,這一技術(shù)對動作模糊可能具有相對高的敏感度。
圖像數(shù)據(jù)還可以以與圖像像素相關(guān)的偏振數(shù)據(jù)的形式來捕捉。特別是,已提出了在一個感測器陣列的每個元件前放置一個偏振濾鏡。舉例而言,可以在覆蓋一個感測器陣列的單個彩色濾鏡上增加單個偏振濾鏡。在偏振濾鏡下的感測器的輸出可以用來估計射到感測器附近的光的偏振性。但是,這一技術(shù)犧牲了空間解析度,因為就偏振數(shù)據(jù)而言,其將一個像素周圍的整個區(qū)域處理為一個像素。
發(fā)明內(nèi)容
因而本發(fā)明的一個目的是提供一種圖像處理算法,這種算法能利用關(guān)于可能由其所處理的圖像的典型特征的信息。
本發(fā)明的一個進一步的目的是提供一種圖像處理算法,這種算法能利用前述信息來增強數(shù)據(jù)的解析度。
這些以及其它目的通過本發(fā)明的以下方面來達到。
如本發(fā)明的一個方面所述,一種用于產(chǎn)生增強解析度數(shù)據(jù)的方法包括(1)接收用以某種局部相異的測量樣式排列的多個敏感度特征所產(chǎn)生的第一組數(shù)據(jù);以及(2)用某種模型來處理這第一組數(shù)據(jù),從而產(chǎn)生第二組數(shù)據(jù),該模型具有用某種學習過程來確定的第一個模型參數(shù)。
如本發(fā)明的另外一個方面所述,一種用于產(chǎn)生增強解析度數(shù)據(jù)的方法包括(1)接收代表至少一個變量的第一個取值的第一個數(shù)據(jù),該至少一個變量在至少一個維度上的第一個位置具有該第一個取值;(2)接收代表該至少一個變量的第二個取值的第二個數(shù)據(jù),該至少一個變量在該至少一個維度的第二個位置具有該第二個取值;以及(3)用某種多項式模型來處理這第一和第二個數(shù)據(jù),從而產(chǎn)生至少第三個數(shù)據(jù),該多項式模型具有(a)控制該多項式模型運行于第一個數(shù)據(jù)的第一個多項式系數(shù),以及(b)控制該多項式模型運用于第二個數(shù)據(jù)的第二個多項式系數(shù),其中該第一個和第二個多項式系數(shù)中的至少一個是用某種學習過程來確定的。
如本發(fā)明的另外一個方面所述,一種用于測量的方法包括(1)執(zhí)行包含對第一個信號組的至少一次測量的第一組測量,該第一個信號組包含來自至少一個維度的第一個區(qū)域的至少一個信號,該第一組測量具有關(guān)于第一個信號組的第一和第二個敏感度特征,該第一個敏感度特征具有第一種特征類型,而該第二個敏感度特征具有第二種特征類型;(2)執(zhí)行包含對第二個信號組的至少一次測量的第二組測量,該第二個信號組包含來自該至少一個維度的第二個區(qū)域的至少一個信號,該第二組測量具有關(guān)于第二個信號組的第一個敏感度特征,還具有關(guān)于第二個信號組的第三個敏感度特征,該第三個敏感度特征具有第二種特征類型;以及(3)執(zhí)行包含對第三個信號組的至少一次測量的第三組測量,該第三個信號組包含來自該至少一個維度的第三個區(qū)域的至少一個信號,該第三組測量具有關(guān)于第三個信號組的第四個敏感度特征,該第四個敏感度特征具有第一種特征類型。
如本發(fā)明的還有另外一個方面所述,一種用于測量的方法包括(1)執(zhí)行包含對第一個信號組的至少一次測量的第一組測量,該第一個信號組包含來自至少一個維度的第一個區(qū)域的至少一個信號,該第一組測量具有關(guān)于第一個信號組的第一、第二和第三個敏感度特征,該第一個敏感度特征具有第一種特征類型,該第二個敏感度特征具有第二種特征類型,而該第三個敏感度特征具有第三種特征類型;以及(2)執(zhí)行包含對第二個信號組的至少一次測量的第二組測量,該第二個信號組包含來自該至少一個維度的第二個區(qū)域的至少一個信號,該第二組測量具有關(guān)于第二個信號組的第一個敏感度特征,還具有關(guān)于第二個信號組的第四個和第五個敏感度特征,該第四個敏感度特征具有第二種特征類型,而該第五個敏感度特征具有第三種特征類型。
通過下面的詳細描述以及顯示本發(fā)明說明性實施例的附圖,本發(fā)明進一步的目的、特點和優(yōu)點將更為明顯。這些附圖包括圖1是一幅說明如本發(fā)明所述的一個用于增強數(shù)據(jù)解析度的示例性程序的框圖;圖2是一幅說明如本發(fā)明所述的一個示例性感測器敏感度樣式的圖;
圖3是一幅說明如本發(fā)明所述的一個用于增強數(shù)據(jù)解析度的示例性程序的框圖;圖4是一幅說明如本發(fā)明所述的另外一個用于增強數(shù)據(jù)解析度的示例性程序的流程圖;圖5是一幅說明如本發(fā)明所述的另外一個用于增強數(shù)據(jù)解析度的示例性程序的流程圖;圖6A是一幅說明如本發(fā)明所述的一個示例性感測器敏感度樣式的使用的圖;圖6B是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的使用的圖;圖6C是一幅說明如本發(fā)明所述的一個示例性感測器敏感度樣式的圖;圖6D是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的圖;圖6E是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的使用的圖;圖6F是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的使用的圖;圖7是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的圖;圖8A是一幅說明如本發(fā)明所述的處理一個輸入數(shù)據(jù)集合以獲得一個更高解析度數(shù)據(jù)集合的圖;圖8B是一幅說明如本發(fā)明所述的處理另外一個輸入數(shù)據(jù)集合以獲得一個更高解析度數(shù)據(jù)集合的圖;圖9是一幅說明如本發(fā)明所述的一個用于增強數(shù)據(jù)解析度的示例性程序的流程圖;圖10是一幅說明如本發(fā)明所述的一個示例性感測器敏感度樣式的圖;圖11是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的圖;圖12是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的圖;圖13是一幅說明如本發(fā)明所述的用一個示例性多項式映射函數(shù)處理數(shù)據(jù)的框圖;圖14是一幅說明如本發(fā)明所述的一個用于增強數(shù)據(jù)解析度的示例性程序的矩陣圖;圖15是一幅說明如本發(fā)明所述的另外一個用于增強數(shù)據(jù)解析度的示例性程序的流程圖;圖16是一幅說明如本發(fā)明所述的另外一個用于增強數(shù)據(jù)解析度的示例性程序的流程圖;圖17是一幅說明如本發(fā)明所述的一個示例性感測器敏感度樣式的圖;圖18A是一幅說明如本發(fā)明所述的使用感測器敏感度樣式的一個示例性方式的圖;圖18B是一幅說明如本發(fā)明所述的使用感測器敏感度樣式的另外一個示例性方式的圖;圖18C是一幅說明如本發(fā)明所述的使用感測器敏感度樣式的另外一個示例性方式的圖;圖19是一幅說明如本發(fā)明所述的用一個示例性多項式映射函數(shù)處理輸入數(shù)據(jù)的框圖;圖20是一幅說明如本發(fā)明所述的一個用于增強數(shù)據(jù)解析度的示例性程序的框圖;圖21是一幅說明如本發(fā)明所述的另外一個用于增強數(shù)據(jù)解析度的示例性程序的流程圖;圖22是一幅說明如本發(fā)明所述的一個示例性感測器敏感度樣式的圖;圖23是一幅說明如本發(fā)明所述的用一個示例性多項式映射函數(shù)處理輸入數(shù)據(jù)的框圖;圖24是一幅說明如本發(fā)明所述的另外一個用于增強數(shù)據(jù)解析度的示例性程序的流程圖;圖25是一幅說明如本發(fā)明所述的另外一個用于增強數(shù)據(jù)解析度的示例性程序的流程圖;圖26是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的圖;圖27是一幅說明如本發(fā)明所述的數(shù)據(jù)重建的圖;圖28是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的圖;圖29是一幅說明如本發(fā)明所述的另外一個示例性敏感度樣式的圖;圖30是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的圖;圖31是一幅說明如本發(fā)明所述的另外一個示例性感測器敏感度樣式的圖;圖32是一幅說明如本發(fā)明所述的用于執(zhí)行數(shù)據(jù)解析度增強程序的計算機系統(tǒng)的框圖;
圖33是一幅用于圖32的計算機系統(tǒng)中的處理器的框圖;圖34是一幅說明如本發(fā)明所述的一個用于增強數(shù)據(jù)解析度的示例性程序的性能等級的圖表;圖35是一幅說明如本發(fā)明所述的另外一個用于增強數(shù)據(jù)解析度的示例性程序的性能等級的圖表;圖36是一幅說明如本發(fā)明所述的另外一個用于增強數(shù)據(jù)解析度的示例性程序的性能的圖表。
在所有這些附圖中,除非另外標明,同一參考號和字符用以代表所說明實施例的同樣特點、元素、組件或部分。而且,雖然本發(fā)明將參照這些附圖,并聯(lián)系所說明的實施例而詳細描述,但仍可對所描述的實施例加以變化與修改,而不背離如所附權(quán)利要求所定義的本發(fā)明的真正范圍和精神。
發(fā)明詳細描述許多圖像都是真實或虛構(gòu)物理場景的表示。圖像數(shù)據(jù)通常包括一組像素數(shù)據(jù),每個像素數(shù)據(jù)表示某一場景中某個特定區(qū)域或點的一個屬性,如亮度和/或色彩。但是,除了亮度和色彩以外,像素數(shù)據(jù)還可以包括景深、光偏振、色溫或任何其它場景物理屬性的值。而且,盡管圖像通常是空間維度(如豎直位置、水平位置和/或景深位置——如至鏡頭或觀察者的距離)函數(shù)形式的場景物理屬性(如亮度)的表示,但該屬性也可以以其它維度的函數(shù)來表示,如時間。一般而言,由于像素的數(shù)量和/或每個像素的動態(tài)范圍(如每個像素的位數(shù))有限,可用的圖像數(shù)據(jù)的解析度是有限的。此而,用圖像數(shù)據(jù)來表示物理場景的準確度也是有限的。希望能處理輸入圖像數(shù)據(jù),從而產(chǎn)生能更準確和/或更精確地表示場景的更高解析度的數(shù)據(jù)。
這樣的數(shù)據(jù)解析度增強將能夠以所輸入的一個或多個數(shù)據(jù)的函數(shù)來產(chǎn)生每個更高解析度的數(shù)據(jù)。特別的是,在所輸入圖像的一個區(qū)域的數(shù)據(jù)將用來產(chǎn)生在所處理圖像的相應(yīng)區(qū)域的更高解析度的數(shù)據(jù)。然而,一個更高解析度數(shù)據(jù)集合一般要包含比一個相應(yīng)的較低解析度數(shù)據(jù)集合更多的信息。舉例來說,如果所有的像素都具有同樣的動態(tài)范圍,一幅具較多像素的圖像就包含比一幅具較少像素的圖像更多的信息。而且,一組特定數(shù)量的高動態(tài)范圍像素包含比一組相同數(shù)量的較低動態(tài)范圍像素更多的信息。因此,如果沒有可用的外在信息——即在輸入數(shù)據(jù)本身外沒有信息可用,就不可能從低質(zhì)量的數(shù)據(jù)重建出較高質(zhì)量的圖像。
另一方面,如上面所討論的那樣,對許多圖像而言,有外在信息可用;這些信息包含了關(guān)于一般在多數(shù)圖像中出現(xiàn)并期望發(fā)生的形狀和樣式的知識。按照本發(fā)明,這樣的外在信息被引入一個輸入數(shù)據(jù)集與一個已處理數(shù)據(jù)集之間映射的參數(shù)中。該映射——又叫“模型”——包括一組應(yīng)用于輸入數(shù)據(jù)以產(chǎn)生較高解析度的已處理數(shù)據(jù)的函數(shù)。前述外在信息的引入是用一個“學習”過程(又叫“訓練”過程)來進行的,這一過程使用一幅或多幅有代表性的樣例圖像——或圖像局部——來優(yōu)化模型的參數(shù)。一旦模型的參數(shù)得以優(yōu)化,所得到的映射就可以用來產(chǎn)生從較低解析度的輸入數(shù)據(jù)產(chǎn)生較高解析度的數(shù)據(jù),因為所優(yōu)化的映射在圖像的每個區(qū)域提供了對數(shù)據(jù)(即圖像屬性)可能的“正確”值的改善了的估計。事實上,優(yōu)化了的映射使計算未加工數(shù)據(jù)的區(qū)域間某個區(qū)域的數(shù)據(jù)的增強質(zhì)量估計(如圖像屬性值)變成可能,從而可以實現(xiàn)對圖像或圖像序列的空間或時間解析度的增強。換句話說,可以通過增加額外的像素或幀來增加像素或圖像幀的數(shù)量。按照本發(fā)明,這些額外的數(shù)據(jù)不需要是根據(jù)相鄰的像素或幀而簡單地內(nèi)插的數(shù)值,但可以由基于所學習的關(guān)于典型圖像特性或其它數(shù)據(jù)的知識的智能預測組成。需要注意,盡管本發(fā)明的技術(shù)對于改善圖像相關(guān)數(shù)據(jù)的質(zhì)量特別有益,但此處的討論并不意味著暗示任何對本技術(shù)所可以使用的數(shù)據(jù)類型的限制。舉例而言,本發(fā)明的技術(shù)可以應(yīng)用于(a)1維數(shù)據(jù),如財務(wù)裝置數(shù)值或其它數(shù)值的時間序列;(b)2維數(shù)據(jù),如平面圖像數(shù)據(jù);(c)3維數(shù)據(jù),如包含景深信息的圖像數(shù)據(jù),或由2維圖像數(shù)據(jù)的時間序列組成的視頻數(shù)據(jù);(d)4維數(shù)據(jù),如由包含景深信息的圖像數(shù)據(jù)的時間序列組成的3維視頻數(shù)據(jù);或(e)任何維數(shù)的其它類型數(shù)據(jù)。
圖1說明了如本發(fā)明所述的一個處理一組數(shù)據(jù)以產(chǎn)生增強解析度數(shù)據(jù)的示例。在所說明的示例中,從一個感測器陣列104接收到第一組數(shù)據(jù)102,這組數(shù)據(jù)可以是如一幅未加工的圖像。該第一個數(shù)據(jù)集102包括第一和第二個數(shù)據(jù)122和124,它們可以是如一幅未加工圖像的像素。第一個數(shù)據(jù)122表示至少一個變量(例如一個被成像場景的第一個局部640的亮度)的第一個值。特別是,如果在該場景內(nèi)一個物體126的表面上的第一個部分640具有某一特定亮度,第一個數(shù)據(jù)122就表示這一亮度。類似地,第二個數(shù)據(jù)124表示在該場景內(nèi)一個物體126的表面上的第二個部分642的亮度。用一個模型106來處理該第一個數(shù)據(jù)集102,從而產(chǎn)生第二個數(shù)據(jù)集108。模型106最好包括控制該模型106對第一個數(shù)據(jù)集102的應(yīng)用的第一個模型參數(shù)116,和控制該模型106對第二個數(shù)據(jù)集124的應(yīng)用的第二個模型參數(shù)118。第二組數(shù)據(jù)108包括通過對第一和第二個數(shù)據(jù)122和124應(yīng)用模型106所產(chǎn)生的第三個數(shù)據(jù)120。
在本發(fā)明的某個較佳實施例中,映射106包含在第一個數(shù)據(jù)集102中的數(shù)據(jù)的一組多項式函數(shù)。第一和第二個數(shù)據(jù)122和124可以按照在圖4中所說明的算法來處理。在所說明的該算法中,接收第一個數(shù)據(jù)(步驟402)。也接收第二個數(shù)據(jù)(步驟404)。用模型106來處理第一和第二個數(shù)據(jù)(步驟406),從而產(chǎn)生第三個數(shù)據(jù)120(步驟414)。如果使用的是一個多項式模型,則步驟406最好包含將第一個多項式系數(shù)應(yīng)用于第一個數(shù)據(jù)122(步驟408),將第二個多項式系數(shù)應(yīng)用于第二個數(shù)據(jù)124(步驟410),和將步驟408與步驟410的結(jié)果相加(步驟412)。將某個多項式系數(shù)應(yīng)用于某個數(shù)據(jù)一般包含將該系數(shù)乘上該數(shù)據(jù)的某個算術(shù)冪。
模型106最好包含一組局部映射函數(shù),該函數(shù)從一幅已捕獲圖像內(nèi)的一小塊鄰域接收像素測量值,并將該像素測量值轉(zhuǎn)換成某個(或某些)所期望的輸出圖像值。該映射函數(shù)是通過對比高質(zhì)量數(shù)據(jù)(如高解析度圖像數(shù)據(jù))的樣例與從這些高質(zhì)量數(shù)據(jù)計算得到的低質(zhì)量數(shù)據(jù)的樣例而“學習”到的。舉例而言,如果目標是學習一個結(jié)構(gòu)模型,來處理一幅具低空間解析度的亮度圖像,從而產(chǎn)生一幅具高空間解析度的亮度圖像,可以將該高解析度圖像特意降低品質(zhì)(模糊化或向下采樣)以產(chǎn)生相應(yīng)的低解析度圖像。另一個例子是,如果要優(yōu)化該模型來從對應(yīng)于多種不同曝光度的一系列低動態(tài)范圍圖像(如每像素8個比特位的圖像)產(chǎn)生一幅高動態(tài)范圍圖像(如一幅每像素12個比特位的圖像),可以將該幅高動態(tài)范圍圖像縮放、裁剪、重新量化,從而產(chǎn)生一組具低動態(tài)范圍的測試圖像。換句話說,為了綜合所測量數(shù)據(jù)的低品質(zhì)模擬,用于訓練程序,要用“降低品質(zhì)”處理步驟來降低高質(zhì)量圖像的品質(zhì)。在圖8A和8B中說明了示例性高質(zhì)量與低質(zhì)量圖像間的關(guān)系。在圖8A的示例中,低質(zhì)量數(shù)據(jù)集802是高質(zhì)量數(shù)據(jù)804的一個低解析度版本。因此,對于兩幅圖像中的相同區(qū)域,在高質(zhì)量圖像中有比在所測得的圖像中更多的樣例。在圖8B的示例中,高質(zhì)量數(shù)據(jù)集808包含了一個時間維度(即時間),比低質(zhì)量數(shù)據(jù)集806具有更高的空間和/或時間解析度。
需要注意,在學習階段使用的高質(zhì)量圖像可以是真實場景的圖像、用多種渲染技術(shù)所產(chǎn)生的合成圖像或真實與合成圖像數(shù)據(jù)的某些組合。真實場景的圖像可以用高質(zhì)量(如專業(yè)級別)成像系統(tǒng)來獲得,而且如果這些高質(zhì)量圖像被使用某個模擬低質(zhì)量成像系統(tǒng)的特性和缺點的模型降低了品質(zhì),本發(fā)明的解析度增強技術(shù)可以允許較低質(zhì)量的成像系統(tǒng)來模擬高質(zhì)量系統(tǒng)的性能。該算法所用的結(jié)構(gòu)模型最好盡可能普通,相應(yīng)地,選來用于訓練程序的圖像應(yīng)當充分代表場景類型的全部范圍和一個人在真實世界所期望遇到的特性。舉例來說,最好包括城市背景、風景和室內(nèi)空間的圖像。而且,所選擇的圖像最好代表實際所遇到的照明條件的全部范圍,包括室內(nèi)照明、陰天的室外條件,和晴天的室外條件。而且,為了使結(jié)構(gòu)模型優(yōu)化過程能捕捉縮放和方向效果,將在多種不同放大設(shè)定和旋轉(zhuǎn)下所采集的相同場景的圖像包括在內(nèi),通常是有益的。合成圖像可以特別有用,因為在其中可以容易地包含可能與某個特定應(yīng)用相關(guān)的特殊特性。舉例來說,在產(chǎn)生的合成圖像中,相對容易渲染邊緣、直線、曲線,和/或多種方向與比例的更復雜的特性。而且,在計算機產(chǎn)生的圖像中可以容易地合成特殊類型的表面紋理。
一旦獲得了高質(zhì)量圖像及其相應(yīng)的低質(zhì)量圖像,就希望能估計一個或多個結(jié)構(gòu)映射模型。在圖9中說明了一種用來進行這種估計的示例性程序。所說明示例的結(jié)構(gòu)模型902是一個將輸入數(shù)據(jù)M(x,y)(如真實測量數(shù)據(jù)或模擬數(shù)據(jù))與一組所期望的輸出值H(i,j)相關(guān)聯(lián)的通用函數(shù)。輸入與輸出數(shù)據(jù)之間的關(guān)系可以按如下表達H(i,j)=f(M(1,1),...,M(x,y),...,M(X,Y)) (1)其中X與Y定義了輸入測量數(shù)據(jù)M(x,y)的一個鄰域,該區(qū)域最好圍繞(或鄰近)高質(zhì)量值H(i,j)的相應(yīng)鄰域。對結(jié)構(gòu)模型的估計本質(zhì)上由對公式(1)中函數(shù)f的參數(shù)的估計構(gòu)成。
需要注意,在這一示例中的函數(shù)f是以通用形式定義的。函數(shù)f可以是線性或非線性的。其參數(shù)可以隨意地用許多種不同回歸技術(shù)中的任何一種來估計。該回歸方法可以是線性或非線性的,可以包括如在擬合中估計無關(guān)點的技術(shù),就象在魯棒統(tǒng)計學中所普遍使用的那樣。而且,函數(shù)f可以由基礎(chǔ)函數(shù)的組合組成,在這些基礎(chǔ)函數(shù)中的函數(shù)系數(shù)是所要估計的模型的參數(shù)。
而且,模型106可以如在圖3中所說明的那樣,包括一個網(wǎng)絡(luò)306。在圖3所說明的示例中,將第一個數(shù)據(jù)集102接收到一個網(wǎng)絡(luò)306中,該網(wǎng)絡(luò)包括多個通過多個鏈路304聯(lián)接的節(jié)點302。網(wǎng)絡(luò)306可以包含如一個Markov網(wǎng)絡(luò)、一個Bayesian網(wǎng)絡(luò),和/或一個神經(jīng)網(wǎng)絡(luò)——所有這些都是已知的。網(wǎng)絡(luò)306處理第一組數(shù)據(jù)102,從而產(chǎn)生具有改善了的解析度的第二組數(shù)據(jù)108。如果該函數(shù)以一個Bayesian或神經(jīng)網(wǎng)絡(luò)來實現(xiàn),可以用多種已知方法,如向后傳播算法,來估計其參數(shù)。而且,該模型還可以包含一個隱藏的Markov模型。在某個較佳實施例中,所期望的高質(zhì)量值以輸入數(shù)據(jù)的某個多項式函數(shù)來模擬。不論模型的形式,本發(fā)明的算法尋求確定和優(yōu)化一組系數(shù)或其它模型參數(shù)C。如上面所討論的,高質(zhì)量訓練圖像(真實的、合成的,或兩者兼有)被用來計算這些系數(shù)(步驟904)。注意,每幅高質(zhì)量訓練圖像一般提供大量對尋找系數(shù)有用的數(shù)據(jù),因為在該程序中所用的鄰域(尺寸為(X,Y))一般很小,一個典型的例子是圍繞其值最終將要被計算的高質(zhì)量像素區(qū)域的一個5×5的低質(zhì)量像素窗口。
一旦結(jié)構(gòu)模型902以上述方式被計算出來,就可以進行數(shù)據(jù)的重建。重建過程包括如在圖9中所說明的那樣將該模型應(yīng)用于低質(zhì)量數(shù)據(jù)。低質(zhì)量數(shù)據(jù)可以來自某種物理測量設(shè)備,或可以是為有效存儲和/或傳輸?shù)哪康亩鴱母哔|(zhì)量數(shù)據(jù)產(chǎn)生并替代它的“合成的”低質(zhì)量數(shù)據(jù)。而且,低質(zhì)量數(shù)據(jù)可以是通過使用某個相對低質(zhì)量傳感器的模型(圖9中的項906)來從高質(zhì)量數(shù)據(jù)合成的。
每幅輸出圖像的值從重建過程獲得(i,j)=f(M(1,1),...,M(x,y),...,M(X,Y)) (2)對許多應(yīng)用,用某種局部相異的測量樣式(即一個傳感器的敏感度特征與相鄰或附近傳感器的敏感度特征顯著不同的樣式)來測量輸入圖像是有益的。這種樣式——也可以稱為“拼圖式的”——與如“虛光”之類的效果有區(qū)別,在“虛光”中感測器陣列的敏感度趨向于逐漸從中央向邊緣減小。虛光效果在可與整個陣列尺寸相比較的范圍內(nèi)發(fā)生。
由于多數(shù)光強傳感器的動態(tài)范圍有限,而人眼的動態(tài)范圍很高,就希望能利用對輸入光的強度(即亮度)具有不同敏感度的傳感器的樣式。這一樣式使準確測量場景光照豐富和光照缺乏兩部分的亮度成為可能。在圖1中說明了這一局部相異測量樣式的一個示例。樣式110包括對輸入光強度具有高敏感度的第一個區(qū)域114,和對輸入光強度具有低敏感度的第二個區(qū)域112。局部相異測量樣式110可以重復許多次,以形成一個用于感測器陣列104中的較大的局部相異測量樣式。結(jié)果圖像可以稱為“空間變化曝光”(SVE)圖像。在圖1所說明的示例中,來自場景中一個物體126的第一部分640的光線由測量樣式110的第一個部分114接收。來自該物體126表面的第二部分642的光線由用于感測器陣列110中的測量樣式的第二個部分112接收。模型106的第一個模型參數(shù)116最好與測量樣式110的第一個部分114的敏感度特征(即高敏感度)相對應(yīng),并相匹配與優(yōu)化,而第二個模型參數(shù)118最好與測量樣式110的第二個部分112的敏感度特征(即低敏感度)相對應(yīng),并相匹配與優(yōu)化。由于局部相異測量樣式110可以重復許多次以形成一個用于感測器陣列104的較大的樣式,最好對于測量樣式110的第一個和第二個部分114和112的每個拷貝重用第一個和第二個模型參數(shù)116和118。這一配置是有益的,因為用具第一種傳感器特征的傳感器采樣的未加工數(shù)據(jù)與場景的關(guān)系有可能和用具不同傳感器特征的傳感器采樣的未加工數(shù)據(jù)與場景的關(guān)系不同。因此,在確定與優(yōu)化映射106的參數(shù)116和118時,最好對每種敏感度特征賦以其自己的映射參數(shù)。
圖17說明了一種另外的空間相異亮度敏感(即SVE)樣式。在圖中展示為較亮的像素對輸入光強具有較大的敏感度,而較暗的像素則具有較低的敏感度。在所說明的示例中,四個相鄰的像素1711、1712、1713和1714具有不同的敏感度(e1<e2<e3<e4)。這四個像素1711、1712、1713和1714形成一個2×2的相鄰區(qū)域1705,該區(qū)域被重復以覆蓋感測器陣列。一個基于四數(shù)值敏感度樣式的SVE圖像具有四種不同類型的局部相鄰區(qū)域強度敏感度樣式1722、1724、1726和1728,對應(yīng)于2×2相鄰區(qū)域1705的不同輪換。
SVE樣式是有益的,因為即使在一個像素已飽和時,該像素也很可能有至少一個相鄰像素是不飽和的。而且,即使在SVE樣式中的一個像素記錄了非常低的或零亮度,或者具有非常低的信噪比時,該像素也很可能有至少一個相鄰像素記錄了可測量的亮度并/或具有可接受的信噪比。其結(jié)果是,SVE樣式實現(xiàn)了對場景高動態(tài)范圍圖像的計算。
還應(yīng)注意,SVE技術(shù)絕對不限于圖17中所說明的拼圖。亮度敏感度的值的數(shù)量(以及相應(yīng)的不同局部樣式類型的數(shù)量)可以變化,樣式也不需要是周期性的??赡茉谟行┣闆r下,某種隨機排列的曝光度的拼圖也會是有用的。而且,SVE拼圖可以以許多方式實現(xiàn)。一種方法是用一種由具不同透光度的單元組成的遮罩覆蓋感測器陣列??勺魈鎿Q的或可另外附加的是,敏感度樣式(即拼圖)可以直接蝕刻在感測器上,特別是在感測器是固態(tài)設(shè)備如CCD陣列時。而且,可以用另外的技術(shù)來預設(shè)像素的敏感度,如(1)用不同配置的顯微鏡頭覆蓋每個像素,(2)對不同像素使用多種不同的集中時間,和/或(3)用不同的光圈覆蓋每個像素。前述的所有實現(xiàn)都可以用來為感測器陣列提供在空間上變化的亮度敏感度樣式。
使用具不同透光度單元拼圖的光遮罩是特別方便的,因為這一方法可以通過對事實上的任何成像系統(tǒng)作簡單的更改來實現(xiàn)。圖18A-18C說明了將一個光遮罩結(jié)合入一個成像系統(tǒng)的幾種方式。在圖18A中,遮罩1802放置在感測器1804平面的附近。遮罩1802還可以放置在成像鏡頭1806的外面,這通常對接觸感測器平面1804有困難的系統(tǒng)是最好的。在圖18B所說明的示例中,用一個初級鏡頭1810將場景1808聚焦到遮罩1802平面上。從遮罩1802顯現(xiàn)的光線由成像鏡頭1806接收,并聚焦到感測器1804平面上??梢杂靡粋€散射器1812來減少或消除到達遮罩1802的直射光線,在這種情況下成像鏡頭1806最好聚焦在散射器1812平面上。圖18C說明了一種通過其可以容易地將遮罩1802結(jié)合入常規(guī)相機的排列。在圖18C所說明的示例中,遮罩1802固定在膠片1814前進的平面附近。需要注意,SVE技術(shù)并非僅限于可見光。實際上,任何電磁輻射成像器或任何其他輻射成像器的動態(tài)范圍都可以用SVE方法來增強。
如本發(fā)明所述,可以用局部多項式映射函數(shù)將一幅低動態(tài)范圍SVE圖像映射到一幅高動態(tài)范圍圖像。SVE算法尋求開發(fā)結(jié)構(gòu)模型,以開發(fā)圖像光的空間曝光維度。
令M表示所測量的數(shù)據(jù)(如用某個SVE傳感器捕捉的數(shù)據(jù))??梢杂靡唤M結(jié)構(gòu)模型(即映射函數(shù))來從M重建高動態(tài)范圍圖像H,其中每個模型用于四種局部鄰域樣式p中的一種。令Mp表示具有特定局部樣式p的M的一個鄰域??梢园慈缦聛砉烙嬎谕脑卩徲蛑行牡母邉討B(tài)范圍值Hp(i+0.5,j+0.5)=Σ(x,y)⋐Sp(i,j)Σ(k≠x,l≠y)∈Sp(i,j)Σn=0NPΣq=0NP-nCp(x,y,k,l,n)Mpn(x,y)Mpq(k,l)---(3)]]>其中Sp(i,j)是像素(i,j)的鄰域,如圖19中所說明的那樣。Mpn(x,y)Mpq(k,l)表示(1)在鄰域Mp內(nèi)點(x,y)的未加工值的n次冪與(2)在鄰域Mp內(nèi)點(k,l)的未加工值的q次冪的乘積。Np是多項式映射的級數(shù)。Cp表示局部樣式p的多項式系數(shù)。一般而言,來自以豎直方向從像素(i,j)替換的像素的信息并不比來自以水平方向替換的像素的信息更重要或更不重要。因此,一般最好使用寬與長一樣的鄰域——如方形的鄰域。而且,每種強度敏感度特征(如每種曝光度水平)最好應(yīng)該在每個鄰域進行相同的次數(shù)。對于任何偶數(shù)的曝光度,具有偶數(shù)(而不是奇數(shù))長度和寬度的鄰域滿足這一條件。舉例來說,在圖19中所說明的鄰域Sp(i,j)就是一個具有偶數(shù)長度和寬度的方形鄰域。高動態(tài)范圍值則在偏離網(wǎng)格上的鄰域中心(i+0.5,j+0.5)處計算。
乘積Mp(x,y)Mp(k,l)顯式地表示鄰域中兩個像素間的相關(guān)性。但是,在許多情況下,使用該乘積項(即顯式地計算并包含該相關(guān)性項)并不能很大地增加該技術(shù)的準確性和效率,因為(在空間位置或其它維度上)鄰近的場景的光總是趨向于自然相關(guān)。以下給出了一個較佳的映射函數(shù)(其比較簡單,因而計算不太復雜)Hp(i+0.5,j+0.5)=Σ(x,y)⋐Sp(i,j)Σn=0NPCp(x,y,n)Mpn(x,y)---(4)]]>應(yīng)當注意,盡管圖19說明的是一個方形的4×4鄰域,但該方法可以應(yīng)用于具任何尺寸和形狀的鄰域,也可以用以計算無論在或不在網(wǎng)格上位置的像素的值。
對于每種局部樣式p,公式(4)也可以以矩陣來表達,如在圖14中所說明的那樣Bp=ApCp(5)其中矩陣Ap的每一行包含一個具有局部樣式類型p的鄰域Mp的像素值的冪。Ap的每一行包含乘冪到多項式級數(shù)Np的像素值。Cp是一個列向量,包含對應(yīng)于在具局部樣式p的鄰域中的每個像素的多項式系數(shù)。Bp是一個列向量,包含對每個p的所期望的不在中心的鄰域中心值Hp。
對應(yīng)于不同局部曝光樣式的映射函數(shù)使用一種加權(quán)最少方塊技術(shù)來估計。這一技術(shù)的一個示例是求解加權(quán)正規(guī)方程APTWP2APCP=APTWP2BP---(6)]]>其中Wp是對每個鄰域線形方程加權(quán)的一個對角矩陣。在最少方塊方式中,ApTWp2Ap可以稱為“加權(quán)規(guī)范矩陣”,而ApTWp2Bp可以稱為“加權(quán)回歸向量”。
在多項式映射函數(shù)中的系數(shù)數(shù)量可以按以下計算。令u、x、v表示鄰域的尺寸,令Np表示與局部曝光樣式p相對應(yīng)的多項式級數(shù)。令P表示在該SVE圖像中的不同局部樣式的數(shù)量。則系數(shù)數(shù)量|C|由以下公式給出
|C|=P+uvΣp=1PNp---(7)]]>舉例來說,當對于p=1...P有P=4(如對于具4種不同像素曝光度的SVE感測器),Np=2,且u=v=6(即一個具有偶數(shù)長度和偶數(shù)寬度的方形鄰域)時,系數(shù)數(shù)量為292。
可以用如本發(fā)明所述的一種算法通過處理幾幅不同的以高動態(tài)范圍傳感器捕捉的圖像來學習(即優(yōu)化)局部多項式映射函數(shù)。而后,用優(yōu)化了的映射函數(shù),可以從由SVE傳感器捕捉的其它圖像重建高動態(tài)范圍圖像。在訓練階段,某種訓練算法使用高動態(tài)范圍圖像對每種類型的鄰域樣式(如在圖17中的樣式1701-1704)估計局部多項式映射函數(shù)的系數(shù)。
圖20是如本發(fā)明所述的一個示例性訓練階段的一幅流程圖。在圖20所說明的示例中,訓練使用由一個膠片相機捕捉并由一個膠片掃描儀掃描的12位圖像2024來進行。縮放這些圖像的強度,以模擬在傳感器全部曝光度中的變化(步驟2002)。對這些訓練圖像應(yīng)用一個與SVE感測器的響應(yīng)函數(shù)相匹配的響應(yīng)函數(shù)2004。而后,將縮放了的圖像平移(即移動位置),以訓練用于具各種圖像鄰域的各種曝光度樣式的算法(即優(yōu)化模型參數(shù))(步驟2006)。接著,對訓練圖像2026應(yīng)用一個SVE遮罩2008,從而產(chǎn)生一幅12位SVE圖像2012(步驟2010)。而后(在步驟2014中),通過按最大255個強度等級裁剪這些數(shù)據(jù),再映射或重新量化這些數(shù)據(jù)從而產(chǎn)生一幅8位圖像M(圖20中的項2028),來降低12位SVE圖像2012的品質(zhì)(即降級)。上述降低品質(zhì)程序模擬了一個具低動態(tài)范圍的SVE傳感器。如在圖14中所說明的那樣,對每種樣式p從圖像M中解析出鄰域集合Ap。類似地,從訓練圖像H中解析出列向量Bp。為了避免在不同強度敏感度(如圖17中的e1、e2、e3和e4)數(shù)量上的不對稱,最好使用具有偶數(shù)(而不是奇數(shù))長度和寬度的方形鄰域。如在圖19中所說明的那樣,一個具有偶數(shù)長度和/或?qū)挾鹊泥徲虻闹行氖窃谝粋€不在網(wǎng)格上的位置。為了對結(jié)果的半個像素偏移進行補償,將這些訓練圖像自身位移半個像素。如果高質(zhì)量圖像的原先采樣沒有遵循用于信號重建的Nyquist標準,這一偏移可以將更多的模糊引入這些圖像,從而獲得對模糊或平滑圖像及場景優(yōu)化了的系數(shù)。如果期望對更明銳圖像及場景的優(yōu)化,則初始的高解析度圖像最好表示具有銳利特性的明銳場景,并且按照Nyquist標準來采樣。但是,需要注意,對明銳圖像的增強一般要求比對平滑和/或模糊圖像的增強更為準確的模型。而且,即使明銳的圖像也總是趨向于包括大量的平滑區(qū)域。因此,如果在訓練時,無法知道以后將要由算法增強的圖像的明銳度水平,就最好使用明銳的圖像來訓練,因為模型的準確度對于增強較明銳的圖像最為重要,并且在任何情況下,明銳的訓練圖像都很可能包括足夠的平滑區(qū)域,以致還能夠?qū)崿F(xiàn)對平滑和/或模糊圖像的增強。
屬于SVE數(shù)據(jù)中任何局部樣式類型的每個鄰域都要規(guī)范化。規(guī)范化是通過首先從每種p類型鄰域的每個數(shù)據(jù)減去所有p類型的鄰域Ap的平均能量μp,然后將該數(shù)據(jù)除以Ap(i)的能量來實現(xiàn)的。規(guī)范化步驟在數(shù)學上可以按如下表達Apnorm(i)=Ap(i)-μp||Ap(i)||---(8)]]>其中Ap(i)的能量(即分母)是在圖14中所示的矩陣Ap的第i行向量的一個選定部分的量級。第i行向量的這一選定部分是包含該鄰域像素值的第一次冪的那一部分。類似地規(guī)范化訓練數(shù)據(jù)BpBpnorm(i)=Bp(i)-μp||Ap(i)||---(9)]]>在規(guī)范化(步驟2016)后,用一個加權(quán)最少方塊程序(步驟2018)來計算加權(quán)規(guī)范矩陣ApnormTWp2Apnorm和右手側(cè)回歸向量ApnormTWp2Bpnorm。在該最少方塊程序2018中,對于每幅訓練圖像,累積各規(guī)范矩陣和回歸向量(步驟2020)。然后計算該最少方塊結(jié)果(步驟2022)。一旦所有高動態(tài)范圍圖像都已用于訓練,包括以多種曝光度和多種平移來訓練,就用公式(6)對每種類型的鄰域樣式p計算出了多項式映射函數(shù)的系數(shù)Cp(在圖20中的項2032)(步驟2030)。
在重建階段(在圖21中說明了其一個示例),某種重建算法將該多項式系數(shù)2032(在訓練階段計算出來的)應(yīng)用于用某個低動態(tài)范圍8位SVE傳感器捕捉的SVE圖像2102。與訓練算法相類似,重建算法對與各種局部樣式p相對應(yīng)的各個鄰域Ap進行規(guī)范化(步驟2104)。然后將系數(shù)Cp(項2032)應(yīng)用于每種規(guī)范化了的鄰域樣式,從而獲得Bpnorm=ApnormCp(步驟2106)。接著,將Bpnorm反規(guī)范化(即非規(guī)范化)以獲得Bp(步驟2108)。由于SVE技術(shù)使用場景強度的非均勻的量化,該算法最好根據(jù)在SVE感測器遮罩中所用的離散曝光度的數(shù)量,非均勻地量化這些反規(guī)范化了的數(shù)據(jù)(步驟2110),從而獲得一幅重建的高動態(tài)范圍圖像2112。
如本發(fā)明所述的一種SVE方法已經(jīng)用表示多種自然場景的五幅高動態(tài)范圍(12位)圖像測試過。為了“訓練”(即優(yōu)化)映射系數(shù),每幅訓練圖像都如在圖20的流程圖所說明的那樣降低了品質(zhì)(即降級),以獲得8位的SVE圖像。為了創(chuàng)建這些SVE圖像,每幅訓練圖像都用4種不同的曝光度(e1=4e2=16e3=64e4)來捕捉,而后按照在圖17中所說明的SVE遮罩1706組合起來。級數(shù)3的局部多項式映射函數(shù)的系數(shù)用一種加權(quán)最少方塊技術(shù)來計算。為了重建,將六幅12位SVE測試圖像(與在訓練中所用的不同)降低品質(zhì)以產(chǎn)生8位SVE圖像。如在圖21中的流程圖所說明的那樣,將結(jié)果系數(shù)應(yīng)用于這些降低了品質(zhì)的8位SVE圖像。圖36是一幅比較上述程序與一個雙向立方體插值程序的結(jié)果的柱狀圖。兩個柱狀圖的比較展示出本發(fā)明的方法產(chǎn)生更多低差錯的像素和更少高差錯的像素。
在前面的示例中,局部相異敏感度特征是一種特殊類型,明確地說,是一種依賴關(guān)于光強的傳感器輸出的類型。但是,如本發(fā)明所述,也可以用其它敏感度特征類型來構(gòu)成某個局部相異測量樣式。舉例來說,敏感度特征可以是某種依賴關(guān)于信號波長(如色彩)的測量敏感度的類型。而且,敏感度特征可以是某種依賴關(guān)于輸入光偏振的測量敏感度的類型。
應(yīng)當注意,在某些情況下,如果一種結(jié)構(gòu)模型不顧要增強哪個像素而使用相同的系數(shù),就可能不能產(chǎn)生最理想的結(jié)果。當同時采樣場景的多個屬性時,這是特別有可能的。在圖2中說明了這樣一個示例。對所說明的測量樣式的檢查展示出在網(wǎng)格上的不同像素可以具有不同的局部采樣樣式。舉例而言,參照圖2,假設(shè)使用了如本發(fā)明所述的某種算法來獲得在第一個像素202和第二個相鄰像素204的鄰域中的高質(zhì)量R、G、B值。在第一個像素202周圍的曝光度和空間濾鏡的局部樣式很可能與在相鄰像素204周圍的不同。因此,如果用一個簡單、一致的結(jié)構(gòu)模型(即一個忽略環(huán)繞鄰域像素的敏感度樣式的模型)來預測在所說明的三個彩色頻道中每個像素處的圖像亮度,就可能會產(chǎn)生不準確的結(jié)果,除非該模型具有極多數(shù)量的模型系數(shù)。為了獲得一個既“緊湊”(即具有很少數(shù)量的系數(shù))又有效的模型,最好不要用單獨一組系數(shù)來適應(yīng)用多種局部采樣樣式捕捉的數(shù)據(jù)??梢酝ㄟ^對每種局部采樣樣式類型使用不同的一組模型系數(shù)來達到較好的結(jié)果。由于一般用單次重復樣式來采樣圖像值,所以得到的采樣樣式個數(shù)較少。因此,通常只需要很少數(shù)量的結(jié)構(gòu)模型(或模型部件)。如果給出某個特定的所關(guān)心的像素,就可以將恰當?shù)慕Y(jié)構(gòu)模型應(yīng)用于在該特定像素的局部鄰域發(fā)生的特定采樣樣式。
多數(shù)數(shù)字色彩傳感器使用一個單獨的感測器陣列來捕捉圖像。在該陣列中的每一個感測器對應(yīng)于測量在某個特定波長范圍(如紅、綠或藍)內(nèi)的輸入光強度的一個圖像像素。換句話說,色彩濾鏡在該感測器陣列上空間交錯。這樣一個色彩拼圖可以稱為一個空間變化色彩(SVC)拼圖。可以在傳感器陣列上覆蓋多種樣式的色彩濾鏡。如本發(fā)明所述的一種算法可以用訓練了的局部多項式映射函數(shù)來產(chǎn)生高質(zhì)量彩色圖像。需要注意,盡管本發(fā)明的色彩拼圖方法在此主要是關(guān)于單芯片彩色CCD相機而描述的,但本發(fā)明的這些方法并非僅限于任何特定色彩傳感器。
在一個單芯片CCD相機的感測器陣列上的色彩濾鏡可以以多種方式排列。每個像素周圍的區(qū)域可以稱為一個“鄰域”。每個鄰域包含一個可以稱為“局部樣式”的色彩空間變化樣式。一幅全圖像拼圖是通過在整個感測器陣列重復局部樣式而創(chuàng)建的。在某些情況下,局部樣式可以以某種重疊方式來排列。
上述概念可以參照兩幅在數(shù)字相機行業(yè)廣泛使用的樣例拼圖來說明。第一種類型(在圖10中所說明的)普遍稱為列拼圖。這種類型的拼圖是一種均勻的,逐列的紅、綠、藍色彩信道(在圖10中標為R、G和B)的交替。為了形成這一拼圖,要在整個像素陣列上重復一種R、G和B敏感度的1×3樣式1004。在圖10所說明的示例性拼圖中,R、G、B色彩信道中每一個的相對空間解析度是33%?,F(xiàn)在考慮在圖10中的鄰域1001、1002和1003。任何其它具類似尺寸和形狀的鄰域必須對應(yīng)于局部樣式1001、1002或1003中的一種,因為這些是唯一有可能用于圖10中所說明的示例性列拼圖的局部3×3鄰域樣式??偟膩碚f,不論鄰域的形狀和尺寸,一個3色列拼圖CCD只有3種不同的局部鄰域樣式。
一種更為普遍類型的拼圖(普遍稱為Bayer拼圖)考慮人體視覺系統(tǒng)對不同色彩的敏感度。眾所周知人眼對綠光比對紅或藍光更為敏感。因此,Bayer拼圖將綠像素的相對空間解析度設(shè)置為50%,而將紅和藍像素的設(shè)置為25%,從而產(chǎn)生一幅對于人眼呈現(xiàn)較少粒狀的圖像。在圖1 1中說明了這一拼圖的一個示例。所說明的拼圖由一個在整個圖像上重復的2×2樣式1105構(gòu)成。如圖11中所說明的那樣,在不同鄰域中的不同類型局部樣式對應(yīng)于該2×2樣式的行和列的不同循環(huán)輪換。如此,在一個Bayer拼圖CCD中,所有尺寸≥2×2的鄰域可以歸類成屬于四種不同的可能局部樣式中的一種。在圖12中說明了這四種樣式1105-1108。在圖11中,樣式1101-1104是表示可能在Bayer拼圖CCD中的四種不同類型的3×3鄰域的示例。在本發(fā)明的某一較佳實施例中,使用了一個Bayer拼圖,但該技術(shù)對于列拼圖樣式或任何其它類型的樣式也是有效的。
在某些常規(guī)系統(tǒng)中,用插值來計算沒有在由單芯片CCD捕捉的圖像中出現(xiàn)的R、G、B值。插值分別對每個色彩信道進行。然而,這一方法沒能考慮相鄰場景點色彩之間的相關(guān)性,而這樣的相關(guān)性在真實場景中總是趨向于會發(fā)生。相反,如本發(fā)明所述的一種方法開發(fā)了不僅在空間維度上,而且在其它維度如波長和/或時間上使用真實場景的相關(guān)性的局部函數(shù)。使用這些局部函數(shù),可以將Bayer拼圖輸入映射成一幅高質(zhì)量RGB圖像。
令所測量的SVC數(shù)據(jù)(如由一個Bayer CCD捕捉的數(shù)據(jù))以M表示??梢杂靡唤M(一般為12個)結(jié)構(gòu)模型(或映射函數(shù))來從M重建所期望的高質(zhì)量RGB圖像H,其中每個模型針對一個色彩信道λ與四種不同局部樣式鄰域之一的可能的組合。令Mp表示M的一個屬于某特定局部樣式p的鄰域。而后可以按如下估計在該鄰域中心的所期望的色彩值Hp(i+0.5,j+0.5)=Σ(x,y)⋐Sp(i,j)Σ(k≠x,l≠y)∈Sp(i,j)Σn=0NPΣq=0NP-nCp(x,y,k,l,λ,n)Mpn(x,y)Mpq(k,l)---(10)]]>其中Sp(i,j)是像素(i,j)的鄰域(見圖13)。Np是多項式映射的級數(shù)。Cp表示對于每個色彩信道λ,局部樣式p的多項式系數(shù)集合。一般而言,來自以豎直方向從像素(i,j)替換的像素的信息并不比來自以水平方向替換的像素的信息更重要或更不重要。因此,一般最好使用寬與長一樣的鄰域——如方形的鄰域。而且,每種波長敏感度特征(如每種色彩)最好應(yīng)該在每個鄰域進行相同的次數(shù)。對于任何偶數(shù)的色彩,或?qū)τ诰哂信紨?shù)像素的拼圖樣式,具有偶數(shù)(而不是奇數(shù))長度和寬度的鄰域滿足這一條件。R、G、B值在不在網(wǎng)格上的鄰域中心(i+0.5,j+0.5)計算。
乘積Mp(x,y)Mp(k,l)顯式地表示鄰域中兩個像素間的相關(guān)性。但是,在許多情況下,使用該乘積項并不能很大地增加該技術(shù)的準確性和效率,因為(在空間位置或其它維度上)鄰近的場景的光總是趨向于自然相關(guān)。一個較佳的映射函數(shù)更為簡單,以下給出
Hp(i+0.5,j+0.5)=Σ(x,y)⋐Sp(i,j)Σn=0NPCp(x,y,λ,n)Mpn(x,y)---(11)]]>換句話說,對于在低質(zhì)量SVC數(shù)據(jù)內(nèi)一個鄰域的每個在網(wǎng)格上的像素計算一個多項式,而通過合計(如相加)在該鄰域中所有像素的多項式,就在不在網(wǎng)格上的中心像素處產(chǎn)生了相應(yīng)的一個高質(zhì)量(即高解析度)色彩值。應(yīng)當注意,總的來說,該方法可以用于任何尺寸和形狀的鄰域,也可以用于不在或在網(wǎng)格上的計算。
對于每個λ和每種局部樣式p,公式(11)所定義的映射函數(shù)也可以以矩陣來表達,如在圖14中所說明的那樣Bp(λ)=ApCp(λ) (12)其中矩陣Ap的每一行包含一個具有局部樣式類型p的鄰域Mp的像素值的冪。Ap的每一行包含乘冪到多項式級數(shù)Np的像素值冪。Cp(λ)是一個列向量,包含對于色彩λ和局部樣式p的每個鄰域像素的多項式系數(shù)。Bp(λ)是一個列向量,包含對每個λ和p的所期望的不在網(wǎng)格上的鄰域中心值Hp(λ)。序號λ為簡短起見可以省略,則該映射函數(shù)的估計可以提出為一個加權(quán)最少方塊問題ApTWp2ApCp=ApTWp2Bp---(13)]]>其中Wp是對每個鄰域線形方程加權(quán)的一個對角矩陣。在最少方塊方式中,ApTWp2Ap可以稱為“加權(quán)規(guī)范矩陣”,而ApTWp2Bp可以稱為“加權(quán)回歸向量”。
在公式(11)的映射函數(shù)中的系數(shù)數(shù)量可以按以下計算。令u、x、v表示鄰域的尺寸,令Np表示與樣式p相對應(yīng)的多項式級數(shù)。令P表示在該SVC圖像中的不同局部樣式的數(shù)量。令Λ表示色彩信道的數(shù)量。則系數(shù)數(shù)量|C|由以下公式給出|C|=(P+uvΣp=1PNp)Λ---(14)]]>舉例來說,當對于p=1...P有P=4(如對于Bayer拼圖CCD),Np=2,u=v=6(即一個具有偶數(shù)長度和偶數(shù)寬度的方形鄰域),且Λ=3時(R、G和B),系數(shù)數(shù)量為876。對圖像重建而言,大數(shù)量的系數(shù)提供了比常規(guī)插值技術(shù)更大的靈活性。
如本發(fā)明所述的一種算法可以使用幾幅高質(zhì)量RGB圖像來“學習”(即優(yōu)化)局部多項式映射函數(shù)的參數(shù)。優(yōu)化了的映射函數(shù)實現(xiàn)從用在每個像素只提供一個色彩信道的Bayer拼圖CCD捕捉的圖像重建高質(zhì)量彩色圖像。
在訓練階段,某種訓練算法使用高質(zhì)量RGB圖像對每種類型的局部樣式和每個色彩信道估計局部多項式映射函數(shù)的系數(shù)。圖15說明了如本發(fā)明所述的一個示例性訓練階段的一幅流程圖。在所說明的示例中的訓練算法從用一個膠片相機捕捉并用一個膠片掃描儀掃描的高質(zhì)量彩色圖像1502開始。為了降低這些圖像的品質(zhì)以模擬由一個真實CCD陣列所捕捉的圖像,通過用一個模擬一個典型CCD陣列的性能和局限的響應(yīng)函數(shù)1504處理這些高質(zhì)量圖像1502來產(chǎn)生訓練圖像1506。而后,通過按照彩色拼圖樣式1510從這些高質(zhì)量圖像1502中刪除適當?shù)纳市诺纴砟M一幅SVC圖像M(圖15中的項1514)(可以是如一幅Bayer拼像)(步驟1512)。如在圖14中所說明的那樣,該算法對每種樣式p從所模擬的SVC圖像M(項1514)中解析出一組鄰域Ap(項1528)。每個鄰域都具有一種局部樣式類型p(如見在圖11中的樣式1101-1104)。類似地,對每個色彩信道,從訓練圖像H(項1502)中解析出列向量Bp(項1530)。為了確保在鄰域中的紅色與藍色像素按在基本Bayer樣式中一樣的比例來表示,最好使用具有偶數(shù)(而不是奇數(shù))長度和寬度的鄰域。如在圖13中所說明的那樣,一個具有偶數(shù)長度和/或?qū)挾鹊泥徲虻闹行氖窃谝粋€不在網(wǎng)格上的位置。為了對結(jié)果的半個像素偏移進行補償,該算法將這些訓練圖像1506位移半個像素(步驟1508)。如果高質(zhì)量圖像的原先采樣沒有遵循用于信號重建的Nyquist標準,這半像素的偏移可以將更多的模糊引入訓練圖像。這樣的模糊可以獲得對主要具有平滑表面的模糊輸入圖像及/或場景較好地優(yōu)化了的模型系數(shù)。如果期望優(yōu)化用于主要具有銳利和不連貫特性的場景的明銳圖像的模型,則最好從按照Nyquist標準采樣的表示主要具有銳利和不連貫特性的場景的圖像開始。但是,如前面關(guān)于SVE圖像所討論的,如果在訓練時,無法知道以后將要由該算法增強的圖像的明銳度水平,就最好使用明銳的圖像來訓練,因為模型的準確度對于增強較明銳的圖像最為重要,并且在任何情況下,明銳的訓練圖像都很可能包括足夠的平滑區(qū)域,以便還能夠?qū)崿F(xiàn)對平滑和/或模糊圖像的增強。
如前面關(guān)于SVE算法所討論的那樣,該算法規(guī)范化在SVC數(shù)據(jù)中的每個鄰域Ap(i)(步驟1516)。在規(guī)范化后,用一個加權(quán)最少方塊程序(步驟1518)來計算加權(quán)規(guī)范矩陣ApnormTWp2Apnorm和右手側(cè)回歸向量ApnormTWp2Bpnorm。在該最少方塊程序1518中,對于每幅訓練圖像,累積這些加權(quán)規(guī)范矩陣和加權(quán)回歸向量(步驟1520)。然后計算最少方塊結(jié)果(步驟1518)。一旦所有訓練圖像都已處理,該算法就用公式(13)對每種類型的鄰域樣式p和每個色彩信道確定多項式映射函數(shù)的系數(shù)Cp(項1526)(步驟1524)。
在重建階段(在圖16中說明了其一個示例),某種重建算法將該多項式系數(shù)1526(在訓練階段計算出來的)應(yīng)用于用Bayer拼圖CCD捕捉的SVC圖像1602。換句話說,該算法從一幅每個像素只有一個色彩信道測量的SVC圖像計算出一幅每個像素具有三個色彩信道值的高質(zhì)量圖像1610。這種重建可以稱為“分離拼圖”。與訓練階段相類似,在重建階段對SVC圖像的各個鄰域進行規(guī)范化(步驟1604)。然后將系數(shù)Cp(項1526)應(yīng)用于每種規(guī)范化了的鄰域樣式和每個色彩信道,從而獲得Bpnorm=ApnormCp(步驟1606)。接著,將Bpnorm反規(guī)范化(即非規(guī)范化)(步驟1608)以獲得重建的高質(zhì)量彩色圖像1610。
如本發(fā)明所述的一種SVC訓練算法已經(jīng)用表示多種自然場景的30幅高質(zhì)量彩色圖像測試過。如在圖15的流程圖所說明的那樣,每幅訓練圖像都通過從每個像素中刪除兩個色彩信道而降低了品質(zhì),以獲得SVC圖像。而后用一種加權(quán)最少方塊程序來計算一個級數(shù)2的局部多項式映射函數(shù)的系數(shù)。接著,將20幅測試圖像(與在訓練步驟中所用的不同)降低品質(zhì),以產(chǎn)生20幅模擬的低質(zhì)量SVC圖像。如在圖16中的流程圖所說明的那樣,將該模型系數(shù)應(yīng)用于這些模擬的低質(zhì)量測試圖像。如圖35的柱狀圖所示,本發(fā)明的結(jié)構(gòu)重建方法比常規(guī)立方體插值產(chǎn)生更多低差錯的像素和更少高差錯的像素。
如本發(fā)明的某個較佳實施例所述,一個局部相異測量樣式可以由不同種類的敏感度特征的局部相異樣式的一個組合構(gòu)成。舉例而言,如在圖6A中所說明的那樣,一個測量樣式可以是一個強度敏感度樣式和一個波長(如色彩)敏感度樣式的某種組合。這樣一個由一個SVE樣式和一個SVC樣式的某種組合構(gòu)成的樣式可以稱為一個空間變化色彩與曝光度(SVEC)樣式。在圖6A所說明的示例中,測量樣式包括三個傳感器區(qū)域602、604和606。圖5說明了一個用圖6A的樣式測量信號的示例性程序。第一個區(qū)域602從在場景中的一個物體126的區(qū)域640(見圖1)接收包括一個或多個信號的第一個信號集126(圖5中的步驟502)。
第一個傳感器部分602進行對第一個信號集620的第一個測量集(包含至少一次測量)(圖5中的步驟504)。在圖6A所說明的測量樣式中,第一個區(qū)域602具有第一個敏感度特征646,該特征包含一種對綠光的敏感度。而且,該第一個區(qū)域602具有第二個敏感度特征648,該特征包含一種對光強的高敏感度。
第二個感測器組604從場景的第二個區(qū)域642接收并測量第二個信號集622(步驟506和508)。第二個感測器組604也對綠光敏感——即傳感器具有象第一個感測器組602一樣的敏感度特征。而且,第二個感測器組604具有關(guān)于第二個信號集622的第三個敏感度特征,該第三個敏感度特征650包含一種對光強的有些降低了的敏感度。第三個感測器組606從場景的第三個區(qū)域644接收并測量第三個信號集624(步驟510和512)。第三個感測器組606具有關(guān)于第三個信號集624的第四個敏感度特征。在本示例中,該第四個敏感度特征652具有與第一種敏感度特征646相同的類型——即對某組選定的波長(在這里的情況下,是紅光)的敏感度。而且,在圖6A所說明的示例中,第三個感測器組606具有第五個敏感度特征654,該第五個敏感度特征包含一種對光強的更為降低了的敏感度。第五個敏感度特征654具有分別與第一個和第二個感測器組602和604的第二種和第三種敏感度特征648和650相同的類型——即對光強的某個特定水平的敏感度。一旦測量了第一、第二和第三個信號集,就用如本發(fā)明所述的某種結(jié)構(gòu)模型來增強結(jié)果數(shù)據(jù)的解析度,從而產(chǎn)生更高解析度的輸出數(shù)據(jù)(圖5中的步驟514)。
如本發(fā)明所述的一種局部相異測量樣式的另外一個實施例所述,感測器組不需要通過重疊遮罩來構(gòu)成,而可以替換成如在圖6B中所說明的那樣,從每一個都具有自己的敏感度特征的多個感測器構(gòu)成。在所說明的測量樣式中,第一個感測器組包含一個具有敏感度特征646的感測器616,該敏感度特征是一種依賴于對信號波長的測量敏感度的類型——即感測器616對綠光敏感。第一個感測器組還包含一個具有敏感度特征648的感測器618,該敏感度特征是一種依賴于對信號強度的測量輸出的類型——即,在這種情況下,感測器618具有未降低的強度敏感度。第二個感測器組604類似地包含兩個分別具有敏感度特征646和650的感測器632和634,該兩個敏感度特征分別是一種色彩敏感度類型和一種強度敏感度類型。類似地,第三個感測器組606也包含分別具有敏感度特征646和654的感測器636和638,該兩個敏感度特征分別是一種色彩敏感度類型和一種強度敏感度類型。盡管在圖6A和6B中所說明的測量樣式只包括三個感測器組,對于可以用作測量樣式一部分的感測器組的數(shù)量并沒有限制。舉例來說,如在圖6C和6D中所說明的那樣,在如本發(fā)明所述的一種局部相異測量樣式的一個較佳實施例中,可以將一種Bayer樣式與一種強度敏感度特征的局部相異測量樣式一起使用。在圖6C所說明的示例中,四個感測器組608、602、610和604分別具有不同的色彩敏感度特征662、646、656和646。而且,感測器組608、602、610和604分別具有不同的強度敏感度特征664、648、660和650。另外,如在圖6G中所說明的那樣,可以使用不同的強度敏感度特征樣式。舉例來說,在圖6C所說明的示例中,紅色和藍色感測器組608和610具有與對光強的高敏感度相應(yīng)的強度敏感度特征664和660。但是,在圖6D所說明的示例中,紅色和藍色感測器組608和610具有與對光強的降低了的高敏感度相應(yīng)的強度敏感度特征666和668。
可以用一個基本SVEC樣式來創(chuàng)建一個全圖像SVEC樣式。舉例來說,請考慮在圖22中所說明的像素陣列?;叶人街甘鞠袼仄毓舛?,而大寫字母R、G和B指示在不同像素處所測量的色彩信道。一種創(chuàng)建這一全圖像SVEC拼圖的方法是通過在一小片鄰域內(nèi)指定色彩敏感度和亮度(即強度)敏感度以形成一個初始樣式,而后將該初始樣式2201在整個感測器陣列上重復。在圖22所說明的示例中,用一個方形的4×4初始樣式在整個感測器陣列上重復。然而,總的來說,初始樣式可以是一個任意尺寸的色彩和曝光度的拼圖。在整個感測器陣列上重復這樣一個初始樣式的一個好處是不同類型局部樣式2201-2216的數(shù)量與初始樣式2201的不同輪換相對應(yīng)。在SVEC成像中,色彩和動態(tài)范圍是作為空間位置的一個函數(shù)而同時采樣的,其結(jié)果是,在SVEC拼圖內(nèi)的局部樣式要比在SVC拼圖或SVE拼圖中的局部樣式更為復雜。
最好以某種能產(chǎn)生一個SVEC拼圖的方式來對相應(yīng)像素指定多種曝光度和色彩,該SVEC拼圖具有某些依賴于特定應(yīng)用的所期望的性質(zhì)。這些所期望的性質(zhì)可以以下列參數(shù)形式來定義1.根據(jù)長度u、寬度v和/或縱橫比a=v/u來定義的鄰域尺寸和形狀。
2.在某個鄰域中的R、G、B區(qū)域的數(shù)量,及相應(yīng)色彩敏感區(qū)域的相對位置。
3.不同曝光度(即強度敏感度)的數(shù)量e和值,及在這些鄰域內(nèi)相應(yīng)曝光度敏感區(qū)域的相對位置。
4.對每個曝光度值所指定的R、G、B區(qū)域的數(shù)量。
舉例來說,如上面所討論的那樣,在多數(shù)情況下鄰域的長度和寬度最好相等(即a=1)。就尺寸而言,較小的鄰域總是趨向于對具有“較小”紋理(即在其中每個單位距離的亮度迅速變化)的圖像提供較好的結(jié)果。這是因為對于這樣的圖像,在較遠像素間的相關(guān)性被削弱了,其結(jié)果是,一個大的鄰域不能比一個小的鄰域提供更多的信息。另外,如上面所討論的那樣,對于一個具有偶數(shù)元素的拼圖,鄰域最好是偶數(shù)長度和偶數(shù)寬度。
就曝光度水平的數(shù)量e而言,一個較高的數(shù)量可以提供較高的動態(tài)范圍。就這些不同曝光度水平間的比例而言,較高的比例提供更多的可感測總范圍,但會導致較粗糙的可感測亮度水平的間隔。最好選擇這些不同曝光度水平間的比例,使可感測亮度的總范圍符合在場景中呈現(xiàn)和所關(guān)心的亮度水平的范圍。
多種曝光度水平最好分布成避免將多數(shù)高敏感度像素放置在鄰域的一個部分(如右上角),而將多數(shù)低敏感度像素放置在一個不同的部分(如左下角)。這樣一種較佳的排列提高了在鄰域的每個部分至少有一些像素能準確感測某個輸入信號的可能性,即使相鄰或附近的像素飽和了或不能感測該信號。
就色彩樣式而言,在許多系統(tǒng)中,一個Bayer拼圖(在圖11中所說明的)是一個用于在感測器陣列上色彩分布的較佳選擇,因為這一樣式符合人眼的敏感度,還因為多數(shù)的數(shù)字相機都遵循這一樣式。如果使用這一樣式,則在每個uxv尺寸的局部鄰域內(nèi),R、G、B的空間解析度分別為25%、50%和25%,如在圖11中所說明的那樣|R|=|B|=0.25uv;|G|=0.5uv。(15)根據(jù)公式(15),在Bayer樣式上,可以容易地看出鄰域長度u和鄰域?qū)挾葀都是偶數(shù)。而且,在每個鄰域內(nèi),對于每種不同的曝光度水平每種色彩最好發(fā)生與該色彩在Bayer樣式中所發(fā)生的相同的次數(shù)。因此|R|=|B|=ke;|G|=2ke,4ke=uv, (16)其中R和B與每種曝光度結(jié)合k次,G與每種曝光度結(jié)合2k次,而k、e和u都是正整數(shù)。而且,以鄰域的縱橫比a的形式為4ke=au2。(17)為了使該模型所需要的系數(shù)的數(shù)量最少化,最好找到滿足上述約束的最小局部SVEC樣式。對于一個固定的曝光度數(shù)量e和一個固定的縱橫比a,最小的局部樣式尺寸u對應(yīng)于滿足公式(17)的k的最小整數(shù)值。舉例來說,如果e=2,并且a=1(即該鄰域是方形的),則需要在整個感測器陣列上重復的最小鄰域具尺寸u=4(對應(yīng)于k=2)。類似地,對于e=4和a=1,結(jié)果參數(shù)是u=4和k=1。在圖22中所說明的示例性圖像樣式使用e=4(即四種不同的灰度水平)和一個Bayer彩色拼圖。為產(chǎn)生全圖像樣式,要將4×4方形鄰域2201在整個陣列上重復。
以上結(jié)果在曝光度敏感度值的數(shù)量與較佳的局部鄰域樣式尺寸之間建立了某種關(guān)系。另外,也確定了在每個鄰域中色彩的空間排列。使用上面的約束,可以將多種曝光度敏感度值指定給在局部樣式中的多個像素。
在本發(fā)明的某一較佳實施例中,用優(yōu)化了的局部多項式映射函數(shù)將一幅低動態(tài)范圍的Bayer拼圖SVEC圖像映射成一幅高動態(tài)范圍彩色圖像。這些映射函數(shù)得自一個學習來的結(jié)構(gòu)模型。
令所測量的數(shù)據(jù)(在這一示例中,用一個SVEC傳感器捕捉的數(shù)據(jù))以M表示。可以用一組結(jié)構(gòu)模型(即局部映射函數(shù))來從M重建一幅高動態(tài)范圍彩色圖像H。針對每個色彩信道λ,為16種局部鄰域樣式p中的每一種優(yōu)化一個局部映射函數(shù)(在圖22中展示為樣式2201-2216)。令Mp表示M的一個屬于某特定局部樣式p的鄰域。而后可以按如下估計在該鄰域中心的所期望的高動態(tài)范圍色彩值Hp(i+0.5,j+0.5)=Σ(x,y)⋐Sp(i,j)Σn=0NPCp(x,y,λ,n)Mpn(x,y)---(18)]]>其中Sp(i,j)是像素(i,j)的鄰域,如在圖23中所說明的那樣。Np是多項式映射的級數(shù)。Cp表示對于每個色彩信道λ,在每個鄰域像素(x,y)的局部樣式p的多項式系數(shù)。這一示例性實現(xiàn)使用具有偶數(shù)長度和偶數(shù)寬度的方形鄰域。如在圖23中所說明的那樣,高動態(tài)范圍色彩值在不在網(wǎng)格上的鄰域中心(i+0.5,j+0.5)計算。應(yīng)當注意,該方法可以用于任何尺寸和形狀的鄰域,也可以用于計算不在與在網(wǎng)格上位置/區(qū)域(即像素)的圖像值。還應(yīng)當注意,盡管在這一示例性實現(xiàn)中使用了一個相對簡單的映射函數(shù)(公式(18)),該算法還可以使用某種更為通用的映射函數(shù),如前面在SVE和SVC環(huán)境中所討論的公式(3)和(10)的。
與SVE和SVC程序相類似,對于每種局部樣式p,公式(18)也可以以矩陣形式來表達,如在圖14中所說明的那樣Bp(λ)=ApCp(λ) (19)其中Ap是一個矩陣,其每一行包含屬于局部樣式類型p的鄰域Mp的像素值的冪。Ap包含乘冪到多項式級數(shù)Np的像素值。Cp(λ)是一個列向量,包含對于色彩λ和局部樣式類型p的每個鄰域像素的多項式系數(shù)。Bp(λ)是一個列向量,表示對每個λ和p的所期望的高動態(tài)范圍的不在網(wǎng)格上鄰域的中心色彩值Hp(λ)。序號λ為簡短起見可以省掉,則該映射函數(shù)的估計可以提出為一個加權(quán)最少方塊問題ApTWp2ApCp=ApTWp2Bp---(20)]]>其中Wp是對每個鄰域線形方程加權(quán)的一個對角矩陣。
在該多項式映射函數(shù)中的系數(shù)數(shù)量可以按以下計算。令uxv表示鄰域的尺寸和形狀,并令Np表示與局部SVEC樣式p相對應(yīng)的多項式級數(shù)。令P表示在該SVEC圖像中的不同領(lǐng)域樣式的數(shù)量。則系數(shù)數(shù)量|C|由以下公式給出|C|=(P+uvΣp=1PNp)Λ---(21)]]>舉例來說,當對于p=1...P有A=3(如對于色彩R、G和B),P=16(對于使用4種不同像素曝光度和一個Bayer彩色拼圖的SVEC感測器),Np=2,且u=v=6(即一個具有偶數(shù)長度和偶數(shù)寬度的方形鄰域)時,系數(shù)數(shù)量為3504。
如本發(fā)明所述的用于增強圖像質(zhì)量的基于模型的方法可以應(yīng)用于任何對圖像光的維度的同時采樣,如通過公式(4)、(11)和(18)的映射函數(shù)間的相似性及通過對SVC、SVE和SVEC符號和方法的描述間的相似性所證明的那樣。
如本發(fā)明所述的一種SVEC算法可以使用幾幅由高動態(tài)范圍彩色傳感器捕捉的圖像來“學習”一個局部多項式映射函數(shù)。而后可以用結(jié)果映射函數(shù)來從由SVEC傳感器捕捉的其它圖像重建高動態(tài)范圍彩色圖像。在該算法的訓練階段,使用高動態(tài)范圍彩色圖像對每種類型的局部樣式(如在圖22中所展示的樣式2201-2216)估計局部多項式映射函數(shù)的系數(shù)。圖24說明了如本發(fā)明所述的一個示例性SVEC訓練階段的一幅流程圖。在所說明的示例中,訓練使用由一個膠片相機捕捉并由一個膠片掃描儀掃描的12位彩色圖像2402來進行??s放各圖像2402的強度,以模擬在由該傳感器捕捉的圖像的總曝光度中的變化(步驟2404)。該算法對這些縮放了的圖像應(yīng)用與一個SVEC感測器的相匹配的一個響應(yīng)函數(shù)2406。而后,將這些結(jié)果圖像平移,以較佳地用每種類型的曝光度樣式與每種類型的圖像鄰域的每個可能的組合來訓練(即優(yōu)化)映射函數(shù)參數(shù)(步驟2408)。移動步驟2408的輸出是一組訓練圖像2410。對每幅訓練圖像應(yīng)用一個SVC遮罩2412和一個SCE遮罩2418,以產(chǎn)生一幅12位SVEC圖像2422(步驟2416和2420)。在所說明的示例中,首先應(yīng)用SVC遮罩2412(步驟2414),從而產(chǎn)生SVC中間數(shù)據(jù)2416。但是,也可以首先應(yīng)用SVE遮罩。通過裁剪255個強度水平的像素數(shù)據(jù)來降低每幅12位SVEC圖像的品質(zhì),而后重新量化這些數(shù)據(jù)(步驟2424)以產(chǎn)生一幅8位圖像M(展示為項2426)。上述過程模擬了一個低動態(tài)范圍SVEC傳感器。如在圖14中所說明的那樣,從圖像M(項2426)中,對每種樣式p解析出一組鄰域Ap。對每個色彩信道和局部區(qū)域,從訓練圖像H中解析出列向量Bp。所說明的實現(xiàn)使用具有偶數(shù)長度和寬度的方形鄰域。與SVC和SVE算法相類似地,在SVEC算法中,將這些訓練圖像位移半個像素(步驟2430)。另外,如前面關(guān)于SVE和SVC圖像所討論的那樣,如果在訓練時,無法知道以后將要由該算法增強的圖像的明銳度水平,就最好使用明銳的圖像來訓練,因為模型的準確度對于增強較明銳的圖像最為重要,并且在任何情況下,明銳的訓練圖像都很可能包括足夠的平滑區(qū)域,以便還能夠?qū)崿F(xiàn)對平滑和/或模糊圖像的增強。
與SVC和SVE算法相類似,每個屬于這些局部SVEC樣式類型之一的鄰域的數(shù)據(jù)用公式(8)和(9)來規(guī)范化(步驟2428)。在規(guī)范化后,用一個加權(quán)最少方塊程序2432來計算加權(quán)規(guī)范矩陣ApnormTWp2Apnorm和右手側(cè)回歸向量ApnormTWp2Bpnorm。在該最少方塊程序2432中,對于每幅訓練圖像,累積每個規(guī)范矩陣和回歸向量(步驟2434)。一旦該訓練算法處理了所有這些高動態(tài)范圍彩色圖像(包括對每幅圖像的多種曝光度和多個平移),就獲得了最少方塊的結(jié)果(步驟2436),并以該結(jié)果來使用公式(20)對每種類型的鄰域樣式p和每個色彩信道λ計算多項式映射函數(shù)的系數(shù)Cp(項2440)(步驟2438)。
在重建階段(在圖25中說明了其一個示例),該算法將優(yōu)化了的多項式系數(shù)應(yīng)用于用低動態(tài)范圍(如8位)Bayer拼圖SVEC傳感器捕捉的SVEC圖像2502。與訓練階段相類似,該重建算法對與這些SVEC圖像中的每種局部樣式p相對應(yīng)的每個鄰域Ap進行規(guī)范化(步驟2504)。然后將系數(shù)Cp(項2440)為每個色彩信道應(yīng)用于每種規(guī)范化了的鄰域樣式,從而獲得Bpnorm=ApnormCp(步驟2506)。而后該算法將Bpnorm反規(guī)范化(步驟2508)。由于SVEC樣式是基于對場景光的不均勻的量化,因此根據(jù)在SVEC感測器遮罩中所用的離散曝光度的數(shù)量,不均勻地量化這些反規(guī)范化了的數(shù)據(jù)(步驟2510),從而產(chǎn)生一幅重建的高動態(tài)范圍彩色圖像2512。
如本發(fā)明所述的一種SVCE方法已經(jīng)用在4種不同曝光度下取得的10幅高動態(tài)范圍彩色(每色彩信道12位)訓練圖像測試過。[這要確認]這些訓練圖像表示了多種自然場景。對于每幅12位訓練圖像的每個像素,該算法從2個色彩信道中刪除信息,從而將每個像素轉(zhuǎn)換成一個單色像素。這一程序的結(jié)果是一組12位SVC圖像。而后按照在圖22中所說明的SVEC曝光度樣式,將這些對應(yīng)于每個場景的4種曝光度的12位SVC圖像組合起來。而后如在圖24的流程圖中所說明的那樣,將結(jié)果的12位SVEC圖像降低品質(zhì),以產(chǎn)生8位SVEC圖像。而后用一種加權(quán)最少方塊技術(shù)來計算局部多項式映射函數(shù)(級數(shù)3)的系數(shù)。接著,將10幅測試圖像(與在訓練中所用的圖像不同)降低品質(zhì)以產(chǎn)生示例性8位SVEC測試圖像。而后按照圖25的流程圖,將該模型(使用由訓練程序產(chǎn)生的系數(shù))應(yīng)用于這些8位SVEC測試圖像。圖34的柱狀圖將本發(fā)明的結(jié)構(gòu)重建算法的結(jié)果與一個雙向立方體插值程序的結(jié)果相比較。如該圖表所說明的,該結(jié)構(gòu)模型產(chǎn)生更多低差錯的像素和更少高差錯的像素。
盡管前面的示例都強調(diào)排列在兩個空間維度(即豎直和水平維度)中的測量樣式,但如本發(fā)明所述的測量樣式并不僅限于空間維度。特別是,對于視頻應(yīng)用,希望可以利用某種關(guān)于空間和時間兩者局部相異的測量樣式,如在圖6E和6F中所說明的那樣。在圖6E中,在第一個時間T1取得一幅視頻幀。該視頻幀包括對從場景的兩個區(qū)域640和642發(fā)出的光的測量。區(qū)域640和642是以它們在空間和時間兩方面的位置來定義的。圖6F中,第二幅視頻幀在第二個時間T2接收到,該第二幅視頻幀包括對從場景的兩個不同位置670和644接收的光的測量。應(yīng)當注意,在圖6E和6F所說明的示例中,位置640和670在空間上具相同的位置,但在時間維度上具不同的位置。類似地,位置642和644在空間維度上具相同的位置,但在時間維度上具不同的位置。
舉例而言,可以用在圖6A中所說明的測量樣式來進行對位置640、642和644的測量,該測量樣式可以是在豎直空間維度(如由樣式元素602和604所定義的)和時間維度(如由樣式元素604和606所定義的)上局部相異的。
可以用如本發(fā)明所述的一種算法來增強數(shù)據(jù)的時間解析度,如在圖6E和6F中所說明的多幀圖像數(shù)據(jù)。移動物體690在連續(xù)圖像間的空間平移取決于這些圖像被捕捉的頻率(即幀速率)??梢杂帽景l(fā)明的結(jié)構(gòu)模型來提升(即增加)一個視頻序列的有效時間幀速率。這些模型可以有效地用來在原始捕捉的幀之間引入額外的幀。為了進行時間解析度的提升,結(jié)構(gòu)模型預測在圖像中多少亮度值預期會在兩幀間變化。
可以用真實或合成的高時間解析度數(shù)據(jù)來優(yōu)化模型參數(shù)。這樣的高時間解析度數(shù)據(jù)對應(yīng)于多種運動物體的高幀速率視頻序列。將這些高解析度數(shù)據(jù)在時間解析度上降低品質(zhì),以合成所測量的數(shù)據(jù)。在這種情況下的局部樣式對應(yīng)于三維的像素值塊,在其中每個塊都有一定范圍的空間和時間位置。參照圖28,舉例來說,這樣一個塊2814可以包含一個3×3空間窗口(一共36個被測量的像素)的四幅視頻幀2802、2804、2806和2808,如在圖28中所說明的那樣。在一個中間幀2812中的一個像素值2810組成一個高解析度圖像數(shù)據(jù)。解析度增強算法將這些高質(zhì)量圖像數(shù)據(jù)值2810表達成這36個所測量的值2814的一個多項式函數(shù)。用這一結(jié)構(gòu)模型來預測一幅完整的中間圖像幀。因此一組結(jié)構(gòu)模型可以預測許多中間幀,從而增加任何所捕捉的視頻序列的時間解析度。
另外,如本發(fā)明所述的某種算法還可以用以增強以不同曝光度捕捉的一系列圖像形式的圖像數(shù)據(jù)的解析度。這樣一個序列可以用許多技術(shù)來捕捉。舉例來說,用戶可以簡單地改變相機的光圈或曝光度設(shè)置并用每種設(shè)置捕捉一幅單獨的圖像。而且,相機本身可以用多個快速接替的集成時間來獲取一系列圖像。這兩種方法中的任一種都能產(chǎn)生一系列如在圖26中所說明的類型。很顯然所說明的序列2606包含足夠產(chǎn)生一幅高動態(tài)范圍圖像的信息,因為非常亮的場景區(qū)域可以在最小曝光的圖像2602中不飽和地捕捉,而非常暗的區(qū)域可以在最高曝光的圖像2604中以很好的清晰度捕捉??梢杂萌绫景l(fā)明所述的某種多項式模型來計算從對應(yīng)于每個像素的不同曝光度的亮度值集合到單個高動態(tài)范圍值的映射。盡管所測量的數(shù)據(jù)很可能包含飽和的效果,而且盡管用以捕捉這些數(shù)據(jù)的傳感器的輻射測定響應(yīng)函數(shù)可能與所期望的高質(zhì)量圖像的響應(yīng)函數(shù)不同,但本發(fā)明的算法可以優(yōu)化一個能夠為輸出圖像的每個像素產(chǎn)生一個高動態(tài)范圍值的強大的多項式模型。而且,這些輸入和輸出圖像還可以包含色彩信息。在彩色圖像的情況下,可以為每個色彩信道分別完成映射。可作替換的是,可以只對亮度數(shù)據(jù)使用映射方法,在這種情況下每個像素的色彩可以從未飽和(并且不是太暗)的測量值之一中選擇。
盡管前面的討論將亮度和色彩強調(diào)為圖像像素的重要屬性,但從某個場景所反射的光也展現(xiàn)出偏振狀態(tài)。成像了的光的偏振狀態(tài)傳達了有用的信息,如在場景中鏡面反射的存在(高亮光)和反射表面的材質(zhì)屬性。如上面所討論的那樣,可以用具有不同線性偏振角度的偏振濾鏡來覆蓋一個圖像感測器的像素。舉例來說,可以將偏振濾鏡加到在一個Bayer拼圖的所有綠色濾鏡上。一個場景位置的偏振狀態(tài)可以用來自相鄰像素的偏振數(shù)據(jù)來計算。
如本發(fā)明所述,可以通過使用結(jié)構(gòu)模型來增強偏振數(shù)據(jù)的解析度。圖30說明了在一個圖像感測器陣列上的偏振和色彩濾鏡的示例性排列。所獲得的圖像包含色彩和偏振兩種信息。如本發(fā)明所述的某種算法訓練用像素的一小個鄰域來估計紅、綠、藍和偏振狀態(tài)的高質(zhì)量值的結(jié)構(gòu)模型。如在上面所討論的SVEC算法中那樣,在圖30中所說明的偏振樣式中出現(xiàn)四種不同的局部樣式。相應(yīng)地,估計四組結(jié)構(gòu)模型,每組包括四個模型部件,每個部件各針對紅、綠、藍和偏振角度數(shù)據(jù)。這些結(jié)構(gòu)模型結(jié)合了偏振測量的空間相關(guān)性和色彩測量的空間相關(guān)性。另外,這些模型結(jié)合了色彩信道和偏振測量之間的相關(guān)性。
如果色彩不是特別所關(guān)心的,可以使用一個具有不同偏振濾鏡的單色感測器。在這樣一個系統(tǒng)中,結(jié)構(gòu)模型簡單地估計在圖像中每個點的亮度值和偏振狀態(tài)。
前面的討論強調(diào)了使用包含色彩敏感度特征的局部相異樣式和強度敏感度特征的局部相異樣式的組合的測量樣式。但是,這一討論并不意味對可以組合的測量樣式的類型數(shù)量的任何限制。舉例而言,如在圖7中所說明的那樣,可以期望組合起色彩敏感度(特征706和708)、強度敏感度(特征710和712)和偏振敏感度(特征714和716)樣式。而且,盡管在圖7中所說明的示例包含感測器組702和704,每組包含單個感測器,但感測器組702和704的每組也可以由多個感測器構(gòu)成,與在圖6B中所展示的感測器組602、604和606相類似。
在多特征的情況下,使用幾個結(jié)構(gòu)模型,以包含所出現(xiàn)的多種類型的樣式。這一方法可應(yīng)用于如在圖31中所說明的示例性樣式的情況,在其中圖像數(shù)據(jù)包含對強度和頻譜屬性的空間和時間采樣。用結(jié)構(gòu)模型來預測增強了空間、強度、頻譜和/或時間解析度的高質(zhì)量圖像數(shù)據(jù)。
而且,應(yīng)當理解如本發(fā)明所述的某種重建算法并不限于表示在可見光譜內(nèi)光的樣式的圖像數(shù)據(jù)。在此描述的技術(shù)可應(yīng)用于任何電磁輻射或任何其它輻射的成像,包括(但不限于)紅外(IR)成像、X射線成像、磁共振(MR)成像、合成孔徑雷達(SAR)成像、基于粒子的成像(如電子顯微)和聲學(如超聲波)成像。
還可以用如本發(fā)明所述的一種方法來增強一幅圖像的空間解析度。一幅已捕捉的圖像可以認為是一幅理論上較高質(zhì)量圖像的一個低解析度版本??梢杂媒Y(jié)構(gòu)模型來將一幅或多幅低解析度圖像的局部鄰域映射到單個的高解析度值,該高解析度值可以認為是前述較高質(zhì)量圖像的一個像素。在圖27中說明了這一技術(shù)的一個示例。在圖像中的每個像素2702都由一個已測量的亮度值表示。算法進行一次解析度的提升,在其中用所測量的像素值的一個局部鄰域2704來對不在該像素網(wǎng)格上的新位置2706估計最有可能的值。在整個圖像上重復這一過程,以產(chǎn)生一幅具有原來所測量的圖像四倍像素的圖像。信息理論建議不可以用傳統(tǒng)的技術(shù)來進行這一解析度提升。然而,本發(fā)明的結(jié)構(gòu)模型使用外在信息來獲得額外的解析度。特別的是,這些模型的系數(shù)結(jié)合了通過訓練程序?qū)W習到的典型場景的知識。
與上述的示例相類似,空間解析度增強算法使用一組高解析度圖像來進行訓練程序。這些訓練圖像在解析度上被降低了品質(zhì)。然后該算法優(yōu)化一個多項式結(jié)構(gòu)模型的參數(shù),該模型適合于將所測量值的局部(如3×3或5×5)鄰域映射到在一個新位置的高質(zhì)量數(shù)據(jù)。對于每個這些新的高質(zhì)量值計算一個單獨的結(jié)構(gòu)模型。在這一示例中,使用了三個結(jié)構(gòu)模型,每個都針對各新位置2706。這些模型一起實現(xiàn)了對任何給定已測量圖像的解析度提升。而且,盡管上面的示例包含了對一組非彩色亮度數(shù)據(jù)的空間解析度的增強,但該技術(shù)還可以應(yīng)用于表示兩個或多個色彩信道的數(shù)據(jù)。對于三個色彩信道(典型的是R、G、B),最好使用總共9個結(jié)構(gòu)模型。
還可以用如本發(fā)明所述的一種方法來增強圖像數(shù)據(jù)的空間解析度。在理論上,一個場景點可以具有任意的頻譜分布函數(shù)——即作為波長函數(shù)的任意的反射系數(shù)。然而,在實際上,創(chuàng)造物體表面的自然或人工物理過程總是趨向于使表面反射系數(shù)的頻譜分布平滑與表現(xiàn)良好。其結(jié)果是,少量的頻譜樣本(如用窄帶頻譜濾鏡做的測量)可以足夠于準確地預測在寬廣范圍照明條件下一大類真實世界表面的完整頻譜分布。圖29說明了一個用不同頻譜濾鏡捕捉的示例性場景的幾幅圖像。這些圖像也可以用高質(zhì)量多頻譜圖像來合成。用具有相對較低頻譜解析度的真實或合成圖像來開發(fā)及優(yōu)化能夠?qū)υ谒鶞y量(或合成)的波長之間的波長預測亮度值的結(jié)構(gòu)模型。這一方法實現(xiàn)了對基于用常規(guī)(R-G-B)彩色相機捕捉的圖像的場景點頻譜分布估計的確定。在某個較佳實施例中,用于重建的所測量數(shù)據(jù)的鄰域2902是在空間和頻譜兩個維度上定義的。這一實施例利用在鄰近場景點頻譜分布之間的相關(guān)性,從而提供在每個位置的較高質(zhì)量的頻譜分布的重建。
在本領(lǐng)域技術(shù)人員會明白圖1-31的方法可以在多種標準計算機平臺上實現(xiàn),這些平臺在由圖4、5、9、15、16、20、21、24和25定義的合適軟件的控制下運作。在某些情況下,專用的計算機硬件(如一塊在常規(guī)個人計算機中的外圍板卡)可以增強上面方法的運作效率。
圖32和33說明了適合于實行本發(fā)明的典型計算機硬件。參照圖32,計算機系統(tǒng)包括一個處理部件3210、一個顯示器3220、一個鍵盤3230和一個通訊外圍設(shè)備3240(如一個調(diào)制解調(diào)器)。該系統(tǒng)還可以包括其它的輸入設(shè)備,如一個用于掃描圖像媒介3200的掃描儀3250。另外,該系統(tǒng)可以包括一個打印機3260。該計算機系統(tǒng)一般包括一個或多個硬盤驅(qū)動器3270,可以讀寫計算機可讀取媒介,如磁媒介(即軟盤)或光媒介(如CD-ROM或DVD),以存儲數(shù)據(jù)和應(yīng)用軟件。沒有示出的是,還可以包括其它輸入設(shè)備,如一個數(shù)字指點儀(如一個“鼠標”)以及諸如此類。
圖33是一幅進一步說明處理部件3210的功能框圖。該處理部件3210一般包括一個處理單元3310、控制邏輯3320和一個存儲器單元3330。處理部件3210最好還可以包括一個定時器3350和輸入/輸出端口3340。處理部件3210還可以包括一個依靠在處理單元中所用的微處理器的協(xié)處理器3360??刂七壿?320與處理單元3310一起,提供處理存儲器單元3350與輸入/輸出端口3340間通訊所必需的控制。定時器3350為處理單元3310和控制邏輯3320提供一個定時參考信號。協(xié)處理器3360提供增強了的能力,以進行實時的復雜計算,如密碼算法所要求的那些計算。
存儲器單元3330可以包括不同種類的存儲器,如易失性的和非易失性的存儲器和只讀及可編程的存儲器。舉例來說,如在圖33中所示出的那樣,存儲器單元3330可以包括只讀存儲器(ROM)3331、電子可擦除可編程只讀存儲器(EEPROM)3332及隨機訪問存儲器(RAM)3333。不同的計算機處理器、存儲器配置、數(shù)據(jù)結(jié)構(gòu)以及諸如此類都可以用以實行本發(fā)明,而本發(fā)明并不限于某個特定的平臺。舉例而言,盡管在圖32和33中處理部件3210被展示成一個計算機系統(tǒng)的一部分,但處理部件3210及/或其部件也可以結(jié)合入一個成像儀,如一個數(shù)字視頻攝像機或一個數(shù)字靜止圖像照相機。
如本領(lǐng)域技術(shù)人員會明白的那樣,由圖4、5、9、15、16、20、21、24和25定義的軟件可以以廣泛多種編程語言來編寫。如本發(fā)明所述的示例性軟件算法已經(jīng)以MatlabTM語言(版本5.3.1)編寫。在此所附的附錄中提供了用于示例性SVEC、SVC與SVE算法的計算機源代碼。
盡管本發(fā)明是聯(lián)系特定示例性實施例來描述的,但應(yīng)當理解可以對所披露的實施例進行多種變化、替換和改造,而不背離在所附權(quán)利要求中所闡明的本發(fā)明的精神和范圍。
附錄MATLAB(5.3.1版本)源代碼SVEC代碼<pre listing-type="program-listing"><![CDATA[ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% SPATIALLY VARYING EXPOSURE AND COLOR %% %% RUN ALL PROCESSES ONESHOT%% %%MATLAB VERSION 5.31 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% AuthorSrinivasa G.Narasimhan %% %% PIProfessor Shree K.Nayar %% %% LaboratoryColumbia Automated Vision Environment %% DepartmentComputer Science %% %% UniversityColumbia University,NY,10027 %% %% Date June 2000%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Initialization Routine init % Memory Cleenup and Packing clean; pack; % Training Code training % Memory Cleanup and Packing clean; pack; % Reconstructing/Testing Code testing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% CLEANUP MEMORY %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close all; clear all; pack; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% PARAMETER INITIALIZATION CODE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Number of Patterns numpatterns=16; % Number of Color Channels numchannels=3; % Order of Polynomial poly_order=3; % Pattern Neighborhood Size neigh=6; neigh=neigh*neigh; % SVE Exposures with Ratio 1:4 e1=1.0; e2=1.0/4.0; e3=1.0/16.0; e4=1.0/64.0; % Exposure Scaling of High Quality Data numexp=1; expo=[1.0,0.5,0.7,0.3,1.5,2.0,3.0,0.125]′; % Compute Window Weights(Optional) % window_weight=weights(neigh,numpatterns); window_weight=ones(sqrt(neigh),sqrt(neigh)); % Initialize Blur window size and Sigma blurwindow=5; blurrsigma=0.5; % Initialize Input/Output File names trainfile=′train′; testfile=′test′; % Initialize Filenames to save Regression Data coeffsfile=′Coeffs.mat′; matfile=′RegressionMatrix.mat′; vecfile=′RegressionVector.mat′; % Save Initialization Parameters save initfile*; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TRAINING USING HIGH QUALITY DATA %% %% HIGH QUALITY DATA HIGH DYNAMIC RANGE+COLOR %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Load Parameter Initialization file load initfile; % Data Structure Initialization initialMatrix=zeros(neigh*poly_order,neigh*poly order,numpatterns); initialVector=zeros(neigh*poly_order,numchannels,numpatterns);coeffs=zeros(neigh*poly_order,numchannels,numpatterns); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%TRAINING PHASE%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% traincount=0; % File containing List of Training Images fid_train=fopen(trainfile); % Do until file ends while 1 % Get Filename from each line of the train file filename=fgetl(fid_train); if ~isstr(filename),break,end % Read in the High Dynamic Range(HDR)Image [imgHDR_train,mapH]=imread(filename); [r,c,m]=size(imgHDR_train); imgOriginal=double(imgHDR_train); % Shift the Original HDR Image imgOriginalShift=interpShift(imgOriginal,′cubic′); % Loop over several Exposure Scales for expos=1:1:numexp, % Loop over image shifts corresponding to ail patterns for pati=1:1:sqrt(numpatterns), for patj=1:1:sqrt(numpatterns), clear imgHDR_train; % Train with a different exposure imgHDR_train=double(uint16(imgOriginal(pati:1:r,patj:1:c,)... *expo(expos,1))); imgHDR_shift=double(uint16(imgOriginalShift(pati:1:r,patj:1:c,)... *expo(expos,1))); % Gaussian Blurring to avoid aliasing imgHDR_blur=gaussBlur(imgHDR_shift,blurwindow,blursigma); % Convert to SVC imgSVC_train=img2svc(imgHDR_train); % Convert to SVEC imgSVE_train=svc2svec(imgSVC_train,e1,e2,e3,e4); % Convert HDR to LDR imgLDR_train=HDR2LDR(imgSVE_train);% Train using the HDR image [updatedMatrix,updatedVector]=... LearnCoeffs(imgLDR_train,imgHDR_blur,... poly_order,numpatterns,neigh,window_weight); % Update Normal Covariance Matrix initialMatrix=initialMatrix+updatedMatrix; initialVector=initialVector+updatedVector; traincount=traincount+1 end end end % Clear Image Memory clear img*; end % End Training-While 1 % Optimize Memory Usage pack; pack; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LEAST SQUARES MINIMIZATION %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Loop over each pattern for pattern=1:1:numpatterns, % Print the Condition Number and Rank of the Pattern Matrix cond(initialMatrix(,,pattern)) rank(initialMatrix(,,pattern)) % Loop over each color channel for channel=1:1:numchannels, % Use any one of the following 4 techniques to solve % for the Coefficients % Direct Solution of Normal Equations coeffs(,channel,pattern)=... initialMatrix(,,pattern)\initialVector(,channel,pattern); % Use Cholesky Decomposition % R_Matrix=chol(initialMatrix(,,pattern)); % Y_Vector=R_Matrix′\initialVector(,channel,pattern); % coeffs(,channel,pattern)=R_Matrix\Y_Vector; % Use Orthogonalization % [Q_Matrix,R_Matrix,E_Matrix]=qr(initialMatrix(,,pattern));% Y_Vector=Q_Matrix′*initialVector(,channel,pattern); % coeffs(,channel,pattern)=R_Matrix\Y_Vector; % Linear Regression % [coeffs(,channel,pattern)]=regress(... % initialVector(,channel,pattern),... % initialMatrix(,,pattern)); % Compute Residual Solution for Verification Purposes RESIDUAL=(initialVector(,channel,pattern)-... initialMatrix(,,pattern)*coeffs(,channel,pattern))... /initialVector(,channel,pattern); end end % Finished Training on the given images strcat(′Finished′,′...Training′) % Save the Regression Data in files save(coeffsfile,′coeffs′); save(mat file,′initialMatrix′); save(vecfile,′initialVector′); % Optimize Memory Usage clear initial*; pack; pack; } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%OFFSET IMAGE BY 0.5 PIXELS%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [imgShift]=interpShift(img,method) % Initializations [r,c,m]=size(img); imgShift=zeros(r,c,3); % Create on-grid points [x,y]=meshgrid(1:1:r,1:1:c); % Create off-grid points(offset by 0.5 pixels) [hx,hy]=meshgrid(1.5:1:r,1.5:1:c); % Prepare data in all the color channels zr=img(1:1:r,1:1:c,1)′; zg=img(1:1:r,1:1:c,2)′; zb=img(1:1:r,1:1:c,3)′; % Shift by interpolation imgShift(1:1:r-1,1:1:c-1,1)=interp2(x,y,double(zr),hx,hy,method)′;imgShift(1:1:r-1,1:1:c-1,2)=interp2(x,y,double(zg),hx,hy,method)′; imgShift(1:1:r-1,1:1:c-1,3)=interp2(x,y,double(zb),hx,hy,method)′; } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% CONVERT HIGH QUALITY IMAGE TO %% %%AN SVC BAYER PATTERN IMAGE%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgsvc]=img2svc(imgHDR) [r,c,m]=size(imgHDR); % Initialize SVC map svc_map=zeros(r,c,m); % Initialize R′s svc_map(1:2:r,1:2:c,1)=... ones(prod(size(1:2:r)),prod(size(1:2:c))); % Initialize G′s svc_map(1:2:r,2:2:c,2)=... ones(prod(size(1:2:r)),prod(size(2:2:c))); svc_map(2:2:r,1:2:c,2)=... ones(prod(size(2:2:r)),prod(size(1:2:c))); % Initialize B′s svc_map(2:2:r,2:2:c,3)=... ones(prod(size(2:2:r)),prod(size(2:2:c))); % Initialize SVC Image imgsvc=zeros(r,c); % Generate the SVC map using Bayer pattern for channel=1:1:3 imgsvc=imgsvc+... double(svc_map(,,channel)).* double(imgHDR(,,channel)); end } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%APPLY EXPOSURE MASK %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function y=expmask(x,mask) y=x .* mask; } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% CONVERT FROM SVC IMAGE TO SVEC IMAGE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgSVEC]=svc2svec(imgSVC,e1,e2,e3,e4)% Input the SVE Mask sve_mask=[e2,e2,e1,e4;... e1,e1,e3,e2;... e3,e4,e4,e2;... e3,e4,e1,e3;]; % Generate the SVEC image imgSVEC=blkproc(double(imgSVC),[4,4],′expmask′,sve_mask); } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%BLUR HIGH QUALITY IMAGE TO%% %%AVOID ALIASING DURING RECONSTRUCTION %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgBlur]=gaussBlur(imgHDR,window,sigma) % Create the gaussian kernel kernel=fspecial(′gaussian′,window,sigma); % Blur each channel separately imgBlur(,,1)=filter2(kernel,imgHDR(,,1)); imgBlur(,,2)=filter2(kernel,imgHDR(,,2)); imgBlur(,,3)=filter2(kernel,imgHDR(,,3)); } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% DOWNGRADE DYNAMIC RANGE FROM 12-BIT TO 8-BIT %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgLDR]=HDR2LDR(imgHDR) % From 16 bits,shift right 4 bits and crop the 4 MSBs imgLDR=uint8(imgHDR ./ 16.0); } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% UPDATING REGRESSION MATRIX AND VECTOR %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[theMatrix,solutionVector]=... LearnCoeffs(imgLDR,imgHDR,... poly_order,numpatterns,neigh,window_weights) % Initializations regarding size of images [rl,cl,numchannels]=size(imgLDR); [rh,ch,numchannels]=size(imgHDR); % Initialization regarding Pattern Neighborhoods sneigh=sqrt(neigh); fsneigh=floor(sneigh/2); csneigh=ceil(sneigh/2); % Pattern Repetition Widthrep_width=sqrt(numpatterns); % Number of Training Data Points k=floor((rl-(sneigh-1))/rep_width)*... floor((cl-(sneigh-1))/rep_width); % Initializa Data Structures ParameterData=zeros(k,neigh*poly_order); HDR_Training_Data=zeros(k,numchannels); % Data Structure for Normal Equations theMatrix=zeros(neigh*poly_order,neigh*poly_order,numpatterns); solutionVector=zeros(neigh*poly_order,numchannels,numpatterns); % Loop over different patterns pattern=0; for pati=1:1:rep_width, for patj=1:1:rep_width, pattern=pattern+1; % Loop over the neighborhood m=0; for i=1:1:sneigh, for j=1:1:sneigh, m=m+1; indi=i+pati-1; indj=j(luò)+patj-1; % Form the Parameter Data Matrix ParameterData(,m)=... double(reshape(imgLDR... (indirep_widthrl-max(sneigh+3-indi,0),... indjrep_widthcl-max(sneigh+3-indj,0)), k,l)); end end % Normalize patterns by their energy energy(,1)=sqrt(sum(ParameterData(,1:1:neigh).^ 2,2)); avg_energy=mean(energy); for m=1:1:neigh, ParameterData(,m)=(ParameterData(,m)-avg_energy) ./ energy; end % Loop over the Polynomial Order for order=1:1:poly_order-1, ParameterData(,neigh*order+1:1:neigh*(order+1))=... ParameterData(,(order-1)*neigh+1:1:neigh*order).*... ParameterData(,1:1:neigh); end % Loop over the Color Channels for channel=1:1:numchannels, HDR_Training_Data(,channel)=(double(reshape(imgHDR...(pati+fsneigh:rep_width:rh-(csneigh+3-pati),... patj+fsneigh:rep_width:ch-(csneigh+3-patj),channel),... k,1))-avg_energy) ./ energy; end % Set up the Regression Matrix theMatrix(,,pattern)=ParameterData′*parameterData; % Set up the Solution Vector for all Color Channels for channel=1:1:numchannels, solutionVector(,channel,pattern)=... ParameterData′*HDR_Training_Data(,channel); end end end } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% RECONSTRUCTING HIGH QUALTTY DATA FROM %% %% LOW QUALITY TEST DATA%% %% LOW QUALITY DATA 8-BIT SVEC IMAGE%% %% HIGH QUALITY DATA HIGH DYNAMIC RANGE+COLOR%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Load Initialization File load initfile; % Load the computed Coefficients File load(coeffsfile); % File containing the list of low quality images fid_test=fopen(testfile); testcount=0; % Do until file ends while 1 filename=fgetl(fid_test); if ~isstr(filename),break,end % Read in the test HDR image [imgHDR_test,mapH]=imread(filename); [rt,ct,mt]=size(imgHDR_test); % Convert to SVC imgSVC_test=img2svc(double(imgHDR_test)); % Convert to SVEC imgSVE_test=svc2svec(imgSVC_test,e1,e2,e3,e4); % Convert HDR to LDR imgLDR_test=HDR2LDR(imgSVE_test);% Add Gaussian Noise imgLDR_test=double(imgLDR_test)+normrnd(0,0.25,rt,ct); % Apply coeffs to the image imgComputed=ApplyCoeffs(coeffs,imgLDR_test,poly_order,... numpatterns,neigh,window_weight); % Non-uniformly quantize output image(Optional) imgNonUnifomQuant=nonUniformQuant(uint16(imgComputed),e1,e2,e3,e4); % Output Image imwrite(uint16(imgNonUniformQuant),... strcat(′E\matlabrll\svec\output\′,filename),′tif′); clear img*; testcount=testcount+1 end } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% RECONSTRUCT HIGH QUALITY DATA BY APPLYING%% %% COEFFICIENTS TO LOW QUALITY DATA%% %%LOW QUALITY DATA8-BIT SVEC %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgHDR]=ApplyCoeffs(coeffs,imgLDR,poly_order,... numpatterns,neigh,window_weights) numchannels=3; % Initializations regarding LDR Image [rl,cl,nc]=size(imgLDR); imgHDR=zeros(rl,cl,numchannels); % Initializations regarding pattern neighborhoods sneigh=sqrt(neigh); fsneigh=floor(sneigh/2); csneigh=ceil(sneigh/2); % Pattern Repetition Width rep_width=sqrt(numpatterns); % Number of Training Data Points k=floor((rl-(sneigh-1))/rep_width)*... floor((cl-(sneigh-1))/rep_width); % Initializa Data Structure for Parameter Matrix ParameterData=zeros(k,neigh*poly_order); % Loop over different Patterns pattern=0; for pati=1:1:rep_width,for patj=1:1:rep_width, pattern=pattern+1; % Loop over the pattern neighborhood m=0; for i=1:1:sneigh, for j=1:1:sneigh, m=m+1; indi=i+pati-1; indj=j(luò)+patj-1; % Form the Parameter Matrix ParameterData(,m)=window_weights(i,j)*... double(reshape(imgLDR... (indirep_widthrl-(sneigh+3-indi),... indjrep_widthcl-(sneigh+3-indj)),k,l)); end end % Normalize by pattern energy energy(,1)= sqrt(sum(ParameterData(,1:1:neigh).^2,2)); avg_energy=mean(energy); for m=1:1:neigh, ParameterData(,m)=... (ParameterData(,m)-avg_energy) ./ energy; end % Loop over the Polynomial Order for order=1:1:poly_order-1, ParameterData(,neigh*order+1:1:neigh*(order+1))=... ParameterData(,(order-1)*neigh+1:1:neigh*-rder).*... ParameterData(,1:1:neigh); end % Loop over each channel for channel=1:1:numchannels, % Apply coeffs to the patterns and inverse normalize the patterns HDR_Data=(energy.*... (ParameterData*coeffs(,channel,pattern)))+avg_energy; % Reconstruct the High Quality Image imgHDR(pati+fsneighrep_widthrl-(csneigh+3-pati),... patj+fsneighrep_widthcl-(csneigh+3-patj),channel)=... reshape(HDR_Data,floor((rl-(sneigh-1))/rep_width),... floor((cl-(sneigh-1))/rep_width)); end end end }%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% NON-UNIFORM QUANTIZATION TO 1024 LEVELS %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgNUQuant,binmap]=nonUniformQuant(imgHDR,e1,e2,e3,e4) [r,c,m]=size(imgHDR); % Right shift 4 bits to create 12 bit image imgHDR=double(imgHDR)./16.0; imgNUQuant=zeros(r,c,m); binmap=zeros(r,c); % Initialize number of bins and levels numbins=[256,256,256,256]′; levels=4096*[e4,e3,e2,e1]′; % Compute bin width for each level width=zeros(4,1); width(1,1)=(levels(1,1)/numbins(1,1)); width(2,1)=((levels(2,1)-levels(1,1))/numbins(2,1)); width(3,1)=((levels(3,1)-levels(2,1))/numbins(3,1)); width(4,1)=((levels(4,l)-levels(3,1))/numbins(4,1)); % Quantine according to the bin width in the particular level range imgQ1=imgHDR .* (imgHDR<=levels(1,1)); map1=(1.0/width(1,1))*(imgHDR<=levels(1,1)); imgQ1=floor(imgQ1 ./ width(1,1)) .* width(1,1); imgQ2=imgHDR .* (imgHDR<=levels(2,1)&imgHDR>levels(1,1))-... levels(1,1); map2=(1.0/width(2,1))*(imgHDR<= levels(2,1)&imgHDR>levels(1,1)); imgQ2=levels(1,1)+floor(imgQ2./width(2,1)) .* width(2,1); imgQ3=imgHDR .* (imgHDR<=levels(3,1)&imgHDR>levels(2,1))-... levels(2,1); map3=(1.0/width(3,1))*(imgHDR<=levels(3,1)&imgHDR>levels(2,1)); imgQ3=levels(1,1)+levels(2,1)+... floor(imgQ3 ./ width(3,1)) .* width(3,1); imgQ4=imgHDR .* (imgHDR<=levels(4,1)&imgHDR>levels(3,1))-... levels(3,1); map4=(1.0/width(4,1))*(imgHDR<=levels(4,1)&-imgHDR>levels(3,1)); imgQ4=floor(imgQ4 ./ width(4,1)) .* width(4,1)+levels(1,1)+... levels(2,1)+levels(3,1); % Combine to form Non-Uniformly Quantized Image imgNUQuant=(imgQ1+imgQ2+imgQ3+imgQ4).*16; binmap=sqrt(sum((map1+map2+map3+map4).^2,3)); }]]></pre>
SVC代碼<pre listing-type="program-listing"><![CDATA[ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% SPATIALLY VARYING COLOR RESPONSE %% %% RUN ALL PROCESSES ONESHOT%% %%MATLAB VERSION 5.31 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% AuthorSrinivasa G.Narasimhan %% %% PIProfessor Shree K.Nayar %% %% LaboratoryColumbia Automated Vision Environment%% %% DepartmentComputer Science %% %% UniversityColumbia University,NY,10027 %% %% Date June 2000%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Initialization Routine init % Memory Cleanup and Packing clean; pack; % Training Code training % Memory Cleanup and Packing clean; pack; % Reconstructing/Testing Code testing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% CLEANUP MEMORY %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close all; clear all; pack; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% PARAMETER INITIALIZATION CODE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Number of Patterns numpatterns=4; % Number of Color Channels numchannels=3; % Order of Polynomial poly_order=2;% Pattern Neighborhood Size neigh=6; neigh=neigh*neigh; % Cross terms numcross=0; % Compute Window Weights % window_weight=weights(neigh,numpatterns); window_weight=ones(sqrt(neigh),sqrt(neigh),numpatterns); % Initialize Input/Output File names trainfile=′train′; testfile=′test′; % Initialize Filenames to save Regression Data coeffsfile=′Coeffs.mat′; matfile=′RegressionMatrix.mat′; vecfile=′RegressionVector.mat′; % Save Initialization Parameters save initfile*; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TRAINING USING HIGH QUALITY DATA %% %% HIGH QUALITY DATA HIGH QUALITY COLOR %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Load Initializatiohs load initfile; % Data Structure Initialization initialMatrix=zeros(neigh*poly_order+1+numcross,neigh*poly_order+1... +numcross,numpatterns); initialVector=zeros(neigh*poly_order+1+numcross,numohannels,numpatterns); coeffs=zeros(neigh*poly_order+1+numcross,numchannels,numpatterns); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TRAINING PHASE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% traincount=0; % Training Phase fid train=fopen(trainfile); % Do until file ends while 1 filename=fgetl(fid_train); if ~isstr(filename),break,end % Read in the train HDR image [imgHDR_train,mapH]=imread(filename);[r,c,m]=size(imgHDR_train); %Shift the image by 0.5 pixels imgHDR_shift=interpShift(imgHDR_train,′cubic′); % Convert to SVC imgSVC_train=img2svc(imgHDR_train); % Train using the image [updatedMatrix,updatedVector]=... LearnCoeffs(imgSVC_traint,imgHDR_shift,... poly_order,numpatterns,neigh,window_weight); % For Normal Covariance initialMatrix=initialMatrix+updatedMatrix; initialVector=initialVcctor+updatedVector; traincount=traincount+1 clear img*; end % End Training-While 1 pack; pack; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%LEAST SQUARES MINIMIZATION %%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Optimice pattern=0; for pati=1:1:sqrt(numpatterns), for patj=1:l:sqrt(numpatterns), pattern=pattern+1; cond(initialMatrix(:,:,pattern)) rank(initialMatrix(:,:,pattern)) % Find the initial guess by solving the linear system for channel=1:1:nupachannels, %Direct Inverse of Normal Equations coetfs(:,channel,pattern)=... initialMatrix(:,:,pattern)\initialVector(:,channel,pattern); %Use Cholesky Decomp %R_Matrix=chol(initialMatrix(:,:,pattern)); %Y_Veotor=R_Matrix′\initialVector(:,channel,pattern); %coeffs(:,channel,pattern)=R_Matrix\Y_Vector; %Usc Orthogonalization %[Q_Matrix,R_Matrix,E_Matrix]=qr(initialMatrix(:,:,pattern)); %Y_Vector=Q_Matrix′* initial Vector(:,channel,Pattern );% coeffs(,channel,pattern)=R_Matrix\Y_Vector; % Linear Regression % [coeffs(,channel,pattern)]=regress(... % initialVector(,channel,pattern),... % initialMatrix(,,pattern)); %RESIDUAL=(initialVector(,channel,pattern)-... % initialMatrix(,,pattern)*coeffs(,channel,pattern))... % ./initialVector(,channe1,pattern); end end end % Finished Training on the given images strcat(′Finished′,′...Training′) % Save the Regression Data in files save(coeffsfile,′coeffs′); save(matfile,′initialMatrix′); save(vecfile,′initialVector′); % Optimize Memory Usage clear initial*; pack; pack; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%OFFSET IMAGE BY 0.5 PIXELS%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgShift]=interpShift(img,method) % Initiali zations [r,c,m]=size(img); imgShift=zeros(r,c,3); % Create on-grid points [x,y]=meshgrid(1:1:r,1:1:c); % Create off-grid points(offset by 0.5 pixels) [hx,hy]=meshgrid(1.5:1:r,1.5:1:c); % Prepare data in all the color channels zr=img(1:1:r,1:1:c,1)′; zg=img(1:1:r,1:1:c,2)′; zb=img(1:1:r,1:1:c,3)′; %Shift by interpolation imgShift(1:1:r-1,1:1:c-1,1)=interp2(x,y,double(zr),hx,hy,method)′; imgShift(1:1:r-1,1:1:c-1,2)=interp2(x,y,double(zg),hx,hy,method)′; imgShift(1:1:r-1,1:1:c-1,3)=interp2(x,y,double(zb),hx,hy,method)′;} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% CONVERT HIGH QUALITY IMAGE TO %% %%AN SVC BAYER PATTERN IMAGE%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgsvc]=img2svc(imgHDR) [r,c,m]=size(imgHDR); % Initialize SVC map svc_map=zeros(r,c,m); % Initialize R′s svc_map(1:2:r,1:2:c,1)=... ones(prod(size(1:2:r)),prod(size(1:2:c))); % Initialize G′s svc_map(1:2:r,2:2:c,2)=... ones(prod(size(1:2:r)),prod(size(2:2:c))); svc_map(2:2:r,1:2:c,2)=... ones(prod(size(2:2:r)),prod(size(1:2:c))); % Initialize B′s svc_map(2:2:r,2:2:c,3)=... ones(prod(size(2:2:r)),prod(size(2:2:c))); % Initialize SVC Image imgsvc=zeros(r,c); % Generate the SVC map using Bayer pattern for channel=1:1:3 imgsvc=imgsvc+... double(svc_map(,,channel)) .* double(imgHDR(,,channel)); end } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% UPDATING REGRESSION MATRIX AND VECTOR %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[theMatrix,solutionVector]=... LearnCoeffs(imgLDR,imgHDR,... poly_order,numpatterns,neigh,window_weights) % Some initializations [rl,cl,numchannels]=size(imgLDR); [rh,ch,numchannels]=size(imgHDR); sneigh=sqrt(neigh); fsneigh=floor(sneigh/2); csneigh=ceil(sneigh/2);% Number of cross terms % numcross=prod(size(nchoosek((1:1:neigh),2)))/2; numcross=0; % Number of Data Points k=floor((rl-(sneigh-1))/2)*floor((cl-(sneigh-1))/2); numchannels=3; % Initializa Data Structures ParameterData=zeros(k,neigh*poly_order+1+numcross); ParameterData(,neigh*poly_order+l+numcross)=ones(k,l); HDR_Training_Data=zeros(k,numchannels); % For Normal Eq theMatrix=zeros(neigh*poly_order+l+... numcross,neigh*poly_order+1+numcross,numpatterns); solutionVector=zeros(neigh*poly_order+1+... numcross,numchannels,numpatterns); % Loop over different Patterns pattern=0; for pati=1:1:numpatterns/2, for patj=1:1:numpatterns/2, pattern=pattern+1; % Loop over the neighborhood m=0; for i=1:1:sneigh, for j=1:1:sneigh, m=m+1; indi=i+pati-1; indj=j(luò)+patj-1; ParameterData(,m)=window_weights(i,j,pattern)*... double(reshape(imgLDR... (indi:2:rl-(sneigh+1-indi),indj:2:cl-(sneigh+1-indj)),k,1)); end end % Normalize by energy energy(,1)=sqrt(sum(ParameterData(,1:1:neigh).^2,2)); avg_energy=mean(energy); for m=1:1:neigh, ParameterData(,m)=... (ParameterData(,m)-avg_energy) ./ energy; end % Loop over the Polynomial Order for order=1:1:poly_order-1, ParameterData(,neigh*order+1:1:neigh*(order+1))=... ParameterData(,(order-1)*neigh+1:1:neigh*order).*... ParameterData(,1:1:neigh);end % Loop over each color channel for channel=1:1:numchannels, HDR_Training_Data(,channel)=(double(reshape(imgHDR... (pati+fsneigh:2:rh-(csneigh+1-pati),... patj+fsneigh:2:ch-(csneigh+1-patj),channel),... k,l))-avg_energy)./energy; end % Set up the regression matrix theMatrix(,,pattern)=ParameterData′* ParameterData; for channel=1:1:numchannels, solutionVector(,channel,pattern)=... ParameterData′*HDR_Training_Data(,channel); end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% RECONSTRUCTING HIGH QUALITY DATA FROM %% %% LOW QUALITY TEST DATA%% %% LOW QUALITY DATA S-BIT SVC IMAGE %% %% HIGH QUALITY DATA HIGH QUALITY COLOR %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Load Initialization File load initfile; % Load the computed Coefficients File load(coeffsfile); % File containing the list of low quality images fid_test=fopen(testfile); testcount=0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TESTING PHASE%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do until file ends while 1 filename=fgetl(fid_test); if ~isstr(filename),break,end % Read in the test HDR image [imgHDR_test,mapH]=imread(filename); [r,c,m]=size(imgHDR_test); % figure,imshow(imgHDR_test); % Convert to SVCimgSVC_test=img2svc(imgHDR_test); % Apply coeffs to the image imgComputed=ApplyCoeffs(coeffs,imgSVC_test,poly_order,... numpatterns,neigh,window_weight); % Output Image imwrite(uint8(imgComputed),... strcat(′E\matlabrll\svc\output\′,filename),′bmp′); clear img*; testcount=testcount+1 end clear all; pack; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% RECONSTRUCT HIGH QUALITY DATA BY APPLYING%% %% COEFFICIENTS TO LOW QUALITY DATA%% %%LOW QUALITY DATA8-BIT SVC %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgHDR]=ApplyCoeffs(coeffs,... imgLDR,poly_order,numpatterns,neigh,window_weights) % Some Initializations [rl,cl,nc]=size(imgLDR); numchannels=3; imgHDR=zeros(rl,cl,numchannels); sneigh=sqrt(neigh); fsneigh=floor(sneigh/2); csneigh=ceil(sneigh/2); % Number of cross terms %numcross=prod(size(nchoosek((1:1:neigh),2)))/2; numcross=0; % Number of Data Points k=floor((rl-(sneigh-1))/2)*floor((cl-(sneigh-1))/2); % Initialize data structures ParameterData=zeros(k,neigh*poly_order+1+numcross); ParameterData(,poly_order*neigh+1+numcross)=ones(k,1); % Loop over all types of local patterns pattern=0; for pati=1:1:sqrt(numpatterns), for patj=1:1:sqrt(numpatterns), pattern=pattern+1; m=0;for i=1:1:sneigh, for j=1:1:sneigh, m=m+1; indi=i+pati-1; indj=j(luò)+patj-1; ParameterData(,m)=window_weights(i,j,pattern)*... double(reshape(imgLDR... (indi:2:rl-(sneigh+1-indi),indj:2:cl-(sneigh+1- indj)),k,1)); end end % Normalize by energy energy(,1)=sqrt(sum(ParameterData(,1:1:neigh).^2,2)); avg_energy=mean(energy); for m=1:1:neigh, ParameterData(,m)=... (ParameterData(,m)-avg_energy) ./ energy; end % Loop over the Polynomial Order for order=1:1:poly_order-1, ParameterData(,neigh*order+1:1:neigh*(order+1))=... ParameterData(,(order-1)*neigh+1:1:neigh*order).*... ParameterData(,1:1:neigh); end % Loop over each color channel for channel=1:1:numchannels, HDR_Data=(energy.*... (ParameterData*coeffs(,channel,pattern)))+avg_energy; imgHDR(pati+fsneigh:2:rl-(csneigh+1-pati),... patj+fsneigh:2:cl-(csneigh+1-patj),channel)=... reshape(HDR_Data,floor((rl-(sneigh-1))/2),... floor((cl-(sneigh-1))/2)); end end end]]></pre>
SVE代碼<pre listing-type="program-listing"><![CDATA[ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% SPATIALLY VARYING EXPOSURES%% %% RUN ALL PROCESSES ONESHOT%% %%MATLAB VERSION 5.31 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% AuthorSrinivasa G.Narasimhan %% %% PIProfessor Shree K.Nayar %% %% LaboratoryColumbia Automated Vision Environment%% %% DepartmentComputer Science %% %% UniversityColumbia University,NY,10027 %% %% Date June 2000%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Initialization Routine init % Memory Cleanup and Packing clean; pack; % Training Code training % Memory Cleanup and Packing clean; pack; % Reconstructing/Testing Code testing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% CLEANUP MEMORY %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close all; clear all; pack; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% PARAMETER INITIALIZATION CODE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Number of Patterns numpatterns=4; % Number of Color Channels numchannels=1; % Order of Polynomial poly_order=3;% Pattern Neighborhood Size neigh=5; neigh=neigh*neigh; % Number of cross terms % numcross=prod(size(nchoosek((1:1:neigh),2)))/2; numcross=0; % SVE Exposures e1=1.0/2.0; e2=1.0/8.0; e3=1.0/32.0; e4=1.0/128.0; % Number of overall exposures numexp=8; expo=(1.0,0.5,0.7,0.3,1.5,2.0,3.0,0.125]′; % Compute Window Weights % window_weight=weights(neigh,numpatterns); window_weight=ones(sqrt(neigh),sqrt(neigh)); % Initialize Input/Output File names trainfile=′train′; testfile=′test′; % Initialize Filenames to save Regression Data coeffsfile=′Coeffs.mat′; matfile=′RegressionMatrix.mat′; vecfile=′RegressionVector.mat′; % Save Initialization Parameters save initfile *; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TRAINING USING HIGH QUALITY DATA %% %% HIGH QUALITY DATA HIGH DYNAMIC RANGE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Load Initializations load initfile; % Data Structure Initialization initialMatrix=zeros(neigh*poly_order+1,neigh*poly_order+1,numpatterns); initialVector=zeros(neigh*poly_order+1,numpatterns); coeffs=zeros(neigh*poly_order+1,numpatterns); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TRAINING PHASE%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% traincount=0; fid_train=fopen(trainfile);% Do until file ends while 1 filename=fgetl(fid_train); if ~isstr(filename),break,end % Read in the train HDR image [imgHDR_train,mapH]=imread(filename); [r,c,m]=size(imgHDR_train); if(isrgb(imgHDR_train)) imgHDR_train=rgb2gray(imgHDR_train); end imgOriginal=double(imgHDR_train); for expos=1:1:numexp, for pati=1:1:sqrt(numpatterns), for patj=1:1:sqrt(numpatterns), clear imgHDR_train; imgHDR_train=double(uint16(imgOriginal(pati:1:r,patj:1:c)... *expo(expos,1))); % Convert to SVE imgSVE_train=img2sve(imgHDR_train,e1,e2,e3,e4); % Convert HDR to LDR imgLDR_train=HDR2LDR(imgSVE_train); % Train using the image [updatedMatrix,updatedVector]=... LearnCoeffs(imgLDR_train,imgHDR_train,... poly_order,numpatterns,neigh,window_weight); % For Normal Covariance initialMatrix=initialMatrix+updatedMatrix; initialVector=initialVector+updatedVeetor; traincount=traincount+1 end end end clear img*; end % End Training-While 1 pack; pack;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LEAST SQUARES MINIMIZATION %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Optimize for pattern=1:1:numpatterns, cond(initialMatrix(,,pattern)) rank(initialMatrix(,,pattern)) % Direct Inverse of Normal Eguations coeffs(,pattern)=... initialMatrix(,,pattern)\initialVector(,patte end % Finished Training on the given images strcat(′Finished′,′...Training′) % Save the Regression Data in files save(coeffsfile,′coeffs′); save(matfile,′initialMatrix′); save(vecfile,′initialVector′); % Optimize Memory Usage clear initial*; pack; pack; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% CONVERT FROM HIGH DYNAMIC RANGE %% %% IMAGE TO SVEC IMAGE%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgsve]=img2sve(imgHDR,e1,e2,e3,e4) [r,c]=size(imgHDR); sve_map=ones(r,c); % Generate the SVE map for i=1:2:r-1, for j=1:2:c-1, sve_map(i,j)=1.0/e1; sve_map(i,j+1)=1.0/e2; sve_map(i+1,j)=1.0/e3; sve_map(i+1,j+1)=1.0/e4; end end % Generate the SVE image imgsve=double(imgHDR) ./ double(sve_map); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% UPDATING REGRESSION MATRIX AND VECTOR %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[theMatrix,solutionVector]=... LearnCoeffs(imgLDR,imgHDR,... poly_order,numpatterns,neigh,window_weights) % Some initializations [rl,cl]=size(imgLDR); [rh,ch]=size(imgHDR); sneigh=sqrt(neigh); fsneigh=floor(sneigh/2); csneigh=ceil(sneigh/2); % Number of Data Points k=floor((rl-(sneigh-1))/2)*floor((cl-(sneigh-1))/2); % Initializa Data Structures ParameterData=zeros(k,neigh*poly_order+1); ParameterData(,neigh+poly_order+1)=ones(k,1); HDR_Training_Data=zeros(k,1); % For Normal Eq theMatrix=zeros(neigh*poly_order+1,neigh*poly_order+1,numpatterns); solutionVector=zeros(neigh*poly_order+1,numpatterns); % Loop over different Patterns pattern=0; for pati=1:1:sqrt(numpatterns), for patj=1:1:sqrt(numpatterns), pattern=pattern+1; % Loop over the neighborhood m=0; for i=1:1:sneigh, for j=1:1:sneigh, m=m+1; indi=i+pati-1; indj=j(luò)+patj-1; ParameterData(,m)=window_weights(i,j)*... double(reshape(imgLDR... (indi:2:rl-(sneigh+1-indi),... indj:2:cl-(sneigh+1-indj)),k,1)); end end % Normalize by energy energy(,1)=sqrt(sum(ParameterData(,1:1:neigh).^2,2)); avg_energy=mean(energy); for m=1:1:poly_order*neigh+1, ParameterData(,m)=(ParameterData(,m)-avg_energy) ./ energy; end% Loop over the Polynomial Order for order=1:1:poly_order-1, ParameterData(,neigh*order+1:1:neigh*(order+1))=... ParameterData(,(order-1)*neigh+1:1:neigh*order).*. ParameterData(,1:1:neigh); end % Setup the right side vector HDR_Training_Data=(double(reshape(imgHDR... (pati+fsneigh:2:rh-(csneigh+1-pati),... patj+fsneigh:2:ch-(csneigh+1-patj)),... k,1))-avg_energy) ./ energy; % Set up the regression matrix theMatrix(,,pattern)=(ParameterData′)*(ParameterData); solutionVector(,pattern)=... (ParameterData′)*(HDR_Training_Data); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% RECONSTRUCTING HIGH QUALITY DATA FROM %% %% LOW QUALITY TEST DATA%% %% LOW QUALITY DATA 8-BIT SVE IMAGE %% %% HIGH QUALITY DATA HIGH DYNAMIC RANGE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Load Initialization File load initfile; % Load the computed Coefficients File load(coeffsfile); % File containing the list of low quality images fid_test=fopen(testfile); testcount=0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TESTING PHASE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do until file ends while 1 filename=fgetl(fid_test); if ~isstr(filename),break,end % Read in the test HDR image[imgHDR_test,mapH]=imread(filename); [rt,ct]=size(imgHDR_test); if(isrgb(imgHDR_test)) imgHDR_test=rgb2gray(imgHDR_test); end % Convert to SVE imgSVE_test=img2sve(double(imgHDR_test),e1,e2,e3,e4); % Convert HDR to LDR imgLDR_test=HDR2LDR(imgSVE_test); % Apply coeffs to the image imgComputed=ApplyCoeffs(coeffs,imgLDR_test,poly_order,... numpatterns,neigh,window_weight); % Non-uniformly quantize output image %imgNonUniformQuant=nonUniformQuant... % (uintl6(imgComputed),e1,e2,e3,e4); % Output Image imwrite(uint16(imgComputed),... strcat(′E\matlabrll\sve\output\′,filename),′tif′); %imwrite(uint16(imgNonUniformQuant),... % strcat(″E\matlabrll\sve\output\″,filename),′tif′); clear img*; testcount=testcount+1 end clear all; pack; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% RECONSTRUCT HIGH QUALITY DATA BY APPLYING%% %% COEFFICIENTS TO LOW QUALITY DATA%% %%LOW QUALITY DATA8-BIT SVE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function[imgHDR]=ApplyCoeffs(coeffs,... imgLDR,poly order,numpatterns,neigh,window_weights) % Some Initializations [rl,cl]=size(imgLDR); imgHDR=zeros(rl,cl); sneigh=sqrt(neigh); fsneigh=floor(sneigh/2); csneigh=ceil(sneigh/2); % Number of Data Points k=floor((rl-(sneigh-1))/2)*floor((cl-(sneigh-1))/2);ParameterData=zeros(k,neigh*poly_order+1); ParameterData(,poly_order*neigh+1)=ones(k,l); % Loop over all patterns pattern=0; for pati=1:1:sqrt(numpatterns), for patj=1:1:sqrt(numpatterns), pattern=pattern+1; m=0; for i=1:1:sneigh, for j=1:1:sneigh, m=m+1; indi=i+pati-1; indj=j(luò)+patj-1; ParameterData(,m)=window_weights(i,j)*... double(reshape(imgLDR... (indi:2:rl-(sneigh+1-indi),... indj:2:cl-(sneigh+1-indj)),k,1)); end end % Normalize by energy energy(,1)=sqrt(sum(ParameterData(,1:1:neigh).^2,2)); avg_energy=mean(energy); for m=1:1:poiy_order*neigh+1, ParameterData(,m)=... (ParameterData(,m)-avg_energy) ./ energy; end % Loop over the Polynomial Order for order=1:1:poly_order-1, ParameterData(,neigh*order+1:1:neigh*(order+1))=... ParameterData(,(order-1)*neigh+1:1:neigh*order).*... ParameterData(,1:1:neigh); end HDR_Data=(energy.*... (ParameterData * coeffs(,pattern)))+avg_energy; imgHDR(pati+fsneigh:2:rl-(csneigh+1-pati),... patj+fsneigh:2:cl-(csneigh+1-patj))=... reshape(HDR_Data,floor((rl-(sneigh-1))/2),... floor((cl-(sneigh-1))/2)); end end]]></pre>
權(quán)利要求
1.一種用于得到增強的解析度數(shù)據(jù)的方法,其特征在于包含接收利用按某種局部相異測量樣式排列的多個敏感度特征而產(chǎn)生的第一組數(shù)據(jù);以及使用某個模型來處理該第一組數(shù)據(jù),從而產(chǎn)生第二組數(shù)據(jù),該模型具有用某種學習程序確定的第一個模型參數(shù)。
2.一種如權(quán)利要求1所述的方法,其特征在于其中的多個敏感度特征包含下列之一多個強度敏感度特征;多個波長敏感度特征;多個時間范圍敏感度特征;多個偏振敏感度特征;多個距離敏感度特征;多個溫度敏感度特征;以及多個磁共振信號敏感度特征。
3.一種如權(quán)利要求1所述的方法,其特征在于其中的多個敏感度特征包含多個強度敏感度特征;以及多個波長敏感度特征。
4.一種如權(quán)利要求1所述的方法,其特征在于其中的多個敏感度特征中的至少一個具有對下列之一的測量敏感度依賴電磁信號波長;以及聲學信號波長。
5.一種如權(quán)利要求1所述的方法,其特征在于其中的多個敏感度特征包含第一和第二個敏感度特征,而第一個模型參數(shù)對應(yīng)于第一個敏感度特征,該模型進一步具有對應(yīng)于第二個敏感度特征的第二個模型參數(shù),第一組數(shù)據(jù)包含第一個和第二個數(shù)據(jù)值,該第一個數(shù)據(jù)值利用第一個敏感度特征來測量,該第二個數(shù)據(jù)值利用第二個敏感度特征來測量;并且其中的使用該模型的步驟包含將至少一個多項式函數(shù)應(yīng)用于該第一個和第二個數(shù)據(jù)值,從而產(chǎn)生至少第三個數(shù)據(jù)值,該第三個數(shù)據(jù)值是第二組數(shù)據(jù)的一個成員,第一個模型參數(shù)控制將該至少一個多項式函數(shù)應(yīng)用于第一個數(shù)據(jù)值,而第二個模型參數(shù)控制將該至少一個多項式函數(shù)應(yīng)用于第二個數(shù)據(jù)值。
6.一種如權(quán)利要求5所述的方法,其特征在于其中的至少一個多項式函數(shù)中每一個都具有包含該第一個和第二個模型參數(shù)之一的至少一個系數(shù)。
7.一種如權(quán)利要求6所述的方法,其特征在于其中的第一和第二組數(shù)據(jù)中每一個都包含圖像數(shù)據(jù),第一個敏感度特征包含某個強度敏感度特征,而第二個敏感度特征包含某個波長敏感度特征。
8.一種如權(quán)利要求1所述的方法,其特征在于其中的第一組數(shù)據(jù)是由某種相機的圖像傳感器產(chǎn)生的圖像數(shù)據(jù)。
9.一種如權(quán)利要求8所述的方法,其特征在于其中的相機包含SVE相機、SVC相機、SVEC相機之一。
10.一種用于學習某個模型以用在數(shù)據(jù)解析度增強中的方法,包含一個處理多幅高質(zhì)量圖像的圖像處理步驟,該圖像處理步驟包含將某個模擬的感測器響應(yīng)函數(shù)應(yīng)用于每幅高質(zhì)量圖像,從而產(chǎn)生一組訓練數(shù)據(jù),將某個局部相異的拼圖樣式函數(shù)應(yīng)用于這些訓練數(shù)據(jù),從而產(chǎn)生一組降低了質(zhì)量的數(shù)據(jù),計算這些降低了質(zhì)量的數(shù)據(jù)的一個加權(quán)規(guī)范矩陣,將該加權(quán)規(guī)范矩陣加到一個矩陣和中,計算這些降低了質(zhì)量的數(shù)據(jù)的一個回歸向量,以及將該回歸向量加到一個向量和中;用該矩陣和來確定一個累積規(guī)范矩陣;用該向量和來確定一個累積回歸向量;以及求解一個最少方塊方程以確定一個用于產(chǎn)生增強的解析度數(shù)據(jù)的模型的一個系數(shù)矩陣,該最少方塊方程包含第一邊和第二邊,第一邊包含累積規(guī)范矩陣和系數(shù)矩陣的一個乘積,第二邊包含累積回歸向量,而系數(shù)矩陣包含一個多項式函數(shù)的系數(shù)。
11.一種如權(quán)利要求10所述的方法,其特征在于其中的圖像處理步驟進一步包含在計算加權(quán)規(guī)范矩陣和計算回歸向量的步驟前將這些降低了質(zhì)量的數(shù)據(jù)降低品質(zhì)。
12.一種用于在至少一個維度上感測信號的方法,其特征在于包含獲取包含對第一個信號集的至少一次測量的第一個測量集,該第一個信號集包含來自第一個區(qū)域至少一個維度上的至少一個信號,該第一個測量集基于關(guān)于該第一個信號集的第一和第二個敏感度特征,第一個敏感度特征具有第一種特征類型,而第二個敏感度特征具有第二種特征類型;獲取包含對第二個信號集的至少一次測量的第二個測量集,該第二個信號集包含來自第二個區(qū)域至少一個維度上的至少一個信號,該第二個測量集基于關(guān)于該第二個信號集的第一個敏感度特征,該第二個測量集進一步基于關(guān)于該第二個信號集的第三個敏感度特征,第三個敏感度特征具有第二種特征類型,而該第三個敏感度特征不同于第二個敏感度特征;以及獲取包含對第三個信號集的至少一次測量的第三個測量集,該第三個信號集包含來自第三個區(qū)域至少一個維度上的至少一個信號,該第三個測量集基于關(guān)于該第三個信號集的第四個敏感度特征,第四個敏感度特征具有第一種特征類型,而該第四個敏感度特征不同于第一個敏感度特征。
13.一種如權(quán)利要求12所述的方法,其特征在于其中的至少一個維度包含下列之一一個空間維度;以及一個時間維度。
14.一種如權(quán)利要求12所述的方法,其特征在于其中的第一種和第二種特征類型中的至少一種是對下列之一的某種相應(yīng)敏感度特征依賴信號強度;以及信號波長。
15.一種如權(quán)利要求12所述的方法,其特征在于其中的第一種特征類型是對信號波長的某種敏感度特征依賴,而第二種特征類型是對信號強度的某種敏感度特征依賴。
16.一種如權(quán)利要求15所述的方法,其特征在于其中的第一種敏感度特征對具有在大約綠色波長范圍以外的波長的電磁輻射有降低了的敏感度。
17.一種如權(quán)利要求16所述的方法,其特征在于其中的第四種敏感度特征對具有在下列之一以外的波長的電磁輻射有降低了的敏感度大約紅色波長范圍;以及大約藍色波長范圍。
18.一種如權(quán)利要求17所述的方法,其特征在于進一步包含使用第一、第二和第三個測量集來形成某個場景的一幅圖像,該場景包含第一、第二和第三個區(qū)域。
19.一種用于在至少一個維度上測量信號的方法,其特征在于包含獲取包含對第一個信號集的至少一次測量的第一個測量集,該第一個信號集包含來自第一個區(qū)域至少一個維度上的至少一個信號,該第一個測量集具有關(guān)于該第一個信號集的第一、第二和第三個敏感度特征,第一個敏感度特征具有第一種特征類型,第二個敏感度特征具有第二種特征類型,而第三個敏感度特征具有第三種特征類型;以及獲取包含對第二個信號集的至少一次測量的第二個測量集,該第二個信號集包含來自第二個區(qū)域至少一個維度上的至少一個信號,該第二個測量集具有關(guān)于該第二個信號集的第一個敏感度特征,該第二個測量集進一步具有關(guān)于該第二個信號集的第四和第五個敏感度特征,第四個敏感度特征具有第二種特征類型,第五個敏感度特征具有第三種特征類型,該第四個敏感度特征不同于第二個敏感度特征,而該第五個敏感度特征不同于第三個敏感度特征。
20.一種如權(quán)利要求19所述的方法,其特征在于其中的至少一個維度包含下列之一一個空間維度;以及一個時間維度。
21.一種如權(quán)利要求19所述的方法,其特征在于其中的第一種、第二種和第三種特征類型中的至少一種是對下列之一的某種相應(yīng)敏感度特征依賴信號強度;以及信號波長。
22.一種如權(quán)利要求19所述的方法,其特征在于其中的第一種特征類型是對信號波長的某種敏感度特征依賴,而第二種和第三種特征類型中的至少一種是對信號強度的敏感度特征依賴。
23.一種如權(quán)利要求22所述的方法,其特征在于其中的第一種敏感度特征對具有在大約綠色波長范圍以外的波長的電磁輻射有降低了的敏感度。
24.一種如權(quán)利要求23所述的方法,其特征在于進一步包含使用第一和第二個測量集來形成某個場景的一幅圖像,該場景包含第一和第二個區(qū)域。
25.一種用于得到增強的解析度數(shù)據(jù)的設(shè)備,其特征在于包含數(shù)據(jù)生成器,用于利用按某種局部相異測量樣式排列的多個敏感度特征而產(chǎn)生的第一組數(shù)據(jù);以及模型處理器,用于處理該第一組數(shù)據(jù),以產(chǎn)生第二組數(shù)據(jù),該模型處理器具有用某種學習程序確定的第一個模型參數(shù)。
26.一種如權(quán)利要求25所述的設(shè)備,其特征在于其中的多個敏感度特征包含下列之一多個強度敏感度特征;多個波長敏感度特征;多個時間范圍敏感度特征;多個偏振敏感度特征;多個距離敏感度特征;多個溫度敏感度特征;以及多個磁共振信號敏感度特征。
27.一種如權(quán)利要求25所述的設(shè)備,其特征在于其中的多個敏感度特征包含多個強度敏感度特征;以及多個波長敏感度特征。
28.一種如權(quán)利要求25所述的設(shè)備,其特征在于其中的多個敏感度特征中的至少一個具有對下列之一的測量敏感度依賴電磁信號波長;以及聲學信號波長。
29.一種如權(quán)利要求25所述的設(shè)備,其特征在于其中的多個敏感度特征包含第一和第二個敏感度特征,而第一個模型參數(shù)對應(yīng)于第一個敏感度特征,模型處理器進一步具有對應(yīng)于第二個敏感度特征的第二個模型參數(shù),第一組數(shù)據(jù)包含第一個和第二個數(shù)據(jù)值,數(shù)據(jù)生成器利用第一個敏感度特征來產(chǎn)生第一個數(shù)據(jù)值,數(shù)據(jù)生成器利用第二個敏感度特征來產(chǎn)生第二個數(shù)據(jù)值;并且其中的模型處理器將至少一個多項式函數(shù)應(yīng)用于該第一個和第二個數(shù)據(jù)值,從而產(chǎn)生至少第三個數(shù)據(jù)值,該第三個數(shù)據(jù)值是第二組數(shù)據(jù)的一個成員,第一個模型參數(shù)控制將該至少一個多項式函數(shù)應(yīng)用于第一個數(shù)據(jù)值,而第二個模型參數(shù)控制將該至少一個多項式函數(shù)應(yīng)用于第二個數(shù)據(jù)值。
30.一種如權(quán)利要求29所述的設(shè)備,其特征在于其中的至少一個多項式函數(shù)中每一個都具有包含該第一個和第二個模型參數(shù)之一的至少一個系數(shù)。
31.一種如權(quán)利要求30所述的設(shè)備,其特征在于其中的第一和第二組數(shù)據(jù)中每一個都包含圖像數(shù)據(jù),第一個敏感度特征包含某個強度敏感度特征,而第二個敏感度特征包含某個波長敏感度特征。
32.一種如權(quán)利要求25所述的設(shè)備,其特征在于其中的數(shù)據(jù)生成器包含某種相機的圖像傳感器。
33.一種如權(quán)利要求32所述的設(shè)備,其特征在于其中的相機包含SVE相機、SVC相機、SVEC相機之一。
34.一種用于學習某個模型以用在數(shù)據(jù)解析度增強中的設(shè)備,其特征在于包含第一個處理器,用于處理多幅高質(zhì)量圖像,包含第二個處理器,用于將某個模擬的感測器響應(yīng)函數(shù)應(yīng)用于多幅高質(zhì)量圖像中的每一幅,從而產(chǎn)生一組訓練數(shù)據(jù),第三個處理器,用于將某個局部相異的拼圖樣式函數(shù)應(yīng)用于這些訓練數(shù)據(jù),從而產(chǎn)生一組降低了質(zhì)量的數(shù)據(jù),第四個處理器,用于計算這些降低了質(zhì)量的數(shù)據(jù)的一個加權(quán)規(guī)范矩陣,第五個處理器,用于將該加權(quán)規(guī)范矩陣加到一個矩陣和中,第六個處理器,用于計算這些降低了質(zhì)量的數(shù)據(jù)的一個回歸向量,以及第七個處理器,用于將該回歸向量加到一個向量和中;第八個處理器,用于用該矩陣和來確定一個累積規(guī)范矩陣;第九個處理器,用于用該向量和來確定一個累積回歸向量;以及第十個處理器,用于求解一個最少方塊方程以確定一個用于產(chǎn)生增強的解析度數(shù)據(jù)的模型的一個系數(shù)矩陣,該最少方塊方程包含第一邊和第二邊,第一邊包含累積規(guī)范矩陣和系數(shù)矩陣的一個乘積,第二邊包含累積回歸向量,而系數(shù)矩陣包含一個多項式函數(shù)的系數(shù)。
35.一種如權(quán)利要求34所述的設(shè)備,其特征在于其中的第一個處理器進一步包含第十一個處理器,用于將這些降低了質(zhì)量的數(shù)據(jù)降低品質(zhì)。
36.一種信號感測設(shè)備,其特征在于包含第一個感測器組,包含運行來接收第一個信號集的至少一個感測器,該第一個信號集包含來自第一個區(qū)域至少一個維度上的至少一個信號,該第一個感測器組具有關(guān)于該第一個信號集的第一和第二個敏感度特征,第一個敏感度特征具有第一種特征類型,而第二個敏感度特征具有第二種特征類型;第二個感測器組,包含運行來接收第二個信號集的至少一個感測器,該第二個信號集包含來自第二個區(qū)域至少一個維度上的至少一個信號,該第二個感測器組具有關(guān)于該第二個信號集的第一個敏感度特征,該第二個感測器組進一步具有關(guān)于該第二個信號集的第三個敏感度特征,第三個敏感度特征具有第二種特征類型,而該第三個敏感度特征不同于第二個敏感度特征;以及第三個感測器組,包含運行來接收第三個信號集的至少一個感測器,該第三個信號集包含來自第三個區(qū)域至少一個維度上的至少一個信號,該第三個感測器組具有關(guān)于該第三個信號集的第四個敏感度特征,第四個敏感度特征具有第一種特征類型,而該第四個敏感度特征不同于第一個敏感度特征。
37.一種如權(quán)利要求36所述的設(shè)備,其特征在于其中的至少一個維度包含下列之一一個空間維度;以及一個時間維度。
38.一種如權(quán)利要求36所述的設(shè)備,其特征在于其中的第一種和第二種特征類型中的至少一種是對下列之一的相應(yīng)敏感度特征依賴信號強度;以及信號波長。
39.一種如權(quán)利要求36所述的設(shè)備,其特征在于其中的第一種特征類型是對信號波長的某種敏感度特征依賴,而第二種特征類型是對信號強度的某種敏感度特征依賴。
40.一種如權(quán)利要求39所述的設(shè)備,其特征在于其中的第一種敏感度特征對具有在大約綠色波長范圍以外的波長的電磁輻射有降低了的敏感度。
41.一種如權(quán)利要求40所述的設(shè)備,其特征在于其中的第四種敏感度特征對具有在下列之一以外的波長的電磁輻射有降低了的敏感度大約紅色波長范圍;以及大約藍色波長范圍。
42.一種如權(quán)利要求41所述的設(shè)備,其特征在于進一步包含一個處理器,用于使用第一、第二和第三個測量集來形成某個場景的一幅圖像,該場景包含第一、第二和第三個區(qū)域。
43.一種信號感測設(shè)備,其特征在于包含第一個感測器組,包含運行來接收第一個信號集的至少一個感測器,該第一個信號集包含來自第一個區(qū)域至少一個維度上的至少一個信號,該第一個感測器組具有關(guān)于該第一個信號集的第一、第二和第三個敏感度特征,第一個敏感度特征具有第一種特征類型,第二個敏感度特征具有第二種特征類型,而第三個敏感度特征具有第三種特征類型;以及第二個感測器組,包含運行來接收第二個信號集的至少一個感測器,該第二個信號集包含來自第二個區(qū)域至少一個維度上的至少一個信號,該第二個感測器組具有關(guān)于該第二個信號集的第一個敏感度特征,該第二個感測器組進一步具有關(guān)于該第二個信號集的第四和第五個敏感度特征,第四個敏感度特征具有第二種特征類型,第五個敏感度特征具有第三種特征類型,該第四個敏感度特征不同于第二個敏感度特征,而該第五個敏感度特征不同于第三個敏感度特征。
44.一種如權(quán)利要求43所述的設(shè)備,其特征在于其中的至少一個維度包含下列至少一個一個空間維度;以及一個時間維度。
45.一種如權(quán)利要求43所述的設(shè)備,其特征在于其中的第一種、第二種和第三種特征類型中的至少一種是對下列之一的相應(yīng)敏感度特征依賴信號強度;以及信號波長。
46.一種如權(quán)利要求43所述的設(shè)備,其特征在于其中的第一種特征類型是對信號波長的某種敏感度特征依賴,而第二種和第三種特征類型中的至少一種是對信號強度的某種相應(yīng)敏感度特征依賴。
47.一種如權(quán)利要求46所述的設(shè)備,其特征在于其中的第一種敏感度特征對具有在大約綠色波長范圍以外的波長的電磁輻射有降低了的敏感度。
48.一種如權(quán)利要求47所述的設(shè)備,其特征在于進一步包含一個處理器,用于使用第一和第二個測量集來形成某個場景的一幅圖像,該場景包含第一和第二個區(qū)域。
49.一種計算機可讀取媒介,其特征在于具有一組可運行來指示處理器執(zhí)行下列步驟的指令接收利用按某種局部相異測量樣式排列的多個敏感度特征而產(chǎn)生的第一組數(shù)據(jù);以及使用某個模型來處理該第一組數(shù)據(jù),從而產(chǎn)生第二組數(shù)據(jù),該模型具有用某種學習程序確定的第一個模型參數(shù)。
50.一種如權(quán)利要求49所述的計算機可讀取媒介,其特征在于其中的多個敏感度特征包含至少下列之一多個強度敏感度特征;多個波長敏感度特征;多個時間范圍敏感度特征;多個偏振敏感度特征;多個距離敏感度特征;多個溫度敏感度特征;以及多個磁共振信號敏感度特征。
51.一種如權(quán)利要求49所述的計算機可讀取媒介,其特征在于其中的多個敏感度特征包含多個強度敏感度特征;以及多個波長敏感度特征。
52.一種如權(quán)利要求49所述的計算機可讀取媒介,其特征在于其中的多個敏感度特征中的至少一個具有對下列之一的測量敏感度依賴電磁信號波長;以及聲學信號波長。
53.一種如權(quán)利要求49所述的計算機可讀取媒介,其特征在于其中的多個敏感度特征包含第一和第二個敏感度特征,而第一個模型參數(shù)對應(yīng)于第一個敏感度特征,該模型進一步具有對應(yīng)于第二個敏感度特征的第二個模型參數(shù),第一組數(shù)據(jù)包含第一個和第二個數(shù)據(jù)值,該第一個數(shù)據(jù)值利用第一個敏感度特征來測量,該第二個數(shù)據(jù)值利用第二個敏感度特征來測量;并且其中的使用該模型的步驟包含將至少一個多項式函數(shù)應(yīng)用于該第一個和第二個數(shù)據(jù)值,從而產(chǎn)生至少第三個數(shù)據(jù)值,該第三個數(shù)據(jù)值是第二組數(shù)據(jù)的一個成員,第一個模型參數(shù)控制將該至少一個多項式函數(shù)應(yīng)用于第一個數(shù)據(jù)值,而第二個模型參數(shù)控制將該至少一個多項式函數(shù)應(yīng)用于第二個數(shù)據(jù)值。
54.一種如權(quán)利要求53所述的計算機可讀取媒介,其特征在于其中的至少一個多項式函數(shù)中每一個都具有包含該第一個和第二個模型參數(shù)之一的至少一個系數(shù)。
55.一種如權(quán)利要求54所述的計算機可讀取媒介,其特征在于其中的第一和第二組數(shù)據(jù)中每一個都包含圖像數(shù)據(jù),第一個敏感度特征包含某個強度敏感度特征,而第二個敏感度特征包含某個波長敏感度特征。
56.一種如權(quán)利要求49所述的計算機可讀取媒介,其特征在于其中的第一組數(shù)據(jù)是由某種相機的圖像傳感器產(chǎn)生的圖像數(shù)據(jù)。
57.一種如權(quán)利要求56所述的計算機可讀取媒介,其特征在于其中的相機包含SVE相機、SVC相機、SVEC相機之一。
58.一種計算機可讀取媒介,其特征在于具有一組可運行來指示處理器執(zhí)行下列步驟的指令一個處理多幅高質(zhì)量圖像的圖像處理步驟,該圖像處理步驟包含將某個模擬的感測器響應(yīng)函數(shù)應(yīng)用于每幅高質(zhì)量圖像,從而產(chǎn)生一組訓練數(shù)據(jù),將某個局部相異的拼圖樣式函數(shù)應(yīng)用于這些訓練數(shù)據(jù),從而產(chǎn)生一組降低了質(zhì)量的數(shù)據(jù),計算這些降低了質(zhì)量的數(shù)據(jù)的一個加權(quán)規(guī)范矩陣,將該加權(quán)規(guī)范矩陣加到一個矩陣和中,計算這些降低了質(zhì)量的數(shù)據(jù)的一個回歸向量,以及將該回歸向量加到一個向量和中;用該矩陣和來確定一個累積規(guī)范矩陣;用該向量和來確定一個累積回歸向量;以及求解一個最少方塊方程以確定一個用于產(chǎn)生增強的解析度數(shù)據(jù)的模型的一個系數(shù)矩陣,該最少方塊方程包含第一邊和第二邊,第一邊包含累積規(guī)范矩陣和系數(shù)矩陣的一個乘積,第二邊包含累積回歸向量,而系數(shù)矩陣包含一個多項式函數(shù)的系數(shù)。
59.一種如權(quán)利要求58所述的計算機可讀取媒介,其特征在于其中的圖像處理步驟進一步包含在計算加權(quán)規(guī)范矩陣和計算回歸向量的步驟前將這些降低了質(zhì)量的數(shù)據(jù)降低品質(zhì)。
60.一種計算機可讀取媒介,其特征在于具有一組可運行來指示處理器執(zhí)行下列步驟的指令獲取包含對第一個信號集的至少一次測量的第一個測量集,該第一個信號集包含來自第一個區(qū)域至少一個維度上的至少一個信號,該第一個測量集基于關(guān)于該第一個信號集的第一和第二個敏感度特征,第一個敏感度特征具有第一種特征類型,而第二個敏感度特征具有第二種特征類型;獲取包含對第二個信號集的至少一次測量的第二個測量集,該第二個信號集包含來自第二個區(qū)域至少一個維度上的至少一個信號,該第二個測量集基于關(guān)于該第二個信號集的第一個敏感度特征,該第二個測量集進一步基于關(guān)于該第二個信號集的第三個敏感度特征,第三個敏感度特征具有第二種特征類型,而該第三個敏感度特征不同于第二個敏感度特征;以及獲取包含對第三個信號集的至少一次測量的第三個測量集,該第三個信號集包含來自第三個區(qū)域至少一個維度上的至少一個信號,該第三個測量集基于關(guān)于該第三個信號集的第四個敏感度特征,第四個敏感度特征具有第一種特征類型,而該第四個敏感度特征不同于第一個敏感度特征。
61.一種如權(quán)利要求60所述的計算機可讀取媒介,其特征在于其中的至少一個維度包含下列之一一個空間維度;以及一個時間維度。
62.一種如權(quán)利要求60所述的計算機可讀取媒介,其特征在于其中的第一種和第二種特征類型中的至少一種是對下列之一的相應(yīng)敏感度特征依賴信號強度;以及信號波長。
63.一種如權(quán)利要求60所述的計算機可讀取媒介,其特征在于其中的第一種特征類型是對信號波長的某種敏感度特征依賴,而第二種特征類型是對信號強度的某種敏感度特征依賴。
64.一種如權(quán)利要求63所述的計算機可讀取媒介,其特征在于其中的第一種敏感度特征對具有在大約綠色波長范圍以外的波長的電磁輻射有降低了的敏感度。
65.一種如權(quán)利要求64所述的計算機可讀取媒介,其特征在于其中的第四種敏感度特征對具有在下列之一以外的波長的電磁輻射有降低了的敏感度大約紅色波長范圍;以及大約藍色波長范圍。
66.一種如權(quán)利要求65所述的計算機可讀取媒介,其特征在于該組指令進一步運行來指示處理器使用第一、第二和第三個測量集來形成某個場景的一幅圖像,該場景包含第一、第二和第三個區(qū)域。
67.一種如權(quán)利要求60所述的計算機可讀取媒介,其特征在于其中的處理器和計算機可讀取媒介布置在某種具有用于獲得第一、第二和第三個測量集的圖像傳感器的相機內(nèi)。
68.一種如權(quán)利要求67所述的計算機可讀取媒介,其特征在于其中的相機包含SVE相機、SVC相機、SVEC相機之一。
69.一種計算機可讀取媒介,其特征在于具有一組可運行來指示處理器執(zhí)行下列步驟的指令獲取包含對第一個信號集的至少一次測量的第一個測量集,該第一個信號集包含來自第一個區(qū)域至少一個維度上的至少一個信號,該第一個測量集具有關(guān)于該第一個信號集的第一、第二和第三個敏感度特征,第一個敏感度特征具有第一種特征類型,第二個敏感度特征具有第二種特征類型,而第三個敏感度特征具有第三種特征類型;以及獲取包含對第二個信號集的至少一次測量的第二個測量集,該第二個信號集包含來自第二個區(qū)域至少一個維度上的至少一個信號,該第二個測量集具有關(guān)于該第二個信號集的第一個敏感度特征,該第二個測量集進一步具有關(guān)于該第二個信號集的第四和第五個敏感度特征,第四個敏感度特征具有第二種特征類型,第五個敏感度特征具有第三種特征類型,該第四個敏感度特征不同于第二個敏感度特征,而該第五個敏感度特征不同于第三個敏感度特征。
70.一種如權(quán)利要求69所述的計算機可讀取媒介,其特征在于其中的至少一個維度包含下列之一一個空間維度;以及一個時間維度。
71.一種如權(quán)利要求69所述的計算機可讀取媒介,其特征在于其中的第一種、第二種和第三種特征類型中的至少一種是對下列之一的某種相應(yīng)敏感度特征依賴信號強度;以及信號波長。
72.一種如權(quán)利要求69所述的計算機可讀取媒介,其特征在于其中的第一種特征類型是對信號波長的某種敏感度特征依賴,而第二種和第三種特征類型中的至少一種是對信號強度的某種相應(yīng)敏感度特征依賴。
73.一種如權(quán)利要求72所述的計算機可讀取媒介,其特征在于其中的第一種敏感度特征對具有在大約綠色波長范圍以外的波長的電磁輻射有降低了的敏感度。
74.一種如權(quán)利要求73所述的方法,其特征在于該組指令進一步運行來指示處理器使用第一和第二個測量集來形成某個場景的一幅圖像,該場景包含第一和第二個區(qū)域。
75.一種如權(quán)利要求69所述的計算機可讀取媒介,其特征在于其中的處理器和計算機可讀取媒介布置在某種具有用于獲得第一和第二個測量集的圖像傳感器的相機內(nèi)。
76.一種如權(quán)利要求75所述的計算機可讀取媒介,其特征在于其中的相機包含SVE相機、SVC相機、SVEC相機之一。
全文摘要
提供了一種用于增強多種數(shù)據(jù)(如圖像數(shù)據(jù))的解析度的算法。所增強的數(shù)據(jù)可以是用某種局部相異敏感度樣式(如Bayer型彩色拼圖、曝光度水平拼圖或彩色和曝光度水平組合拼圖)采樣的數(shù)據(jù)。解析度增強算法使用一幅樣本圖像的高解析度與低解析度版本來“學習”(即優(yōu)化)一組從低解析度數(shù)據(jù)到高解析度數(shù)據(jù)的映射的參數(shù)。該映射可以由一個多項式模型構(gòu)成。對多幅樣本圖像重復該學習程序。而后可以用所學習的映射來處理其它低解析度圖像,以獲得相應(yīng)的較高解析度圖像。所學習的映射提供了優(yōu)于常規(guī)插值技術(shù)的解析度增強。
文檔編號H04N5/232GK1520580SQ01815104
公開日2004年8月11日 申請日期2001年7月6日 優(yōu)先權(quán)日2000年7月6日
發(fā)明者S·K·納亞爾, S·G·納拉希姆漢, S K 納亞爾, 納拉希姆漢 申請人:紐約市哥倫比亞大學托管會