使用Zynq-7000 All Programmable SoC實(shí)現圖像傳感器色彩校正
白點(diǎn)算法[2]依據這樣的假設,即圖像中顏色最淺的像素必定是白色或淺灰色。紅色、綠色和藍色通道最大值之間的差值提供的是與光源顏色有關(guān)的信息,校正的作用是進(jìn)行色彩轉換后讓得到的顏色最大值完全相等。但是,要找出白點(diǎn),就需要按亮度值對像素排序。另外可能還需要對排序后的列表進(jìn)行時(shí)空濾波,抑制噪聲偽影,最后將排序結果匯聚成唯一的白色三元色。使用白點(diǎn)法的優(yōu)勢是易于實(shí)現,缺陷則是會(huì )造成巨大的誤差,可能導致原生場(chǎng)景的色彩掉色。另外這種方法的效果還容易被飽和像素削弱。
本文引用地址:http://dyxdggzs.com/article/143329.htm更加先進(jìn)的方法是發(fā)揮色域轉換的優(yōu)勢。這樣色度可以輕易地與色彩飽和度和亮度隔離,將三維色彩校正問(wèn)題降低為一維問(wèn)題。
例如,先進(jìn)行色彩飽和度映射,在YCC、YUV、L*a*b*或LuV色域中建立二維直方圖,然后圍繞直方圖底部周邊建立一個(gè)凸殼。計算出UV或(Cr,Cb)均值,用于校正色彩,讓得到的色彩UV或CbCr直方圖位于YUV、YCC、Luv或Lab域中的中性點(diǎn)或灰度點(diǎn)上。這些方法的優(yōu)勢在于能夠得到更好的色彩表象,而缺陷則在于需要浮點(diǎn)算法才能實(shí)現。
所有上述的方法有一個(gè)共同的缺陷,就是如果曝光設置不當或者場(chǎng)景光照存在極度的動(dòng)態(tài)范圍,就會(huì )產(chǎn)生偽影。例如使用帶原生色調的高亮光源照明,在圖像中產(chǎn)生的飽和像素。典型如火焰位于焦點(diǎn)上的燭光照片,此時(shí)會(huì )導致完全飽和,圖像上出現白色像素。
其它改善白平衡結果的方法
還有一種色彩校正方法就是將前景和背景分離。數碼相機采用的自動(dòng)對焦與矩陣測光相結合的方法,可以把鏡頭中心焦點(diǎn)周邊的像素與靠近邊緣的背景像素在空間上區分開(kāi)來(lái)。這種方法假定拍攝的物體只有幾種主要顏色,而且位于圖像中心的焦點(diǎn)上。遠處的物體靠近邊緣,由灰度世界假設主導。
另一種方法圍繞形狀檢測。面部或皮膚顏色檢測有助于相機識別有預期色調的圖像內容。這樣只需要對有已知和預期的色調的像素進(jìn)行白平衡校正。顏色校正就是將這些像素的顏色調整為貼近預期顏色。這種方法的不足之處就是分割和識別邏輯的成本不菲。大多數商業(yè)應用采用適應圖像內容和拍攝環(huán)境的策略,綜合應用多種方法[2] ?! ?/p>

用于相機校準和色彩校正的ISP
我們的實(shí)現方案采用如圖3所示的典型圖像傳感器流水線(xiàn)技術(shù)。我們采用賽靈思基于可配置邏輯的圖像處理內核來(lái)構建ISP的硬件部分(見(jiàn)藍色方框)。同時(shí),我們將相機校準和白平衡算法設計為運行在其中一個(gè)嵌入式ARM處理器上的C代碼(見(jiàn)粉紅色方框)。該ARM處理器還運行嵌入式Linux,為主機PC提供用戶(hù)界面。
ISP中與白平衡和相機校準有關(guān)的部分是一個(gè)反饋環(huán)路,包括:
● 圖像統計模塊,用于逐幀采集各域的統計數據;
● 嵌入式驅動(dòng)程序和應用軟件,用于逐幀分析統計信息并對色彩校正模塊編程;
● 色彩校正模塊,用于逐像素地執行色彩轉換。
我們將該ISP實(shí)現為Zynq視頻和成像套件(ZVIK)1080x60相機圖像處理參考設計的組成部分。
算法詳解
為校準傳感器的顏色,我們使用現成的顏色觀(guān)察箱(X-Rite Macbeth Judge II)或燈箱。該設備有四個(gè)已知光譜的標準光源,分別用于模擬日光、冷白熒光燈、暖光熒光燈和白熾燈。我們還使用現成的色靶(X-Rite ColorChecker 24 色標準色卡),其色標具有已知的反射特性以及RGB與sRGB預期值。
在開(kāi)始實(shí)現相機校準算法之前,我們首先將色靶放置在燈箱中,與燈箱的灰黑色背景平行。我們將色靶調整到一定位置,讓來(lái)自所有光源的光照盡量均勻。
接下來(lái),在打開(kāi)所有光源的情況下,我們采集由傳感器拍攝的有待校準的圖像,此時(shí)尚未進(jìn)行色彩校正(使用“跳過(guò)”色彩校正設置:將單位矩陣加載至色彩校正矩陣)。
然后使用賽靈思提供的MATLAB腳本協(xié)助補償鏡筒(幾何形狀)透鏡畸變和鏡頭陰影(光強度在角落處下降)帶來(lái)的影響。我們使用MATLAB腳本找出圖像上的控制點(diǎn),然后彎曲圖像,用以對筒形畸變進(jìn)行補償。腳本的其余部分用于根據寄存的ColorChecker色靶背景來(lái)估算水平和垂直方向的光強度下降。
為衰減測量到的噪聲,我們在色標中劃出矩形區域。在這些區域中,我們計算出R、G、B像素數據均值,用RGB三元色表達每個(gè)色靶。帶GUI的MATLAB腳本可幫助找出色標的中心,然后計算出與每個(gè)色標的RGB預期值(Re、Ge、Be)對應的平均RGB三元色。
我們采用模擬退火優(yōu)化法找出色彩校正系數和偏移量。然后使用圖3的色彩校正模塊,將未經(jīng)校正的(R、G、B)三元色轉換為校正的(R’、G’、B’)三元色。
模擬退火算法的作用是求出一個(gè)能夠返回標量的誤差函數的最小值。在下面的討論中,用Rk、Gk、Bk表示測得的色標像素值的子集或超集。用戶(hù)可以自行限制包含在優(yōu)化(子集)中的色標數量,也可多次使用某個(gè)特定的色標,以增大其在優(yōu)化過(guò)程中的相對權重。整數n代表選優(yōu)化的色標數量。如果一次優(yōu)化全部色標,則對X-Rite ColorChecker 24 色標準色卡而言,n則為24。
因為優(yōu)化算法最多只能設置12個(gè)變量(CCM系數和偏移量),一般來(lái)說(shuō)不存在有能夠將所有測量值精確映射到預期色標值的解決方案。不過(guò)該算法的目的是求出誤差函數的最小值,從而在所使用的所有色標上實(shí)現理想的誤差分布。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論