自动曝光修复算法附完整C代码

众所周知,


图像方面的3A算法有:


AF自动对焦(Automatic Focus)


自动对焦即调节摄像头焦距自动得到清晰的图像的过程


AE自动曝光(Automatic Exposure)


自动曝光的是为了使感光器件获得合适的曝光量


AW自动白平衡(Automatic White Balance)


白平衡的本质是使白色物体在任何光源下都显示白色


前面的文章也有提及过,在刚开始做图像算法的时候,我是先攻克的自动白平衡算法。


后来攻克自动曝光的时候,傻啦吧唧的,踩了不少坑。


我相信一定不止我一个,一开始的时候抱着对图像均衡化,


软磨硬泡,想要做出兼顾自动曝光和自动白平衡的算法。


可惜,图像均衡化去做白平衡或者自动曝光,这条路是错的。


严格意义上来说,图像均衡化是拉伸曲线,这种做法有个弊端。


它没有考虑到图像的空间信息,也就是局部信息。


当然如果是处理音频之类的算法,肯定要考虑时间信息,因为数据是时序性为主的。


而图像,明显是空间信息为主的。


所以从理论上来说,用拉伸曲线这种不具备空间信息的操作,来做空间信息处理的事情,是不科学的。


我记得这博客刚开始写的时候,好多网友问我,为什么你要写那么多图像模糊算法,


图像模糊算法好像很鸡肋啊,没什么用的吧。


这就大错特错了,因为模糊算法是图像算法中,典型的包含空间信息的全局算法。


也就是说,如果要玩好图像算法,玩好模糊算法就是标配。


本次分享的算法为《Local Color Correction using Non-Linear Masking》,是ImageShop博主,


彭兄发出来的,安利一下他的博客https://www.cnblogs.com/imageshop 。


这个文章里的算法比较简单,


主要是通过图像模糊获取局域权重信息,然后映射回图片上。


matlab代码如下:


复制代码


% Read the image


A=imread('input.jpg');


% Seperate the Channels


R=A(:,:,1);


G=A(:,:,2);


B=A(:,:,3);


% Calculate Intensity Component


I=(R+G+B)/3;


% Invert the image


I_inverted=255-I;


% Apply Average Filter to obtain the Mask Image


h_average=fspecial('average',15);


M=imfilter(I_inverted,h_average);


% Color Correction for R channel


R_new=zeros(size(R));


[c_y, c_x,~] = size(R);


for j = 1:c_x


for i = 1:c_y


p=double(R(i,j));


q=double(M(i,j));


R_new(i,j,:)=int8(255*((p/255)^(2^((128-q)/128))));


end


end


% Color Correction for G channel


G_new=zeros(size(G));


[c_y, c_x,~] = size(G);


for j = 1:c_x


for i = 1:c_y


p=double(G(i,j));


q=double(M(i,j));


G_new(i,j,:)=int8(255*((p/255)^(2^((128-q)/128))));


end


end


% Color Correction for B channel


B_new=zeros(size(B));


[c_y, c_x,~] = size(B);


for j = 1:c_x


for i = 1:c_y


p=double(B(i,j));


q=double(M(i,j));


B_new(i,j,:)=int8(255*((p/255)^(2^((128-q)/128))));


end


end


% Output Image


O=zeros(size(A));


O(:,:,1)=R_new;


O(:,:,2)=G_new;


O(:,:,3)=B_new;


% Convert the double output image to uint8


O=uint8(O);


% Plot the images


subplot(1,3,1), imshow(A), title('Original Image');


subplot(1,3,2), imshow(M), title('Mask');


subplot(1,3,3), imshow(O), title('Output Image');


复制代码


算法步骤很清晰,就不展开了。
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值