3.5.2色調再現中的明度感知

3.5.2色調再現中的明度感知

Krawczyk等。 [204]基於Gilchrist等人的亮度感知錨定理論提出了一種算子。 [142]。 該理論指出,HVS將視場中的最高亮度值或錨點視爲白色。 感知受相對面積的影響。 當最高亮度覆蓋一小塊區域時,它似乎是自發光的。 要將亮度理論應用於複雜圖像,Gilchrist等人。 [142]提出將圖像分解成稱爲框架的區域,可以在其中應用錨定。

操作人員的第一步是確定框架。 然後在log10域中計算圖像直方圖。 k均值聚類算法用於確定直方圖中的質心Ci,通過基於像素計數的權重平均合併近似質心。 爲了避免接縫或不連續,使用軟分段方法生成框架。 對於每個框架,其歸屬概率均定義爲:

其中σ等於兩個框架之間的最大距離。 使用雙邊濾波器對Pi(x)進行平滑處理,以去除較小的局部變化; 參見圖3.19(b)和圖3.19(d)。 最後,將色調映射圖像計算爲:

圖3.19。 Krawczyk等人的TMO示例。 [204] :( a)和(c)是應用錨定的框架。 (b)和(d)分別是(a)和(c)的平滑概率圖。 (e)通過合併框架獲得最終的色調映射圖像。 (原始HDR圖像由AhmetO˘guzAkyu¨z提供)。

最終色調映射圖像的示例可以在圖3.19中看到。 通過將操作員與照相色調再現操作員[323]和快速雙邊過濾操作員[118]進行比較,對操作員進行了驗證,以測試Gelb效應[142],這是與亮度恆定故障相關的錯覺。 實驗結果表明,基於亮度的算子可以重現這種效果。

list3.18和list3.19提供了Krawczyk等人[204]TMO的MATLAB代碼。完整的代碼可以在KrawczykTMO.m文件中找到。

清單3.18。MATLAB代碼:計算聚類(使用k-means)和將圖像分割到Krawczyk等[204]TMO框架中。

清單3.18顯示了第一步,其中使用函數HistogramHDR.m提取亮度通道的直方圖histo,可在文件夾util中找到該函數。 然後,使用k均值函數KrawczykKMeans.m計算質心C,該函數可在文件夾Tmo / util中找到。 此時,可以使用函數KrawczykImagePartition.m確定框架,該函數可以在文件夾Tmo / util中找到。

list3.19。MATLAB代碼:Krawczyk等[204]TMO的概率映射計算步驟。

確定框架後,通過將方程式(3.32)應用於每個框架來計算概率圖P,如清單3.19所示。 將它們乘以鉸接因子A及其錨定權重W。然後,通過將縮放的P減去Y來應用公式(3.33),其中存儲了對數亮度。 最後,將Y的範圍限制在[-2,0]範圍內並進行移位,並通過求冪獲得色調映射的亮度Ld。

代碼演示:

%%
% Krawczyk TMO
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;
%計算圖像的log域
[histo,bound,~]=HistogramHDR(hdr,256,'log10',[],0,0,1e-6);
Llog10=log10(L+1e-6);
%K-means計算圖像中心
[C,toPixels]=KrawczykKMeans(bound,histo);
[framework,distance]=KrawczykImagePartition(C,Llog10,bound,toPixels);
%計算P_i
sigma=KrawczykMaxDistance(C,bound);
[height,width,size]=size(hdr);
A=zeros(size,1);
sigma_sq_2=2*sigma^2;
P=zeros(height,width,size);
P_norm=zeros(height,width);
sigma_a_sq_2=2*0.33.^2;
half_dim=min([height,width])/2;
for i=1:size
    index=find(framework==1);
    if(~isempty(index))
        MaxY=max(Llog10(index));
        MinY=min(Llog10(index));
        A(i)=1-exp(-(MaxY-MinY).^2/sigma_a_sq_2);
        P(:,:,i)=exp(-(C(i)-Llog10).^2/sigma_sq_2);
        P(:,:,i)=bilateralFilter(P(:,:,i),[],0,1,half_dim,0.4);
        P_norm=P_norm+P(:,:,i)*A(i);
    end
end
Y=Llog10;
for i=1:size
    index=find(framework==1);
    if(~isempty(index))
        P(:,:,i)=RemoveSpecials(P(:,:,i)*A(i)./P_norm);
        W=MaxQuart(Llog10(index),0.95);
        Y=Y-W*P(:,:,i);
    end
end
Y=ClampImg(Y,-2,0);
Ld=(10.^(Y+2))/100;
%恢復顏色
cc_s=0.5;
imgout=zeros(height,width,size);
for i=1:size
    imgout(:,:,i) = ((hdr(:,:,i) ./ Ld).^cc_s) .* Ld;
end
RGBout=ConvertRGBtosRGB(imgout,0);
figure;imshow(RGBout);title("MYTMO");
% imshow([L Ld]);
% imshow([L Llog10]);
%matlab自帶的Krawczyk.TMO
out=KrawczykTMO(hdr);
figure;imshow(out);title("Matlab 自帶的TMO");

結果:

 

 

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