相机中白平衡的算法模拟实现。白平衡之灰度世界法与镜面法。

照相机主要技术点为3A算法。

白平衡的灰度世界算法和镜面算法

如若3A算法主要靠的凡电动对焦(AF)、自动曝光(AE)及活动白平衡(AWB)。
活动白平衡:根据光源条件调整图颜色之保真程度。

一、引言

网上经常有像样招聘如下的招贤纳士信息: 

       
色彩是人眼的指向可视光的一样种植感知。对于非透明底物体而言,人眼睛所形成的情调感知取决于光照光谱分布、物体表面光的反射性和人眼(或者其他光信号接收器)的光敏特性。在光信号接收器的光敏特性保持无转移,物体为保不更换的气象下,人眼对拖欠体的情调感知就取决于光照的光谱分布。由于人数眼视觉的情调恒常性,当环境光发生变化的当儿,我们人类的视觉系统有某种调节能力,可以给咱的大脑还原物体表面的不转移特征,但是对于诸如相机这样的唯有信号接收器,它不得不如实地记录所收及的只有信号,因此在不同光源下所获得的图像在我们人类看起会起情调的不是,下图所显示就是由光源的两样造成同物体色差不同的例证。

 ---------------------------------------------- ----------------------------------------------

澳门新莆京 1

Camera/ISP 算法工程师
摄像机3A算法软件工程师 

 

此处随机摘录部分切实可行求。

       
为了能够让照相机等成像设备得以有所类似于人眼的视觉调节能力,在不同之光照情况下,使所收获的图像颜色保持一致,对所取图像所召开的处理便为做白平衡。在专业的拍照领域,相机可以透过调试自己光敏器件对可见光中不同颜色单色光的敏感性来实现对图像的白平衡,以达摄影师所想只要之功能。对于已沾之图像,如果因为光照原因出现色彩的病的话,我们有时也寄希望于通过现有图像来取得图像获取时之光照信息,基于这些消息来针对图像进行调为得到当某种标准光源下之图像,于是就闹了好多白眼平衡的算法,其中灰度世界算法和镜面法是较常用白平衡算法。

供职要求:
1、本科以上学历,天文,物理,机电、工业自动化,电子相关专业,硕士学历优先考虑;
2、本科毕业3年以上,硕士毕业1年以上之连带行业相关工作经历要求;
3、熟练掌握C/C++或者FPGA 开发语言,数据结构,MATLAB,信号和体系;
4、掌握数字色度学,数字图像处理,数字影像处理的基本知识;
5、熟悉摄影机成像原理;
6、掌握3A(AF,AE,AWB)算法有;
7、对于自动化控制,数字信号采样,滤波,负反馈,PID算法有实际经验;
8、理解从画面及SENSOR,电机,ISP,编码器,采集,显示通道有排变化。

老二、基本原理——Von
Kries色适应理论

任职要求:

        Von
Kries提出,可用一个针对角矩阵变换来叙述两种植光照条件下一样物体表面颜色之间的涉嫌\[1\]。该辩护认为,对于同一个观察者而言,假要于光源A下面,一个物体的RGB值为RGB1=[R1,G1,B1],如果当光源B下面和一个物体的RGB值为RGB2=[R2,G2,B2],那么RGB1与RGB2之间有就正如转换关系。

  1. 通晓camera的3A(AE,AWB,AF)算法原理同统筹思路,
    有3A算法的计划经验也佳
  2. 有着丰富ISP(图象处理器) 开发经历,熟悉MTK,QUALCOMM,
    OV等便携式终端上采用之ISP开发条件。有上述条件下支付经历吗好。
  3. 精通数字图像处理原理同基础知识。
  4. 习C/C++语言,有出经历也佳
  5. 发出手机/便携式相机3A算法实现/应用经验
  6. 精通CMOS sensor的劳作规律

