3.4.1用於色調映射的邊緣感知過濾器(Bilateral Filtering )

3.4.1用於色調映射的邊緣感知過濾器(Bilateral Filtering )

Tumblin和Turk [374]提出了該類別的第一個算子,它是基於低曲率圖像簡化器(LCIS)的濾波器。 這個想法是通過複製畫家在繪畫場景時使用的技術來解決在不損失細節和紋理的情況下保持局部對比度的問題。 通常,藝術家在繪製場景時會從大型特徵的草圖(即,最重要的大型特徵周圍的邊界)開始,並逐漸細化這些大型特徵,從而添加更多細節,即添加更多陰影和邊界。

圖3.13。帶通濾波器和LCIS濾波器的比較:(a)帶通濾波器不能完全從大特徵中分離出細節。(b) LCIS避免了這個問題,工件不會生成。

一個多尺度LCIS濾波器的應用通過利用由各向異性擴散引起的偏微分方程(PDE)建立了一個類似的層次結構,它試圖壓縮最大的特徵,以保留細節。

圖3.13(b)顯示了LCIS過濾器層次結構與線性過濾器層次結構相比的工作方式。 圖3.13(a)強調了線性濾波器無法將大型特徵與精細細節區分開。 結果,某些大型特徵可能無法壓縮,因爲它們與精細的細節混合在一起,導致光暈並具有梯度反轉僞像的特徵。 儘管LCIS層次結構是有效的,但是兩個主要缺點限制了該運算符的採用。 第一個是,由於需要針對每個比例尺求解PDE,因此過濾在計算上是昂貴的。 第二個缺點是爲了獲得所需外觀所需的模型參數數量。

雙邊濾波器。這是一個非線性濾波器(見附錄a),它可以將圖像分離爲高頻圖像(稱爲細節層)和低頻圖像(稱爲基層)。圖3.14顯示了HDR圖像分解爲兩層。

Durand和Dorsey在設計一個通用而有效的色調映射框架時充分利用了這一特性[118]。 這樣可以保留局部對比度,其靈感來自於Tumblin和Turk在LCIS [374]上的工作,但只有分解步驟,而不是層次結構,以便在參數方面具有輕量級的模型。 該框架的第一步是將HDR圖像分解爲亮度和色度。 在這一點上,對數域中的亮度用獲得log10 Lw,base的雙邊濾波器進行濾波。 細節層Lw,det是通過將輸入HDR亮度除以Lw,base來計算的。 隨後使用全局TMO f(x)對其進行色調映射,將其與細節層重新組合:

作者採用對數域中的簡單縮放作爲TMO,即log10 f(x)= c·log10 x,其中c是壓縮因子。 最後,將色調映射的亮度和色度重新組合以形成最終的色調映射圖像。 該框架可以保留大多數細節,並且可以應用於任何全球TMO。 圖3.15提供了一個示例。

list3.17提供了雙邊濾波方法的MATLAB代碼[118]。完整的代碼可以在DurandTMO.m文件中找到。TMO的第一步是將亮度通道L分離爲高(Lbase)和低(Ldetail)圖像頻率。這是利用MATLAB函數雙元分離來實現的。m,可以在util文件夾中找到。然後將對數應用於Lbase,得到log base。這是由一個因子縮放,c因子,有效的色調映射基礎層。最後,返回獲取日誌Ld的詳細信息,然後對其取冪。

其他邊緣感知過濾器。 與基於雙邊濾波器的分解相關的一個問題是,在自然圖像中複雜的空間強度過渡中,濾波器內核可能會偏向平滑邊緣的一側[362]。 這會導致重建過程中過度銳化,可見爲條帶或振鈴僞影。 爲了克服這個限制,已經提出了一些邊緣感知濾波器,例如三邊濾波器[92],加權最小二乘濾波器[126],引導濾波器[169],L0梯度最小化[424],結構保持平滑[189] ],L1變換[62]等。

Matlab 代碼

%%
clc
clear
hdr=hdrread("Bottles_Small.hdr");
hdr_r=hdr(:,:,1);
hdr_g=hdr(:,:,2);
hdr_b=hdr(:,:,3);
%亮度信息
L=0.2126 * hdr_r + 0.7152 * hdr_g + 0.0722 * hdr_b;
%分解基礎層和細節層
[Lbase,Ldetial]=bilateralSeparation(double(L));
log_base=log10(Lbase);
max_log_base=max(log_base(:));
log_detial=log10(Ldetial);
target_contrast=10;
c_factor=log10(target_contrast)/(max_log_base-min(log_base(:)));
log_absolute=c_factor*max_log_base;
log_Ld=log_base*c_factor+log_detial-log_absolute;
Ld=10.^(log_Ld);
% imshow([L Ld]);
imshow([Lbase Ldetial]);title("base                                               detial");
figure;
%彩色校正
%顏色校正
cc_s=0.5;
imgout=zeros(size(hdr));
for i=1:size(hdr, 3)
    imgout(:,:,i) = ((hdr(:,:,i) ./ Ld).^cc_s) .* Ld;
end
RGBout=ConvertRGBtosRGB(imgout,0);
%如果像素值大於1,壓縮到1,如果像素值小於0,壓縮到0
for i=1:size(hdr,1)
    for j=1:size(hdr,2)
        for k=1:size(hdr,3)
            if(RGBout(i,j,k)>1)
                RGBout(i,j,k)=1;
            end
            if(RGBout(i,j,k)<0)
                RGBout(i,j,k)=1;
            end
        end
    end
end
RGBout=RemoveSpecials(RGBout);
subplot(1,2,1);imshow(hdr);title("原圖");
subplot(1,2,2);imshow(RGBout);title("DurandTMO");
%matlab自帶的DurandTMO
out=DragoTMO(hdr);
figure;imshow(out);title("Matlab自帶DurandTMO");

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