自行白平衡,今后生活费电子产品(家用摄像机、数码照相机)中也普各处应用

照相机首要技术点为叁A算法。

   
 白平衡是电视摄录领域1个要命主要的概念,通过它能够化解色彩还原和色泽处理的一文山会海题材。白平衡是随着电子影象再现色彩真实而发生的,在正式油画领域白平衡应用的较早,今后生活费电子产品(家用录制机、数码相机)中也广泛地利用,但是技术的迈入使得白平衡调整变得愈加简单简单,但众多使用者还不甚理解白平衡的行事规律,精晓上设有重重误区。它是兑现摄像机图像能纯粹反映被摄物的情调情形,有手动白平衡和自行白平衡等艺术,本文简要的牵线了二种电动白平衡算法。

而三A算法首要指的是自行对焦(AF)、自动暴光(AE)及活动白平衡(AWB)。
活动白平衡:依照光源条件调整图片颜色的保真程度。

1、原始的灰度世界算法

  灰度世界算法(GrayWorld)是以灰度世界假若为根基的,该假如认为对于一幅具有大量色彩变化的图像,
瑞鹰、 G、 B
四个轻重的平均值趋于同一个灰度K。一般有二种办法来明显该灰度。

      
 (1)直接给定为固定值, 取其各通道最大值的八分之四,即取为12七或128;

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

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

           
 Kr=K/Raver;

       Kg=K/Gaver;

           
 Kb=K/Baver;

       
 算法第3步为依据Von Kries
对角模型,对于图像中的各类像素帕杰罗、G、B,总结其结果值:

             Rnew = R *
Kr;

       Gnew = G *
Kg;

       Bnew = B *
Kb;

       
 对于上式,计算中大概会存在溢出(>25伍,不会并发小于0的)现象,处理格局有三种。

         a、
直接将像素设置为25五,那说不定会导致图像全体偏白。

         b、
计算机技术切磋全数卡宴new、Gnew、Bnew的最大值,然后选取该最大值将将总括后数据重复线性映射到[0,255]内。实践注解那种方法将会使图像全部偏暗,建议利用第3种方案。

       
一般的话,灰度世界算法的法力还是相比好的吧,并且该算法的履行进度特别之快,近日也存在了好多对该算法实行改正的功效,有时光笔者在重新整建一下。

   
  图片 1 
 图片 2

   
  图片 3 
 图片 4

   
  图片 5 
 图片 6

                     
               原图                                                    
                       处理后的图

网上日常有像样招聘如下的招聘消息: 

二、完美反射算法

     
当初写那个代码的时候的有些参考文献一下子也找不到了,就从已经写好的代码中讲述下该算法的经过吧。

     
原理:完美全反射理论perfect Reflector若是图像上最亮点就是白点,并以此白点为参照对图像举办活动白平衡,最亮点定义为PRADO+G+B的最大值,具体编码步骤如下:

     
(1)计算每一个像素的本田UR-V\G\B之和,并保存到1一时半刻内部存储器块中。

            for (Y = 0; Y < Height; Y++)
            {
                Pointer = bmp.Pointer + Y * Stride;
                for (X = 0; X < Width; X++)
                {
                    Sum = (short)(*(Pointer) + *(Pointer + 1) + *(Pointer + 2));     // R+G+B
                    HistRGB[Sum]++;
                    *SumP = (short)Sum;
                    Pointer += 3;
                    SumP++;
                }
            }

     (2)按酷路泽+G+B值的轻重总括出其前十分之一或其它Ratio的反革命参考试场点的的阈值T。

            for (Y = 767; Y >= 0; Y--)
            {
                Sum += HistRGB[Y];
                if (Sum > Width * Height * Ratio / 100)
                {
                    Threshold = Y;
                    break;
                }
            }

   
