淺談Retinex

Retinex是上個世紀七十年代由Land提出的色彩理論。我認爲其核心思想基於倆點算法

 

(1)在顏色感知時,人眼對局部相對光強敏感程度要優於絕對光強。網絡

(2)反射份量R(x,y)儲存有無光源物體的真實模樣,一幅圖像對其光照份量L(x,y)的估計越準確,求得的R(x,y)也就越準確。函數

 

     先來講明第一點,人對顏色的認知並非基於絕對光強,反應在圖像上時能夠理解成,人眼對一像素點(X0,Y0)的顏色的認知不是基於其RGB三通道絕對值大小,而是與倆個因素相關。blog

一、(X0,Y0)點三通道值的差別,它會導致色偏。圖片

二、(X0,Y0)一個鄰域內其他像素的RGB值,它會造成顏色的感受,RGB三通道絕對值主導亮度感受。自動化

 

     我目前沒法定量定性分析他們的關係,由於它涉及感受這種玄妙的東西,可是咱們會用就行。基礎

 

     再說明第二點,在給定場景的時候,若是場景內無光源,那麼R(x,y)應該是一常量。不管光照L(x,y)如何改變,R(x,y)該不變。也就是說,不管我光照是什麼顏色什麼強度,我都應該能將其矯正到標準光照狀況下。這也是色彩恆常性的體現。技巧

 

     那麼問題來了,基於上面推理該怎麼辦去矯正多光照圖像。反射

 

     關於Retinex的算法的發展,從最初的隨機路徑法,到McCann迭代法,到變分法再到中心環繞的。關於他們的說明在網上一找一大堆,這裏我不在贅述。自適應

     讓咱們從single-scale-Retinex開始,在網上能找到的SSR算法,說實話基本效果不好,根本體現不出其色彩恆常算法的特色。其實若是你查閱過大量資料後,你會發現NASA的原文對SSR說明就不清不楚,網上代碼對其的實現能夠說是一種無參考復現,你甚至會發現他們對環繞函數地描述都不一致。SSR說到底就是認爲光照局部不變,以一個鄰域的加權值來估計光照。

    通常SSR會選擇高斯函數或者類高斯函數,你能夠直接用matlab中的fspesical函數,也能夠本身寫一個,其實問題不大。通常剛遇到SSR最讓人困惑的就是如何明晰何爲尺度,當你多看幾個SSR的實現,就會發現會有愈來愈多的疑惑。如何肯定尺度,高斯函數的sigma值和尺度之間到底有和數量關係,最後在對數域是否須要返回到指數域,需不須要歸一化,最後成像出現色偏問題該怎麼解決。這些細節的處理會顯著影響圖片質量,特別是視覺效果。

 

     在SSR的基礎上發展起來的MSR和MSRCR,但說實話,由於他們的實現是基於SSR的,因此若是你SSR都沒有寫好,那麼他們的實現必定也不會盡人意。

     在MSR的基礎上,爲了實現真正的色彩恆常計算,我對MSR進行了改動。

 

步驟大體分爲三步:

一、使用導向濾波代替高斯濾波,與傳統MSR算法不一樣,這裏不分通道處理而是三通道合一來估計光照。這是基於一個認知,天然界中的光是連續,而RGB三通道只是爲了方便屏幕顯示,用三通道處理與造成割裂。

二、對估計出來的光照進行自適應調整後,計算出對數域中的反射量r(x,y)

三、對r(x,y)進行調整,爲了適應不一樣的環境,我使用了一個一個小技巧實現色彩保真,在算法中可選是否保真,保真的前提是原圖質量足夠好,圖像中元素足夠豐富,若是不知足這倆個前提推算真實顏色的時候就會出嚴重錯誤。至於爲什麼這般,這與Retinex算法實質有關,由於對光照估計的越準確,矯正到標準光源後的質量也就越好。而Retinex對光照的估計是基於空間鄰域的。

注意:2是在對數域實現的,而這與MSR類似

附上一些圖來講明效果

 

 原圖由來着東南大學的一位朋友提供

 

 未保真計算,能夠看出其色彩恆常性的體現很差

 

 進行保真,充分體現色彩恆常性

 

 

 原圖,一樣由東南大學的朋友提供

 

 

未保真計算

 

 保真計算

 

 原圖,來着網絡

 

 未保真,可見光照爲紅光

 

 矯正後,深紅光照被削弱,但圖中可見的光源被放大,同時由於原圖質量不高,導致保真計算後圖像質量目視比不保真低

 

 

 

以上是我對Retinex的粗淺認識。

2019年11月7日於北京航空航天大學

自動化科學與電氣工程學院 符雲鬆

聯繫:734345993@qq.com

相關文章
相關標籤/搜索