­

淺談Retinex

  • 2019 年 11 月 7 日
  • 筆記

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

 

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

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

 

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

1、(X0,Y0)點三通道值的差異,它會致使色偏。

2、(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進行了改動。

 

步驟大致分為三步:

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

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

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

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

附上一些圖來說明效果

 

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

 

 未保真計算,可以看出其色彩恆常性的體現不好

 

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

 

 

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

 

 

未保真計算

 

 保真計算

 

 原圖,來着網絡

 

 未保真,可見光照為紅光

 

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

 

 

 

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

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

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

聯繫:734345993@qq.com