(3)遍历图像中的各样点,计算在这之中途锐+G+B值大于T的全部点的科雷傲\G\B分量的积攒和的平均值。

            for (Y = 0; Y < Height; Y++)
            {
                Pointer = bmp.Pointer + Y * Stride;
                for (X = 0; X < Width; X++)
                {
                    if (*SumP > Threshold)
                    {
                        AvgB += *Pointer;
                        AvgG += *(Pointer + 1);
                        AvgR += *(Pointer + 2);             // 为获得增益做准备
                        Amount++;
                    }
                    Pointer += 3;
                    SumP++;
                }
            }
            AvgB /= Amount;
            AvgG /= Amount;
            AvgR /= Amount;

   (4)对各种点将像素量化到[0,255]之间。

            for (Y = 0; Y < Height; Y++)
            {
                Pointer = bmp.Pointer + Y * Stride;
                for (X = 0; X < Width; X++)
                {
                    Blue = *Pointer * MaxValue / AvgB;                                   // 另外一种算法需要先计算不抑制重新计算的RGB的范围,然后求RGB的最大值,如果最大值大于255,则所有的结果都要除以最大值在乘以255,但实际表明该算法、   不合适;
                    Green = *(Pointer + 1) * MaxValue / AvgG;
                    Red = *(Pointer + 2) * MaxValue / AvgR;
                    if (Red > 255) Red = 255; else if (Red < 0) Red = 0;                // 这里需要判断,因为RGB空间所有的颜色转换到YCbCr后,并不是填充满了0-255的范围的,反转过去就会存在一些溢出的点。
                    if (Green > 255) Green = 255; else if (Green < 0) Green = 0;        // 编译后应该比三目运算符的效率高
                    if (Blue > 255) Blue = 255; else if (Blue < 0) Blue = 0;
                    *Pointer = (byte)Blue;
                    *(Pointer + 1) = (byte)Green;
                    *(Pointer + 2) = (byte)Red;
                    Pointer += 3;
                }
            }

  图片 7 
 图片 8 
 图片 9

     图片 10 
  图片 11 
 图片 12

     图片 13 
  图片 14 
 图片 15

                                原图                  
                               Ratio=10%                                
           Ratio=2%

    从功用上看,该算法应该比灰度世界的成效要好些,然而也还是遭到Ratio那么些参数的形象。特别是第1个图片,过高的Ration导致图片过于泛白。那个题材得以依旧最后量化的哪一步引起的,作者会抽空再商量一下任何的量化模式,尽量降低Ration的影响。

   
针对上述的第1步,看到更仆难数matlab和VC的代码,有为数不少人居然先用飞快排序对增加后的多少实行排序,然后再取其一成的最大值,对图像的多寡开始展览排序,可能就是再快速的排序都快不起来吧,看到那,大概全国全体公民都笑了。

 ———————————————- ———————————————-

3、动态阈值算法

      参考杂谈:A Novel Automatic White
Balance Method For Digital Still
Cameras

     
同经典的局地算法相同,算法分为五个步骤:白点检查评定和白点调整。

      白点检查测试:

         
 (一)为了进步算法的鲁棒性,原版的书文将图像分成1二有些,当中宽高比为四:三,关于这一点,笔者认为不客观,对图像不是通用的,后文再说。

           
(二)总括内地的Cb\Cr分量的平均值Mb/Mr

           
(三)按下式总括各个区域的Cb\Cr分量的断然差的累积值Db/Dr

                               
 图片 16

                               
 图片 17

                  上式中N为各个地区的像素数。

       
 (4)如果Db/Dr的值偏小,则大家忽视这1块,因为那标志那1块的水彩分布相比均匀,而那般的壹些对于白平衡倒霉。那个偏小的准则大家某些再谈。

       
 (五)总计对于除了符合第肆条的的任何区域的Mb/Mr/Db/Dr的平均值作为整幅图像的Mb/Mr/Db/Dr值。

        关于这一条,原来的文章的话是:The final
