全盘反射,相机中白平衡的算法模拟达成

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

   
 白平衡是电视机摄像领域一个特别重庆大学的定义,通过它能够化解色彩还原和色调处理的一文山会海题材。白平衡是随着电子印象再次出现色彩真实而发出的,在专业拍摄领域白平衡应用的较早,以后生活费电子产品(家用录制机、卡片机)中也常见地使用,但是技术的上扬使得白平衡调整变得更其简单不难,但不少使用者还不甚精通白平衡的劳作原理,驾驭上设有重重误区。它是贯彻录制机图像能准确反映被摄物的色彩境况,有手动白平衡和机动白平衡等艺术,本文简要的介绍了三种电动白平衡算法。

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

壹 、原始的灰度世界算法

  灰度世界算法(GrayWorld)是以灰度世界借使为底蕴的,该若是认为对于一幅富有大批量情调变化的图像,
Highlander、 G、 B
八个轻重的平均值趋于同1个灰度K。一般有三种格局来分明该灰度。

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

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

       
 算法的第1步是各自总括各通道的增益:

           
 Kr=K/Raver;

       Kg=K/Gaver;

           
 Kb=K/Baver;

       
 算法第叁步为依照Von Kries
对角模型,对于图像中的种种像素库罗德、G、B,总括其结果值:

             Rnew = R *
Kr;

       Gnew = G *
Kg;

       Bnew = B *
Kb;

       
 对于上式,总结中或然会设有溢出(>255,不会并发小于0的)现象,处理格局有二种。

         a、
直接将像素设置为255,那恐怕会招致图像全体偏白。

         b、
计算机技术钻探全体奥迪Q7new、Gnew、Bnew的最大值,然后使用该最大值将将总括后数据再一次线性映射到[0,255]内。实践申明那种艺术将会使图像全部偏暗,提出选拔第贰种方案。

       
一般的话,灰度世界算法的机能还是相比较好的啊,并且该算法的履行进程非凡之快,如今也设有了重重对该算法实行立异的作用,有时间本身在收拾一下。

   
  葡萄娱乐官方 1 
 葡萄娱乐官方 2

   
  葡萄娱乐官方 3 
 葡萄娱乐官方 4

   
  葡萄娱乐官方 5 
 葡萄娱乐官方 6

                     
               原图                                                    
                       处理后的图

网上时不时有相近招聘如下的选聘音讯: 

② 、完美反射算法

     
当初写这几个代码的时候的有的参考文献一下子也找不到了,就从曾经写好的代码中描述下该算法的进程吧。

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

     
(1)总计各类像素的昂Cora\G\B之和,并保存到一一时内部存储器块中。

            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)按LX570+G+B值的高低总计出其前一成或其余Ratio的反动参考点的的阈值T。

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

   
(3)遍历图像中的每一种点,计算个中Highlander+G+B值大于T的全数点的Rubicon\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这一个参数的形象。尤其是第一个图片,过高的Ration导致图片过于泛白。那一个难题能够照旧末了量化的哪一步引起的,笔者会抽空再切磋一下其余的量化形式,尽量降低Ration的熏陶。

   
针对上述的第壹步,看到不少matlab和VC的代码,有无数人照旧先用神速排序对增加后的数额进行排序,然后再取其百分之十的最大值,对图像的多少开始展览排序,只怕正是再飞速的排序都快不起来吧,看到那,可能全国全民都笑了。

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

③ 、动态阈值算法

      参考随想:A Novel Automatic White
Balance Method For Digital Still
Cameras

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

      白点检查和测试:

         
 (1)为了提升算法的鲁棒性,最初的作品将图像分成12局地,在那之中宽高比为4:3,关于这点,小编以为不创立,对图像不是通用的,后文再说。

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

           
(3)按下式计算每个地区的Cb\Cr分量的绝对差的累积值Db/Dr

                               
 葡萄娱乐官方 16

                               
 葡萄娱乐官方 17

                  上式中N为每个地方的像素数。

       
 (4)如果Db/Dr的值偏小,则大家忽视这一块,因为这标志这一块的颜料分布相比较均匀,而那般的部分对于白平衡不好。那几个偏小的清规戒律大家略微再谈。

       
 (5)总括对于除了符合第5条的的别样区域的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。

       作者在事实上中做的时候正是个别对每块进行的,就像效果也尚可。

       
 (6)按下述规则早先显明什么点是属于粉红色参考试场点:

                     
 葡萄娱乐官方 18

                     
  葡萄娱乐官方 19

       
 (7)对于初阶判断已经属于卡其灰参考试场点的像素,按大小取其亮度值为前十分之一的位最后明确的反动参考试场点。

     
白点调整:

     (1)总括浅葱绿参考点亮度值的平分值Muranoaver,Gaver,Baver,(各通道分别总计)。

         
(2)根据以下各式总结每一种通道的增益:

           
 葡萄娱乐官方 20

                     
 葡萄娱乐官方 21

                   
  葡萄娱乐官方 22

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

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

                   
  葡萄娱乐官方 23

                   
  葡萄娱乐官方 24

                   
  葡萄娱乐官方 25

         
当中LX570/G/B为在原始的水彩空间中的值,注意那里要实行溢出检查和测试的。

      
 简单的谈下白点检查和测试的分块操作吧,原来的文章把图像分成4*3的12快,这样工作针对于大家很多数码照片是以此比重的,假如通用,笔者觉得应该用每一种块的轻重来决定,比如每块为
