ISP Matlab 高对比度场景的自适应对数映射

4 篇文章 0 订阅

参考文献《Adaptive Logarithmic Mapping For Displaying High Contrast Scenes》

function img_out = AdaptiveLocalToneMap(img_in)
% close all;clear all;clc;
figure,imshow(img_in),title('处理输入');
img_in = double(img_in );
%%
 lwmax = -1.0;
 base = 0.8;
%%
[M, N, D] = size(img_in);

img_in =  img_in./255;

xyz = zeros(M, N, D);
img_out  = zeros(M, N, D);
xyz(:,:, 1) = 0.4124.*img_in(:,:,1) + 0.3576.*img_in(:,:, 2) + 0.1805.*img_in(:,:, 3) ;
xyz(:,:, 2) = 0.2126.*img_in(:,:,1) + 0.7152.*img_in(:,:, 2) + 0.0722.*img_in(:,:, 3) ;
xyz(:,:, 3) = 0.0193.*img_in(:,:,1) + 0.1192.*img_in(:,:, 2) + 0.9505.*img_in(:,:, 3) ;

lwmax  = max(max(xyz(:,:, 2)));

for col   =1:1:M
    for row = 1:1:N
        xx = xyz(col,row,1)/(xyz(col,row,1)+xyz(col,row,2)+xyz(col,row,3));
        yy = xyz(col,row,2)/(xyz(col,row,1)+xyz(col,row,2)+xyz(col,row,3));
        tp = xyz(col,row,2);
        
        xyz(col,row,2) = 1.0 * log(xyz(col,row,1) + 1) / log(2 + 8.0*((xyz(col,row,1) / lwmax)^(log(base) / log(0.5)))) / log10(lwmax + 1);
        x = xyz(col,row,2) / yy*xx;
        y = xyz(col,row,2);
        z = xyz(col,row,2) / yy*(1 - xx - yy);
       
        r =   3.2410*x  - 1.5374*y  - 0.4986*z;
        g = -0.9692*x + 1.8760*y + 0.0416*z;
        b =  0.0556*x  - 0.2040*y + 1.0570*z;
        
        r   = clip(r);
        g  = clip(g);
        b  = clip(b);
        
        r  = Transform(r);
        g = Transform(g);
        b = Transform(b);
       
        img_out(col ,row,1) =  (r * 255);
        img_out(col ,row,2) =  (g * 255);
        img_out(col ,row,3) =  (b * 255);
 
    end
end
        figure,imshow(uint8(img_out)),title('处理结果');
end

function pixl_in  = clip(pixl_in)
if pixl_in<0
    pixl_in=0;
elseif pixl_in>1
    pixl_in=1;
else
    pixl_in=pixl_in;
end
end

function ret =Transform( x)
if (x <= 0.05)
    ret =  x * 2.64;
else
    ret = 1.099* x^(0.9 / 2.2) - 0.099;
end
end
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值