RGB2’=[kr,0,0;0,kg,0;0,0,kb]RGB1',其中kr、kg和kb分别为R、G、B三独通道的校正系数。我们连下就要介绍的灰度世界算法和镜面法的反驳还是树立以就无异于原理的底蕴及的,需要小心的是,这个理论以少数标准下是匪适用的。

 ---------------------------------------------- ----------------------------------------------

其三、灰度世界算法

如果就好像岗位一般都是高薪待遇。 

      3.1算法理论

然后问题来了,市面上3A算法相关材料还分外不可多得,就连相关书籍都十分少提及算法细节,而他们大都还见面要求精通3A算法至少有。

       该理论而:对于同样顺应有着丰富色彩的图形,图像上R、G、B三单通道的平均值应该等于一个吃称作“灰色”的值K\[2\]。理论被最为着重之某些纵是“灰色”的定义及甄选问题。有多措施对理论被的“灰色”进行定义,在斯不详细谈论这一点。至于“灰色”的取舍,一种办法是用那定义为各通道极其可怜价值的一半,还得将索要处理图片三单通道均值的均值作为“灰色”值K。当确定了灰色值K之后,将需要处理图片转换到经光源下之逐一校正系数分别吗:kr=K/Rmean,kg=K/Gmean,kb=K/Bmean,其中Rmean,Gmean和Bmean分别吗图像R、G、B通道的均值。

倘关于白平衡算法,比较不错的材料是当时卖:

     3.2 算法的matlab实现

基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的法则、实现同力量

%白平衡灰度世界算法clc;clear;subplot(1,3,1);I=imread('WB4.jpg');%可以将图片路径换为自己的待校正的图片路径imshow(I);title('原始图像');I=im2double(I);%将8位的RGB图像转为double类型的图像,防止在后面运算各个通道的数值时出现数据损失%计算图片各个通道的平均值Rmean=mean(mean(I(:,:,1)));Gmean=mean(mean(I(:,:,2)));Bmean=mean(mean(I(:,:,3)));%计算标准灰度k=mean([Rmean,Gmean,Bmean]);%计算各个通道的增益k_r=k/Rmean;k_g=k/Gmean;k_b=k/Bmean;%生成新的图像inew_r=k_r*I(:,:,1);inew_g=k_g*I(:,:,2);inew_b=k_b*I(:,:,3);%由于新生成的RGB三通道中有可能出超出255的灰度值,需要将新生成的图像映射到[0,255]这一区间内%方法1:将各通道中灰度值大于255的像素点的灰度直接设置为255[M,N]=size(inew_r);inew_r1=inew_r;inew_g1=inew_g;inew_b1=inew_b;for i=1:M for j=1:N if(inew_r1(i,j)>1) inew_r1(i,j)=1;end if(inew_g1(i,j)>1) inew_g1(i,j)=1;end if(inew_b1(i,j)>1) inew_b1(i,j)=1;end endendinew=cat(3,inew_r1,inew_g1,inew_b1);inew=im2uint8(inew);subplot(1,3,2);imshow(inew);title('取最大值');%方法2:将新生成的各个通道的像素进行归一化处理factor_r=max(max(inew_r));factor_g=max(max(inew_g));factor_b=max(max(inew_b));inew_r2=inew_r;inew_g2=inew_g;inew_b2=inew_b;if(factor_r>1) inew_r2=inew_r/factor_r;endif(factor_g>1) inew_g2=inew_g/factor_g;endif(factor_b>1) inew_b2=inew_b/factor_b;endinew=cat(3,inew_r2,inew_g2,inew_b2);subplot(1,3,3);imshow(im2uint8(inew));title('归一化');

之前反复暨博主laviewpbt探讨相关的学问,受益匪浅。

        程序运行效果演示如下图所显示。

使据我所知,绝大多数之照相机采用的根底算法就是灰度世界算法,然后在当时算法的底子及还改善。

澳门新莆京 2

贴一下《基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的规律、实现同效益》灰度世界法的大约内容。

