擴展的多曝光圖像合成算法及其在單幅圖像增強中的應用。

  在拉普拉斯金字塔在多圖HDR算法中的應用以及多曝光圖像的融合算法簡介一文中提高的Exposure Fusion算法,是一種非常優秀的多曝光圖片合成算法,對於大部分測試圖都能獲取到較爲滿意的結果,但是也存在着兩個侷限性:

  1、存在着Out-of-range Artifact;

        2、存在着low frequency halo;

  爲了解決這兩個問題,Charles Hessel在2019年發表了一篇名爲《Extended Exposure Fusion》的論文,基本上有效的避免了《Exposure Fusion》的這兩個缺陷,並且以此爲基礎,將Exposure Fusion擴展到了單幅圖像的增強中。

  在IPOL網站中,有對這兩篇文章的詳細資料和在線測試程序,詳見:

  http://www.ipol.im/pub/art/2019/278/      Extended Exposure Fusion

  https://www.ipol.im/pub/art/2019/279/     Simulated Exposure Fusion

  我們不去過多的分析他們的原理,只是大概的描述下論文的細節吧,更爲詳細的可以直接閱讀論文本身。

  一、Extended Exposure Fusion

  這個文章雖然篇幅有十幾頁,但是實際上核心的東西就是一個:無中生有,即我們從原始的圖像數據序列中fu在繼續創造更多的圖像,然後利用Exposure Fusion合成,這些新創造出的圖像相對於原始的圖具有更低的動態範圍,具體的過程爲:

  確定一個參數Beta,有效範圍是[0,1],然後根據Ceil(1.0 / Beta)向上取整得到我們需要重新創建的圖像的數量M,這個Beta我們稱之爲動態範圍。新創建的M個圖像的生產方法如下:

   對於序列中的每一個值,我們計算一個參數:        

                                          

   作爲需要壓縮的動態的範圍的中心,當原始的像素值t在範圍內時,線性映射,即t不變化,當不在此範圍時,按以下公式計算新的t值。

                               

  其中    , 以及 ,這樣就保證像素不在我們設定的動態範圍時,像素值不會斷崖式的裁剪,而是平滑的予以變化,從而使得融合的結果不會太突兀。

  以下時Beta = 0.5/0.34/0.25時對應的重新映射的曲線圖,可以看到隨着Beta的值的變小,新創建的圖像數量M不斷地增加,但是不管如何,所有圖像組合在一起,都覆蓋了原圖的所有的動態範圍(即合併後的映射圖總會有一條45傾斜的直線),而Beta值的含義頁可以從曲線總可以看出就是直線段的長度,即每幅圖動態範圍保持不變的部分。

       Beta = 0.5, M = 2              Beta = 0.34, M = 3                 Beta = 0.25, M = 4

   注意,以上的映射等行爲的公式都是針對歸一化後的圖像數據的,即要將圖像由[0,255]先映射爲[0,1]。

  如果原始圖像序列由N幅圖像,則這樣處理就增加爲了N*M幅圖,後續就是對這N*M幅進行標準的比曝光融合了。因此可以明顯的看出,這個算法的速度要比Exposure Fusion至少慢M倍。

  以下C++代碼簡答的解釋了上述新圖像的生成過程:

   當Beta = 0.5,M = 2時(注意到上述曲線),下述圖像清晰的表達了這個擴展的過程:

     原始的圖像序列只有4幅圖,擴展後的爲8幅圖,而且我們注意到擴展後的圖和源圖沒有一個是相同的,通過組合這新生產的8幅圖,最終得到擴展的融合結果。

  就以上述圖爲例,Beta設置爲0.5,我們金字塔層數都設置爲8,Exposure Fusion和Extended Exposure Fusion的融合效果分別如下所示:

   

          Exposure Fusion                              Extended Exposure Fusion

  我們注意觀察圖中最左側窗戶上部的小方格內,左圖裏該方格里基本是純白色,看不到什麼信息,而右圖則把原始圖input 1裏的有效信息帶入了,增加了信息量。

  在比如下圖,左圖是標準的Exposure Fusion,右圖爲擴展後的,可以看到右側圖檯燈裏以及窗戶外面的地面有着更爲細膩的細節,而左圖基本是純色。

  

  在《Extended Exposure Fusion》還提到了對各圖像權重的一個改進,雖然那個東西有一定作用,但是個人認爲是錦上添花的一些東西吧,實際上也沒有啥大的作用,因此,本人未做具體的研究。

  另外,Extended Exposure Fusion裏還提到了一個叫Robust Normalization的東西,這個確實還是有點用的,他是對曝光融合的圖像簡單的做了一下增強,我們確實也發現普通的融合後圖像不是很鮮豔,而使用Robust Normalization則可以比較爲明顯的改善他,這個過程有點類似於Photoshop的自動色階或自動對比度,但是有別於他們的是他不是對單通道進行統計直方圖,而是低裁剪值所依賴的直方圖由每個像素的最小分量(Min(R/G/B))決定,高裁剪值所依賴的直方圖由每個像素的最大分量決定。

  其他的這篇文章也沒有啥好東西了。 

  二、Simulated Exposure Fusion

  那麼這篇文章的作者和Extended Exposure Fusion其實是一個人,所以他們文章的思路其實是想通的。只不過這篇文章是這對單幅圖像進行的處理。

  那麼很明顯,如果要想借用多曝光融合算法來增強單幅圖像,一個很自然的想法就是在原圖的基礎上使用不同曝光值進行映射(增強或降低對比度),然後融合就可以了,但是這裏就涉及到了幾個問題,第一,如果確定需要的曝光的圖像的數量,二是如何確定每幅圖像的曝光值。

  我們先來看看第二個問題,假定我們已經確定了需要曝光的圖像的數量爲M,那麼首先這樣:

  我們計算出整幅圖像的中間值Median,這個計算很明顯可以用直方圖搞定,至於彩色圖像,可以直接把R/G/B所有通道的直方圖全部累加後即可。一般來說,這個中間值很好的反應了整幅的明暗程度,因此,用他作爲一個參考數據。利用下式計算出需要降低對比度(under-exposed image):

          Ns = int((M - 1) * Median / 255.

  則需要增加對比度的圖像數量爲 N =  M - 1 - Ns。

  比如Median的結果爲50,則說明圖像整體比較暗,如果M=10,則Ns = 1, N = 8;

  給定一個用戶輸入的最大對比度參數Alpha,該參數的意義上容許圖像最多的增強或降低的對比度是Alpha(可過曝或欠曝),可如果在這M個序列的圖像裏,要能達到整個Alpah值,必須有某個參數和N或Ns有關,明顯要取他們的最大值 Nx = Max(N, Ns)。論文裏作者折騰了半天提出了下面這個計算式:      

                                         

 

  這個公式其實是個線性的公式,即圖像整體變量或整體變暗,如果直接把這樣生成的M幅圖像合成,不用想,沒有什麼意義的。
  那麼我們考慮到Extended Exposure Fusion文章裏的動態範圍壓縮,如果把他們兩個結合起來,那麼是不是能獲得更好的結果呢。

  因爲在前面調節曝光度的時候,我們的調節公式必然會造成部分像素過曝或欠曝,如果簡單的把他們裁剪掉,就造成了信息的丟失,所以我們暫時不裁剪,而是直接使用擴展的曝光融合裏的動態範圍壓縮技術,把他們壓縮,壓縮完成後再次進行裁剪,這樣就可以很好的控制結果了。

  這樣這個過程就涉及到了前面所說的參數Beta了,那麼由Alpha和Beta實際上又可以共同確定前面所說的第一個參數M,因爲我們只要取某一個M使得所有的動態範圍都至少又一次得到了增強。這個論文裏提出了一個do while不斷的去測試合理的M值:

 %%% Compute optimal number of images (smallest N that ensure every part of
    %%% the input range is enhanced)
    Mp = 1;              % Mp = M-1; M is the total number of images
    Ns = floor(Mp*cval); % number of images generated with fs
    N  = Mp-Ns;          % number of images generated with f
    Nx = max(N,Ns);      % used to compute maximal factor
    tmax1  = (+1    + (Ns+1)*(beta-1)/Mp)/(alpha^(1/Nx));     % t_max k=+1
    tmin1s = (-beta + (Ns-1)*(beta-1)/Mp)/(alpha^(1/Nx)) + 1; % t_min k=-1
    tmax0  = 1      + Ns*(beta-1)/Mp;                         % t_max k=0
    tmin0  = 1-beta + Ns*(beta-1)/Mp;                         % t_min k=0
    while tmax1 < tmin0 || tmax0 < tmin1s
        %%% add an image to the sequence
        Mp = Mp+1;
        %%% update values
        Ns = floor(Mp*cval);
        N  = Mp-Ns;
        Nx = max(N,Ns);
        tmax1  = (+1    + (Ns+1)*(beta-1)/Mp)/(alpha^(1/Nx));     % t_max k=+1
        tmin1s = (-beta + (Ns-1)*(beta-1)/Mp)/(alpha^(1/Nx)) + 1; % t_min k=-1
        tmax0  = 1      + Ns*(beta-1)/Mp;                         % t_max k=0
        tmin0  = 1-beta + Ns*(beta-1)/Mp;                         % t_min k=0
        if Mp > 49 % break if no solution
            warning(['The estimation of the number of image required in '...
                     'the sequence stopped because it reached M>50. ' ...
                     'Check the parameters.']);
            break
        end
    end

  根據不同的Alpha和Beta,已經不同的圖像特性(決定了中值),可以得到不同的映射曲線,如下所示:

   注意上面的m就是指歸一化的中值。

  有了這些曲線,在原有圖像的基礎上進行映射得到一個序列的圖像,然後再用Exposure Fusion就可以了。

  論文裏還提到了用HSV顏色空間的V分量來做這些工作,而不是用RGB顏色空間,這個時候由於是V是個灰度的信息,因此,在權重的計算時,飽和度那個指標就麼有意義了,這個轉換我覺得除了能加快下程度的速度,其他的可能並沒有什麼特殊的需要,而且HSV顏色空間和RGB之間的轉換還是很耗時的,如果寫的不好,可能還會降低速度,還不如直接在RGB顏色空間中做。

  我們測試一些圖像,這個算法獲得的結果卻是還是相當不錯和穩定的: 

  

  

   

   

  和其他的一些增強算法相比,這個方法的比較明顯的特徵是不會過分的引入瑕疵(比如突出的斑點或者塊狀),但是耗時方面也還是比較可觀(和圖像的內容和參數有關)。

  在原始的論文中,作者還進行了大量的比較,有興趣的可以去看看。

       提供一個測試DEMO供有興趣的朋友玩玩:https://files.cnblogs.com/files/Imageshop/Exposure_Fusion.rar?t=1694501148&download=true

       如果我們選擇的是一個圖像,則調用的即爲Simulated Exposure Fusion算法。

   

       補充: 在上一篇Exposure fusion裏,也簡單的提到了不做權重融合,只對拉普拉斯金字塔取最大值、平均值等操作的多圖融合方式,雖然這種融合對於多曝光融合的效果很一般,但是在對於多焦段融合時確有着較爲明顯的優勢,這個時候權重融合反而效果很差,如下圖所示 :

   

                原圖1                                  原圖2                                   

   

          基於特徵權重的融合                            基於最大值/平均值的融合

  其實想一想,道理也很簡單,多焦距的圖像,在非焦點區域,圖像是模糊的,焦點區域圖像是清晰的,因爲模糊區域的拉普拉斯金字塔必然數較小,而焦點區域因爲有很多圖像細節,拉普拉斯數據豐富,因此,如果是用特徵權重融合,模糊區域對結果就一定有影響,而如果用最大值,則只取那些清晰的區域,所以合成後的結果就更爲清晰。

  所以說,不同的算法還是有不同的應用場景,必須找到合適的對象予以體現他們的價值。

  如果想時刻關注本人的最新文章,也可關注公衆號或者添加本人微信:  laviewpbt

                             

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章