Mb、Mr、Db、Dr are obtained by taking the average
of those regions that pass this additional step。

       笔者在其实中做的时候正是个别对每块实行的,仿佛效果也尚可。

       
 (六)按下述规则开端分明哪些点是属于灰绿参考点:

                     
 图片 18

                     
  图片 19

       
 (柒)对于先河判断已经属于士林蓝参考试场点的像素,按大小取其亮度值为前百分之十的位最终鲜明的金色参考试场点。

     
白点调整:

     (一)总括青黑参考点亮度值的平分值ENVISIONaver,Gaver,Baver,(各通道分别计算)。

         
(二)根据以下各式计算每个通道的增益:

           
 图片 20

                     
 图片 21

                   
  图片 22

             
式中,Ymax就是YCbCr颜色空间中Y分量的在整幅图像中的最大值。

         
(三)依照以下各式总结最后每种通道的颜色值:

                   
  图片 23

                   
  图片 24

                   
  图片 25

         
在那之中福睿斯/G/B为在原本的水彩空间中的值,注意那里要拓展溢出检查实验的。

      
 简单的谈下白点检查测试的分块操作吧,原来的小说把图像分成四*三的1贰快,这样工作针对于大家广大数码照片是以此比重的,假诺通用,作者觉着应该用每一个块的轻重来支配,比如每块为
拾0*100个像素。

         
那几个算法的机能如下:

   
  图片 26  图片 27  图片 28

   
  图片 29  图片 30  图片 31

   
  图片 32  图片 33  图片 34

                     
     原图                                            
 块大小50*50                    块大小100*100

     
上三图申明:1、该算法效果尤其好;二、对块大小不太敏感,由此相当适合于自动化操作。

      
关于GL450GB到YCbCr的神速更换,能够参见:水彩空间体系叁:
SportageGB和YCbCr颜色空间的转换及优化算法 

     
由于在上述链接的小说中,YCbCr颜色空间已经被撤换来[0,255],因此北京蓝检查测试部分的第(陆)条中的sign函数就不供给了。

   
  同样,提供个编写翻译好的文书给有趣味研商该算法的情人看看效果:

   
  http://files.cnblogs.com/Imageshop/AutoWhiteBalance.zip

   后记:

   
 针对动态阈值法,很多恋人反映如若YCbCr的值量化在0到25伍之内的话会晤世全数的像素都会被式(陆)初阶判断为月光蓝参考试场点。那样早先时代的劳作就错过了意思,算法就变成了近似于完美反射算法那了,稍微有点分化的地点正是三头选用两点的清规戒律有所差异。就算如此做的最后结果还算不错,但真正和舆论的本心像违背了,前边经超过实际践,假使把YCbCr的值量化在-1二七到12八之内,式6中的Sgn同样适用,则发轫判断为白点的数会大批量的收缩,对于同二个图片,同一个参数五个算法的末梢的作用相比如下:

  
更新后的下载链接依然如下,以追加了校订后的效率。

     
图片 35 
图片 36  图片 37

      图片 38 
图片 39 
图片 40

 

 图片 41

 ***************************小编:
laviewpbt   时间: 20一叁.四.20    联系QQ:  3318477柒 转载请保留本行信息*************************

 

 

Camera/ISP 算法工程师
油画机三A算法软件工程师 

那边随机摘录部分实际供给。

任职要求:
1、本科以上学历,天文,物理,机电、工业自动化,电子相关专业,博士学历优先思量;
二、本科结业三年以上,学士结束学业1年以上的相干行业相关工作经验必要;
三、熟悉精晓C/C++或许FPGA 开发语言,数据结构,MATLAB,时域信号和系列;
四、通晓数字色度学,数字图像处理,数字影象处理的基本知识;
五、熟知摄影机成像原理;
陆、了然叁A(AF,AE,AWB)算法之一;
柒、对于自动化控制,数字时限信号采集样品,滤波,负反馈,PID算法有实在经历;
八、理解从画面到SENSO卡宴,电机,ISP,编码器,采集,呈现通道一些列变化。