季、镜面法(完美反射法)

 ---------------------------------------------- ----------------------------------------------

       4.1 算法原理

灰度世界算法(Gray World)

       算法假设:图像被的“镜面”可以完全发射光源照射在物体上面的亮光。因此,如果图像遭到有一个“镜面”的话,那么在一定光源下,可以以所收获的“镜面”的色彩信息看是时下光源的音信。在进展校准的上,我们若图片及在一个可以完全反射光源的“镜面”,那么在经典光源下图片被尽管该存在一个叔刺激值为[255,255,255]纯白色像素点(注意:有多种白色点的定义),此时的校系数可以定义为kr=255/Rmax,kg=255/Gmax,kb=255/Bmax,其中Rmax,Gmax和Bmax分别吗图像R、G、B通道的极酷价值。

  是为灰度世界而为根基的,该要认为对一幅具有大量色彩变化之图像,
R、 G、 B 三单重的平均值趋于同一个灰度K。一般生少栽艺术来规定该灰度。

        4.2 算法的matlab实现

(1)直接吃一定为固定值, 取其每通道极其可怜价值的一半,即取为127或者128;

clc;clear;subplot(1,2,1);I=imread('WB7.jpg');%可以将图片路径换为自己的待校正的图片路径imshow(I);title('原始图像');I=im2double(I);%将8位的RGB图像转为double类型的图像,防止在后面运算各个通道的数值时出现数据损失%求各个通道的最大值max_r=max(max(I(:,:,1)));max_g=max(max(I(:,:,2)));max_b=max(max(I(:,:,3)));%求各个通道相对于所选定白光的偏移量,我以RGB三刺激值为[255,255,255],在double类型的情况下就是[1,1,1]的白作为所选定的白光q_r=1/max_r;q_g=1/max_g;q_b=1/max_b;%根据偏移量计算新的RGB矩阵new_r=I(:,:,1)*q_r;new_g=I(:,:,2)*q_g;new_b=I(:,:,3)*q_b;%拼合三个通道inew=cat(3,im2uint8(new_r),im2uint8(new_g),im2uint8(new_b));inew=im2uint8(inew);subplot(1,2,2);imshow(inew);title('镜面法白平衡');

(2)令 K = (Raver+Gaver+Baver)/3,其中Raver,Gaver,Baver分别代表红、 绿、
蓝三独通道的平均值。

       算法运行效果如下:

算法的第二步是个别计各国通道的增益:

澳门新莆京 3

Kr=K/Raver;

总结

Kg=K/Gaver;

       
灰度世界算法和镜面法由于简单、计算量小齐优点成为常用的白平衡算法,但是其为独家出独家的通病。由于灰度世界算法是因灰度世界的使,当图片中绝非足够长的情调来仿佛理想状态时常,灰度世界算法的白平衡效果即使不同强人意。同样的,如果图片中无存一个较为理想的反射镜面,镜面法的白平衡效果呢不够好。因此于使用中,会依据使用环境的不比,对算法进行改进,笔者水平有限只介绍了极其核心的始末。由于笔者对这半种植算法的论战而和演绎还非克统统清楚,本篇博客中难免出现错误,还伸手各位大牛指正。

Kb=K/Baver;

引用

算法第三步为依据Von Kries
对角模型,对于图像被的每个像素R、G、B,计算其结果值:

[1]朱贵冬, 沈理, 王今觉.
基于von-Kries色适应之分区颜色校正方法[J]. 计算机工程以及是, 2007,
29(2):50-52.

Rnew = R * Kr;

[2]严世珺.
数字图像白平衡处理算法研究及改善[D]. 上海交通大学, 2008.

Gnew = G * Kg;

版权声明:本篇博客为笔者原创博客,转载请注明出处。

Bnew = B * Kb;

 

于上式,计算中或许会见是溢出(>255,不会见油然而生小于0的)现象,处理方式有少栽。

