• 基于FPGA的自动白平衡算法实现


    1 概述

           在机器视觉中,白平衡(White Balance)是很多彩色成像设备的必备功能。白平衡按照校准方式可分为自动白平衡和手动白平衡。

           首先,白平衡的提出是由于不同环境下不同的光源具有不同的色温,即不同的光谱分布。也就是说在不同光源的光照条件下彩色图像传感器所拍摄的“白色”在人眼看来是不同的。这是由于传感器的光谱响应特性是固定的,在不同色温下会产生色偏。而人眼具有颜色恒常性,可以避免光源变化带来的颜色变化。白平衡就是要校正图像传感器与人眼之间的颜色偏差,使传感器的色彩符合人眼的视觉特性。

           白平衡一般通过调节传感器输出图像R、G、B三个通道的增益系数来实现。

           手动白平衡一般是针对特定色温的光源用白色物体进行标定,计算出3个增益系数。

           而自动白平衡(Auto White Balance),就是根据所拍摄物体的颜色分布自动计算并调节R、G、B三个通道的增益系数。 

           有一些CMOS图像传感器带有自动白平衡功能,可直接使用。对于没有自动白平衡功能的CMOS传感器,就需要在接收端设计开发相应的自动白平衡算法,来动态控制CMOS的R、G、B三通道增益系数。

           目前,很多CMOS传感器使用FPGA芯片作为图像接收端。本文介绍一种可在FPGA中实现的自动白平衡算法,该算法平衡了算法的复杂度与成像效果,可实时计算每幅图像的RGB增益系数,并应用于高速成像领域。

           算法原理来自一篇论文:

    Combining Gray World and Retinex Theory for Automatic White Balance in Digital Photography. Edmund Y. Lam, Member, IEEE

    2 Gray World Retinex自动白平衡算法

           该方法其实是在QCGP算法上做了一些改进。关于QCGP算法此处不作介绍,可搜索相关博客文章。QCGP算法的计算公式如下,以R通道为例。

           设Rave、Gave、Bave为图像中RGB分量的均值,Rmax、Gmax、Bmax各为RGB 分量的最大值。

           根据上述2组公式得出2个校正系数u和v,最后经过白平衡校正后的Rwb为:

           同理,G和B通道也可通过上述公式计算。

           Gray World Retinex算法在此基础上进行改进,不对G通道进行校正,只对R和B通道进行校正。以R通道为例,计算公式为:

           根据上述公式得出2个校正系数u和v,最后经过白平衡校正后的Rwb为:

           同理,B通道也可通过上述公式计算。

           显然,此算法利用了人眼对于绿色最为敏感的特性。

            该算法的matlab程序如下:

    1. function [I1] = f_awb_retinex(I0)
    2. % Combining Gray World and Retinex Theory for Automatic White Balance in Digital Photography
    3. R0 = I0(:,:,1);
    4. G0 = I0(:,:,2);
    5. B0 = I0(:,:,3);
    6. [m,n] = size(R0);
    7. %找到RGB最大值
    8. Rmax = double(max(max(R0)));
    9. Gmax = double(max(max(G0)));
    10. Bmax = double(max(max(B0)));
    11. R2max = (double(Rmax))^2;
    12. G2max = (double(Gmax))^2;
    13. B2max = (double(Bmax))^2;
    14. %计算RGB均值
    15. Rave = double(mean(R0(:)));
    16. Gave = double(mean(G0(:)));
    17. Bave = double(mean(B0(:)));
    18. R2ave = (double(Rave))^2;
    19. G2ave = (double(Gave))^2;
    20. B2ave = (double(Bave))^2;
    21. %反解参数u'v'即xr1,xr2,xr1,xr2
    22. Ar = [R2ave,Rave;R2max,Rmax];
    23. Ab = [B2ave,Bave;B2max,Bmax];
    24. B = [Gave;Gmax];
    25. xr = Ar\B;
    26. xb = Ab\B;
    27. %计算R, B分量白平衡
    28. for i=1:1:m
    29. for j=1:1:n
    30. R1(i,j)=xr(1)*(double(R0(i,j)))^2 + xr(2)*double(R0(i,j));
    31. B1(i,j)=xb(1)*(double(B0(i,j)))^2 + xb(2)*double(B0(i,j));
    32. end
    33. end
    34. R1 = uint8(R1);
    35. B1 = uint8(B1);
    36. G1 = uint8(G0);
    37. %合成
    38. I1(:,:,1) = R1;
    39. I1(:,:,2) = G1;
    40. I1(:,:,3) = B1;
    41. end

    3 算法效果对比

    4 FPGA实现

           首先根据计算公式,在FPGA中要依次统计RGB三通道的均值、最大值,并计算均值和最大值的平方。其次,要根据方程组分别解出R和B通道的2个校正系数u和v。最后,按照校正公式将u、v代入计算出校正后的R和B。

           针对1280*1024,8bit图像的自动白平衡算法模块资源消耗如下:

           需要算法FPGA源码请私信。

  • 相关阅读:
    推荐一个高效测试用例工具:XMind2TestCase..
    前端架构选择
    c++ 移动构造方法为什么要加noexcept
    VLAN间路由课堂总结及园区网组网实验
    Vue——Vue简介、MVC与MVVM之间的区别(面试题)、条件渲染 (面试)、循环渲染(面试)、面试题/笔试题
    (附源码)node.js电商管理系统 毕业设计 251001
    通讯录的动态版本
    Freeswitch学习笔记(三):配置
    Linux下 coredump 文件定位方法说明
    PROBIS铂思金融破产后续:ASIC牌照已注销
  • 原文地址:https://blog.csdn.net/MmikerR/article/details/133176314