3.2.3 Quantization Techniques(HDR量化)(Advanced High Dynamic Range Imaging)Schlick TMO
Schlick [341]提出了一種基於有理函數的算子,以提供一種直接直觀的色調映射方法。 TMO定義爲:
其中p∈[1,∞),它可以自動估算爲
變量N是輸出顯示的位數,L0是HVS可以感知的監視器的最低亮度值。 由於將相同的函數應用於所有像素,因此在公式(3.9)中使用p是統一的量化過程。 可以使用如下自適應參數p進行非均勻量化處理:
其中k∈[0,1]是用戶選擇的不均勻權重,L w,avg(x)是圍繞像素的給定區域的平均亮度強度。 這種不統一過程的行爲通常與本地操作員相關。 Schlick在所有實驗中均使用k = 0.5。 還提出了三種計算平均亮度強度值Lw,avg(x)的技術。 有關更多詳細信息,請參閱Schlick的原始文章[341]。 這種不統一的過程可以由以下事實證明:
人眼在圖像中從一個點連續移動到另一點。 對於眼睛所關注的每個點,都存在一個周圍區域,該區域創建局部適應並修改亮度感知。 量化技術提供了一種簡單且計算速度快的TMO。 參見圖3.4。 但是,用戶需要爲每個圖像指定適當的k值。
1059/5000
清單3.8提供了Schlick TMO [341]的MATLAB代碼。完整代碼可在文件SchlickTMO.m中找到。參數s模式指定所使用的Schlick技術的模型類型。共有三種模式:手動,自動和不一致。手動模式將參數p作爲用戶的輸入。自動模式和非均勻模式分別使用均勻和非均勻量化技術。取決於使用的模式,變量p是p或p',nBit是輸出顯示的位數N,L0是L0,k是k。第一步是以一種健壯的方式(以避免出現不愉快的現象)來計算最大值L Max和最小亮度L Min,即計算百分位數。這些值可用於計算p。然後,基於s模式,選擇三種模態之一,p由用戶給定(手動模式),或者使用公式(3.9)(自動模式)或使用公式(3.10)(非均勻模式)計算。最後,通過應用公式(3.8)來減小亮度通道的動態範圍。
原圖
matlab自帶的
%%
clc
clear
hdr=hdrread("Bottles_Small.hdr");
RGBout=SchlickTMO(hdr);
imshow(RGBout);
結果圖
改進的算法
%% HDR量化
% Schlick TMO
clc
clear
hdr=hdrread("Bottles_Small.hdr");
hdr_r=hdr(:,:,1);
hdr_g=hdr(:,:,2);
hdr_b=hdr(:,:,3);
%亮度壓縮
L=lum(hdr);
%計算最大亮度
Lmax=MaxQuart(L,0.99);
%計算最小亮度
Lmin=MaxQuart(L(L>0.0),0.01);
L0=1;
p=L0*Lmax/(2^8*Lmin);
Ld=p.*L./((p-1).*L+Lmax);
%顏色校正
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);
imshow(RGBout);
結果: