图像方面的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');