a、 直接拿如从设置为255,这或许会见促成图像整体偏白。

b、
计算有所Rnew、Gnew、Bnew的极其老价值,然后使该绝深价值将将计后数再次线性映射到[0,255]外。实践证明这种方法以会如图像整体偏暗,建议采用第一种方案。

 ---------------------------------------------- ----------------------------------------------

算法的约思路就是是评估一摆放图片RGB三个通道的被最为能够表达该通道富含信息之价,然后以该值为原则重新调整像从。

如此这般尽管会见存在评估不足够规范之问题,导致各通道像从信息差距过十分,形成噪点以及偏色等现象。

坐一旦运用取最好可怜价值的方案虽会招在特定情景强烈不平衡,例如该通道大多数之值落在无比小价周围,而也有一个遥远处的极致充分价值,那么就是会见招像从信息差距过那个,就很不好了。

据此于其次种思路上进展进一步改良比较妥当,因为可用之信息比多,不轻有题目。

老二栽思路,最简易的其他一样种植改进就是应用灰度法。

均值法: K = (Raver+Gaver+Baver)/3 

咱们懂得常用的视频采访编码是YUV。

YUV相关见百度百科:YUV

其中的Y为:

Y =0.299*R + 0.587*G+0.114*B

故灰度法相应可对承诺为:

K=0.299*Raver + 0.587*Gaver+0.114*Baver

经过实测,这样的拍卖后效果还不错。

贴上比图:

澳门新莆京 4

原图

澳门新莆京 5

均值法

澳门新莆京 6

灰度法

徒由眼睛上去分辨两布置图片,的确非常为难分出优劣。

唯独我为只是大概点一下是思路而已,有所积累的食指,看到这,应该好分流出重新多的想法。

搭下自己如果说的凡实际相机中之钨丝灯等手动白平衡是哪实现的。

大概的说哪怕是色温调节。

那根据灰度世界之白平衡算法可以怎么落实这种调节也?!

这里贴发出大概实现之C代码:

switch (preset) { case AUTO: Raver = (SumR / numberOfPixels); Gaver = (SumG / numberOfPixels); Baver = (SumB / numberOfPixels); break; case CLOUDY: Raver = (SumR *1.953125 / numberOfPixels); Gaver = (SumG*1.0390625 / numberOfPixels); Baver = (SumB / numberOfPixels); break; case DAYLIGHT: Raver = (SumR *1.2734375 / numberOfPixels); Gaver = (SumG / numberOfPixels); Baver = (SumB*1.0625 / numberOfPixels); break; case INCANDESCENCE: Raver = (SumR *1.2890625 / numberOfPixels); Gaver = (SumG / numberOfPixels); Baver = (SumB*1.0625 / numberOfPixels); break; case FLUORESCENT: Raver = (SumR *1.1875 / numberOfPixels); Gaver = (SumG / numberOfPixels); Baver = (SumB*1.3125 / numberOfPixels); break; case TUNGSTEN: Raver = (SumR / numberOfPixels); Gaver = (SumG*1.0078125 / numberOfPixels); Baver = (SumB*1.28125 / numberOfPixels); break; default: break; } 

  

enum WB_PRESET{ //自动白平衡 AUTO, //阴天 7500k CLOUDY, //日光 6500k DAYLIGHT, //白热光 5000k INCANDESCENCE, //日光灯 4400k FLUORESCENT, //钨丝灯 2800k TUNGSTEN,};

 

澳门新莆京 7

阴天

澳门新莆京 8

日光

澳门新莆京 9

白热光

澳门新莆京 10

日光灯

澳门新莆京 11

钨丝灯

此地才是由及一个演示作用,具体的参数,可比照实际要求酌情进行改动。

本文只是抛砖引玉一下,若有其它有关题材还是需要吗足以邮件联系自己追。

 邮箱地址是:

gaozhihan@vip.qq.com

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。