100*100个像素。

         
那些算法的法力如下:

   
  葡萄娱乐官方 26  葡萄娱乐官方 27  葡萄娱乐官方 28

   
  葡萄娱乐官方 29  葡萄娱乐官方 30  葡萄娱乐官方 31

   
  葡萄娱乐官方 32  葡萄娱乐官方 33  葡萄娱乐官方 34

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

     
上三图评释:① 、该算法效果特别好;二 、对块大小不太灵敏,由此格外适合于自动化操作。

      
关于福特ExplorerGB到YCbCr的十分的快更换,可以参照:水彩空间体系3:
奥迪Q3GB和YCbCr颜色空间的转换及优化算法 

     
由于在上述链接的篇章中,YCbCr颜色空间已经被转换到[0,255],由此暗黄检查和测试部分的第(6)条中的sign函数就不要求了。

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

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

   后记:

   
 针对动态阈值法,很多爱人反映假若YCbCr的值量化在0到255以内的话会产出全部的像素都会被式(6)起首判断为浅绛红参考试场点。那样早先时代的行事就失去了意思,算法就变成了就好像于圆满反射算法那了,稍微有点不一样的地点正是双边选取两点的规则有所不一样。即使如此做的最终结果还算不错,但确实和舆论的本意像违背了,后边经超过实际践,即使把YCbCr的值量化在-127到128以内,式6中的Sgn同样适用,则初叶判断为白点的数会多量的滑坡,对于同3个图片,同2个参数五个算法的末梢的效果比较如下:

  
更新后的下载链接仍然如下,以追加了创新后的机能。

     
葡萄娱乐官方 35 
葡萄娱乐官方 36  葡萄娱乐官方 37

      葡萄娱乐官方 38 
葡萄娱乐官方 39 
葡萄娱乐官方 40

 

 葡萄娱乐官方 41

 ***************************我:
laviewpbt   时间: 二〇一三.4.20    联系QQ:  33184777
 转发请保留本行新闻*************************

 

 

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

此地随机摘录部分有血有肉须求。

供职须要:
壹 、本科以上学历,天文,物理,机电、工业自动化,电子相关专业,博士学历优先考虑;
贰 、本科完成学业3年以上,博士毕业1年以上的有关行业相关工作经历供给;
③ 、熟识精晓C/C++恐怕FPGA 开发语言,数据结构,MATLAB,信号和连串;
④ 、明白数字色度学,数字图像处理,数字印象处理的基本知识;
⑤ 、了解水墨画机成像原理;
陆 、精通3A(AF,AE,AWB)算法之一;
七 、对于自动化控制,数字信号采集样品,滤波,负反馈,PID算法有实际经验;
捌 、明白从画面到SENSOSportage,电机,ISP,编码器,采集,展现通道一些列变化。

供职须要:

  1. 掌握camera的3A(AE,AWB,AF)算法原理和规划思路,
    有3A算法的统筹经验为佳
  2. 全部丰裕ISP(图象处理器) 开发经历,熟习MediaTek,QUALCOMM,
    OV等便携式终端上应用的ISP开发条件。有上述条件下开发经历为佳。
  3. 贯通数字图像处理原理和基础知识。
  4. 深谙C/C++语言,有付出经历为佳
  5. 有手提式有线电话机/便携式相机3A算法完成/应用经验
  6. 理解CMOS sensor的做事原理

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

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

接下来难题来了,市面上3A算法相关质地都万分少见,就连相关书籍都很少提及算法细节,而她们大多都会需要明白3A算法至少之一。

而关于白平衡算法,相比较科学的质地是那份:

依照灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效益

事先反复与博主laviewpbt研究相关的学问,受益匪浅。

而据小编所知,绝超过2/4的照相机采取的基础算法正是灰度世界算法,然后在那算法的根基上再改革。

贴一下《依照灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、完毕及职能》灰度世界法的大致内容。

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

灰度世界算法(格雷 World)

  是以灰度世界若是为根基的,该要是认为对于一幅享有多量色彩变化的图像,
奥迪Q7、 G、 B 四个轻重的平均值趋于同三个灰度K。一般有三种办法来鲜明该灰度。

(1)直接给定为固定值, 取其各通道最大值的3/6,即取为127或128;

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

算法的第叁步是个别总结各通道的增益:

Kr=K/Raver;

Kg=K/Gaver;

Kb=K/Baver;

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

Rnew = R * Kr;

Gnew = G * Kg;

Bnew = B * Kb;

对此上式,总计中恐怕会存在溢出(>255,不会产出小于0的)现象,处理格局有二种。

a、 直接将像素设置为255,那只怕会造成图像全体偏白。

b、
计算有所奇骏new、Gnew、Bnew的最大值,然后选择该最大值将将计算后数据重复线性映射到[0,255]内。实践评释那种艺术将会使图像全部偏暗,提出选取第2种方案。

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

算法的大约思路正是评估一张图片本田CR-VGB多个通道的中最能发挥该通道富含消息的值,然后以该值为尺度重新调整像素。

这么就会设有评估不够标准的难题,导致各通道像素新闻差别过大,形成噪点以及偏色等境况。

因为借使利用取最大值的方案就会导致在一定情景综上可得不平均,例如该通道抢先2/4的值落在非常的小值周围,而却存在三个遥远处的最大值,那么就会造成像素消息差异过大,就很倒霉了。

之所以在第三种思路上海展览中心开进一步改正相比较稳妥,因为可用的新闻比较多,不易于出标题。

其次种思路,最简便的另一种立异正是行使灰度法。

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