3.5.3 Interactive Local Manipulation of Tonal Values(局部自動色調映射)

3.5.3 Interactive Local Manipulation of Tonal Values(局部自動色調映射)

Lischinski等人提出了一種基於用戶的系統,用於修改HDR / LDR圖像中的色調值。 [229]。 該系統基於Levin等人啓發的畫筆界面。 [222]和Agarwala等。 [9],它可以看作是一種軟分段方法。 用戶指定圖像中的哪些區域需要通過畫筆進行曝光調整; 見圖3.21。

 圖3.21。 Lischinski等人的自動操作器示例。 [229]應用於運河HDR圖像:(a)每個區域的曝光圖。 (b)平滑的曝光圖; 請注意,應保留鋒利的邊緣。 (c)最終色調映射圖像。

有四種可能的畫筆:

  • 基本畫筆。 爲畫筆所覆蓋的像素設置約束,並分配w = 1的權重。
  • 亮度畫筆。將約束應用於亮度類似於畫筆覆蓋的像素。 如果µ是筆刷下像素的平均亮度,而σ是筆刷參數,爲亮度爲L的像素賦權
  • Luma-chrome畫筆。一種類似亮度的刷子,但它考慮亮度和色度。
  • 曝光過度畫筆。選擇所有被繪製的筆畫包圍的過度曝光像素。

一旦使用不同的筆刷繪製出筆觸,系統將嘗試找到一個空間變化的曝光函數f。這必須滿足用戶指定的約束條件,並將邊緣考慮在內。在最小化方面,f可以定義爲:

 其中L ' = log(L), L是LDR或HDR圖像的亮度。函數w(x)∈[0,1]定義約束像素,g(x)是提供目標曝光量的函數。最小化提出了一個平滑的條件,考慮到大的梯度和被定義爲:

 變量α定義了該項對對數亮度圖像的導數的敏感性,而ǫ是一個小的非零值,用於避免奇點。 通過求解線性系統來計算最小值f [312]。 之後,通過應用f調整圖像

最後,系統提供了一個自動的預覽TMO,該TMO是繼Adams[4]的zone系統之後的。利用式(3.35)將圖像分割爲n個區域,計算每個區域的正確曝光值爲:

 

 這些曝光和片段被用作線性系統求解器的輸入,生成色調映射圖像。圖3.21給出了一個例子。

該系統爲攝影師、藝術家和用戶提供了一個用戶友好的GUI和一個完整的工具,用於直觀地色調映射HDR圖像或增強LDR圖像。此外,它可以應用於其他任務,如修改景深和空間變化的白平衡。

list3.20提供了Lischinski等人的MATLAB代碼。 [229] TMO。 完整代碼可在LischinskiTMO.m文件中找到。 該方法將起始曝光pAlpha和最大輸出亮度pWhite作爲輸入。 這些參數與Reinhard等人的全局運算符[323]相同。

list3.20提供了Lischinski等人的MATLAB代碼。 [229] TMO。 完整代碼可在LischinskiTMO.m文件中找到。 該方法將起始曝光pAlpha和最大輸出亮度pWhite作爲輸入。 這些參數與Reinhard等人的全局運算符[323]相同。

 

 該算法從提取輸入HDR圖像的最小和最大亮度值開始。 使用公式(3.35)計算圖像的區域數量,並將其存儲在Z中。下一步是找到由變量fstopMap表示的空間變化的曝光函數f。 針對每個區域計算代表亮度值R z(Rz),作爲該區域中像素的中間亮度。 Reinhard等人的全局色調映射方法。 [323]用於將Rz映射到目標值f(Rz)並存儲在f中。 最後,目標曝光量存儲在fstopMap中。 之後,使用Linschinski Minimization.m函數(可在Tmo / util文件夾中找到)來最小化公式(3.34),它是稀疏線性系統A·b = x的典型解。

代碼:

%%
clc
clear
hdr=hdrread("HDR_040_Field_Ref.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;
epslon=1e-6;
minLlog=log2(min(L(:))+epslon);
maxLlog=log2(max(L(:)));
%ceil朝無窮大方向取整
Z=ceil(maxLlog-minLlog);
%選擇每個區域代表性的Rz
fstopMap=zeros(size(L));
Lav=logMean(L);
pAlpha = ReinhardAlpha(lum(hdr));
pWhite = ReinhardWhitePoint(lum(hdr));
for i=1:Z
    lower_i=2^(i-1+minLlog);
    upper_i=2^(i+minLlog);
    index=find(L>=lower_i&L<upper_i);
    if(~isempty(index))
        Rz=MaxQuart(L(index),0.5);
        Rz_s=(pAlpha*Rz)/Lav;
        f=(Rz_s*(1+Rz_s/(pWhite^2)))/(Rz_s+1);
        fstopMap(index)=log2(f/Rz);
    end
end
figure;imshow(fstopMap);title("區域曝光圖");
%保邊平滑曝光圖
fstopMap=2.^LischinskiMinimization(log2(L+epslon),fstopMap,0.07*ones(size(L)));
figure;imshow(fstopMap);title("平滑區域保邊圖像");
imgout=zeros(size(hdr));
for i=1:size(hdr,3)
    imgout(:,:,i)=hdr(:,:,i).*fstopMap;
end
figure;imshow(imgout);title("結果圖像");
%%
%matlab自帶的函數
out=LischinskiTMO(hdr);
imshow(out);

原圖:

 曝光區域

 

 

 

 

 

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