任职供给:

  1. 精晓camera的3A(AE,AWB,AF)算法原理和布置思路,
    有三A算法的宏图经验为佳
  2. 不无丰硕ISP(图象处理器) 开发经历,领悟MediaTek,QUALCOMM,
    OV等便携式终端上运用的ISP开发环境。有上述条件下开发经历为佳。
  3. 贯通数字图像处理原理和基础知识。
  4. 深谙C/C++语言,有付出经历为佳
  5. 有手机/便携式相机三A算法完成/应用经验
  6. 掌握CMOS sensor的干活原理

 ———————————————- ———————————————-

而那类职位一般都以高薪待遇。 

接下来难题来了,市面上3A算法相关材质都十三分稀有,就连相关书籍都很少提起算法细节,而她们大都都会要求明白三A算法至少之壹。

而有关白平衡算法,相比不易的素材是那份:

遵照灰度世界、完美反射、动态阈值等图像自动白平衡算法的规律、完毕及意义

此前反复与博主laviewpbt斟酌相关的学识,收益匪浅。

而据作者所知,绝当先54%的相机选择的功底算法就是灰度世界算法,然后在那算法的底子上再革新。

贴一下《基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的规律、达成及功能》灰度世界法的光景内容。

 ———————————————- ———————————————-

灰度世界算法(格雷 World)

  是以灰度世界借使为底蕴的,该即便认为对于一幅富有多量情调变化的图像,
Odyssey、 G、 B 八个轻重的平均值趋于同三个灰度K。一般有二种艺术来分明该灰度。

(一)直接给定为固定值, 取其各通道最大值的一半,即取为12七或128;

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

算法的第二步是独家总计各通道的增益:

Kr=K/Raver;

Kg=K/Gaver;

Kb=K/Baver;

算法第3步为依照Von Kries
对角模型,对于图像中的种种像素Haval、G、B,总计其结果值:

Rnew = R * Kr;

Gnew = G * Kg;

Bnew = B * Kb;

对此上式,总结中恐怕会存在溢出(>25伍,不会油然则生小于0的)现象,处理格局有两种。

a、 间接将像素设置为255,那说不定会招致图像全体偏白。

b、
计算有所奥迪Q5new、Gnew、Bnew的最大值,然后使用该最大值将将总计后数据再一次线性映射到[0,255]内。实践评释那种艺术将会使图像全体偏暗,提议利用第二种方案。

 ———————————————- ———————————————-

算法的大概思路就是评估一张图片RubiconGB七个通道的中最能发表该通道富含音讯的值,然后以该值为标准重新调整像素。

那般就会存在评估不够标准的题材,导致各通道像素音讯差异过大,形成噪点以及偏色等气象。

因为一旦使用取最大值的方案就会造成在一定情景明明不平衡,例如该通道半数以上的值落在非常小值周围,而却存在3个遥远处的最大值,那么就会促成像素音讯差别过大,就很糟糕了。

因此在第1种思路上拓展更为革新相比较得当,因为可用的音讯比较多,不不难出标题。

其次种思路,最不难易行的另一种创新正是应用灰度法。

均值法: 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

经过实地衡量,那样的处理后效果还可以。

贴上相比较图:

图片 42

原图

图片 43

均值法

图片 44

灰度法

单从眼睛上去分辨两张图片,的确很难分出优劣。

不过自身也只是大致点一下那么些思路而已,有所积攒的人,看到那,应该能够分散出更加多的想法。

接下去自个儿要说的是具体相机中的钨丝灯等手动白平衡是什么样落到实处的。

一言以蔽之就是颜色温度调节。

那就是说依照灰度世界那一个白平衡算法能够怎么落实那种调节呢?!

这边贴出简单达成的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,
};

 

图片 45

阴天

图片 46

日光

图片 47

白热光

图片 48

日光灯

图片 49

钨丝灯

此间只是起到四个演示功能,具体的参数,可按实际上供给酌情实行修改。

正文只是一得之见一下,若有其余相关题材也许须求也得以邮件联系自己商量。

 邮箱地址是:

gaozhihan@vip.qq.com

相关文章