Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >白平衡初探

白平衡初探

作者头像
FPGA开源工作室
发布于 2020-07-22 12:04:25
发布于 2020-07-22 12:04:25
1.5K00
代码可运行
举报
文章被收录于专栏:FPGA开源工作室FPGA开源工作室
运行总次数:0
代码可运行

1 什么叫白平衡

什么是白平衡呢?白平衡的英文为White Balance,其基本概念是“不管在任何光源下,都能将白色物体还原为白色”,对在特定光源下拍摄时出现的偏色现象,通过加强对应的补色来进行补偿。相机的白平衡设定可以校准色温的偏差,在拍摄时我们可以大胆地调整白平衡来达到想要的画面效果。

白平衡,字面上的理解是白色的平衡。白平衡是描述显示器中红、绿、蓝三基色混合生成后白色精确度的一项指标。白平衡是电视摄像领域一个非常重要的概念,通过它可以解决色彩还原和色调处理的一系列问题。白平衡是随着电子影像再现色彩真实而产生的,在专业摄像领域白平衡应用的较早。家用电子产品(家用摄像机、数码照相机)中也广泛地使用,然而技术的发展使得白平衡调整变得越来越简单容易,但许多使用者还不甚了解白平衡的工作原理,理解上存在诸多误区。它是实现摄像机图像能精确反映被摄物的色彩状况,有手动白平衡和自动白平衡等方式。许多人在使用数码摄像机拍摄的时候都会遇到这样的问题:在日光灯的房间里拍摄的影像会显得发绿,在室内钨丝灯光下拍摄出来的景物就会偏黄,而在日光阴影处拍摄到的照片则莫名其妙地偏蓝,其原因就在于白平衡的设置上。

在我们使用的相机上,都可以设定白平衡,大多数的人都设定成自动白平衡,这个方式简单又方便,大部分情况下也可以满足日常拍摄的需求。相机会分析我们拍摄场景的光线环境,并且尽力还原白色,光的色调是通过色温来实现的,色温会告诉相机这些光是暖色调还是冷色调。在我们使用的相机上,都可以设定白平衡,大多数的人都设定成自动白平衡,这个方式简单又方便,大部分情况下也可以满足日常拍摄的需求。相机会分析我们拍摄场景的光线环境,并且尽力还原白色,光的色调是通过色温来实现的,色温会告诉相机这些光是暖色调还是冷色调。

2 色温是什么?

色温说的是光线的温度,比如暖光或者冷光。色温的测量单位是开尔文,表示为K,也就是我们平常经常再说色温的时候,见到的比如5000k, 4500k这个概念。

1)冷光,色温高,偏蓝

2)暖光,色温低,偏红

现在我们是不是大概明白色温的意思了。色温其实并不难懂,上图当中色温从高到低,颜色也由偏蓝的冷光到偏黄的暖光。

3 常见的色温

有一些常见的场景的色温,我们需要比较熟悉,这样可以帮助我们快速的判断我们的拍摄场景,选择合适的色温。

  • 阴天的下午或阴天:6000-7000K
  • 直接正午的阳光:5200-5500K
  • 白色荧光灯:4000K
  • 白炽灯:2800K
  • 蜡烛:1800K

4 白平衡算法

1)原始的灰度世界算法

灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K。一般有两种方法来确定该灰度。

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

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

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

Kr=K/Raver;

Kg=K/Gaver;

Kb=K/Baver;

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

Rnew = R * Kr;

Gnew = G * Kg;

Bnew = B * Kb;

对于上式,计算中可能会存在溢出(>255,不会出现小于0的)现象,处理方式有两种。

a、 直接将像素设置为255,这可能会造成图像整体偏白。

b、 计算所有Rnew、Gnew、Bnew的最大值,然后利用该最大值将将计算后数据重新线性映射到[0,255]内。实践证明这种方式将会使图像整体偏暗,建议采用第一种方案。

Matlab 实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
close allclear allclcI=imread('test1.jpg');[H,W,L]=size(I);%得到图像长宽高Rsum = 0;Gsum = 0;Bsum = 0;Rsum = double(Rsum);Gsum = double(Gsum);Bsum = double(Bsum);for i = 1 : H    for j = 1 :W        Rsum = Rsum + double(I(i,j,1));        Gsum = Gsum + double(I(i,j,2));        Bsum = Bsum + double(I(i,j,3));    endendRaver = Rsum / (H*W);Gaver = Gsum / (H*W);Baver = Bsum / (H*W);%K=128;%第一种K取值方法K = (Raver+Gaver+Baver)/3;%第二种方法Rgain = K / Raver;Ggain = K / Gaver;Bgain = K / Baver;Iwb(:,:,1) = I(:,:,1) * Rgain;Iwb(:,:,2) = I(:,:,2) * Ggain;Iwb(:,:,3) = I(:,:,3) * Bgain;imwrite(Iwb,'Result1.jpg');figure(1),subplot(121),imshow(I),title('原始图像');subplot(122),imshow(Iwb),title('自动白平衡图像');

2)完美反射算法

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

(1)计算每个像素的R\G\B之和,并保存到一临时内存块中。

(2)按R+G+B值的大小计算出其前10%或其他Ratio的白色参考点的的阈值T。

(3)遍历图像中的每个点,计算其中R+G+B值大于T的所有点的R\G\B分量的累积和的平均值。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Matlab:%完美反射算法--ABWclose allclear allclcI=imread('test7.jpg');I=im2double(I);R=I(:,:,1);G=I(:,:,2);B=I(:,:,3);%1)计算每个像素的R\G\B之和,并保存到一临时内存块中。RGBsum=R+G+B;%2)按R+G+B值的大小计算出其前10%或其他Ratio的白色参考点的的阈值T。sumsort=sort(RGBsum(:)');count=round(size(sumsort,2)*0.9);T=sumsort(count);index=RGBsum>T;KR=max(R(:))/mean(R(index));KG=max(G(:))/mean(G(index));KB=max(B(:))/mean(B(index));R1=R*KR;G1=G*KG;B1=B*KB;out=cat(3,R1,G1,B1);figure(1),subplot(121),imshow(I),title('原始图像');subplot(122),imshow(out),title('完美反射法')

3)动态阈值法

(1). 把图像w*h从RGB空间转换到YCrCb空间。

(2). 选择参考白色点:

a. 把图像分成宽高比为4:3个块(块数可选)。

b. 对每个块,分别计算Cr,Cb的平均值Mr,Mb。

c. 对每个块,根据Mr,Mb,用下面公式分别计算Cr,Cb的方差Dr,Db。

d. 判定每个块的近白区域(near-white region)。

判别表达式为:

设一个“参考白色点”的亮度矩阵RL,大小为w*h。

若符合判别式,则作为“参考白色点”,并把该点(i,j)的亮度(Y分量)值赋给RL(i,j);

若不符合,则该点的RL(i,j)值为0。

(3). 选取参考“参考白色点”中最大的10%的亮度(Y分量)值,并选取其中的最小值Lu_min.

(4). 调整RL,若RL(i,j)<Lu_min, RL(i,j)=0; 否则,RL(i,j)=1;

(5). 分别把R,G,B与RL相乘,得到R2,G2,B2。 分别计算R2,G2,B2的平均值,Rav,Gav,Bav;

(6). 得到调整增益:

Ymax=double(max(max(Y)))/5;

Rgain=Ymax/Rav;

Ggain=Ymax/Gav;

Bgain=Ymax/Bav;

(7). 调整原图像:

Ro= R*Rgain;

Go= G*Ggain;

Bo= B*Bgain;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Matlab:clear all;close all;clc;I=imread('test1.jpg');im1=rgb2ycbcr(I);%将图片的RGB值转换成YCbCr值%Lu=im1(:,:,1);Cb=im1(:,:,2);Cr=im1(:,:,3);[H, W, L]=size(I);tst=zeros(H,W);%计算Cb、Cr的均值Mb、Mr%Mb=mean(mean(Cb));Mr=mean(mean(Cr));%计算Cb、Cr的均方差%Db=sum(sum(Cb-Mb))/(H*W);Dr=sum(sum(Cr-Mr))/(H*W);%根据阀值的要求提取出near-white区域的像素点%cnt=1;    for i=1:H    for j=1:W        b1=Cb(i,j)-(Mb+Db*sign(Mb));        b2=Cr(i,j)-(1.5*Mr+Dr*sign(Mr));        if (b1<abs(1.5*Db) & b2<abs(1.5*Dr))           Ciny(cnt)=Lu(i,j);           tst(i,j)=Lu(i,j);           cnt=cnt+1;        end    endendcnt=cnt-1;iy=sort(Ciny,'descend');%将提取出的像素点从亮度值大的点到小的点依次排列%nn=round(cnt/10);Ciny2(1:nn)=iy(1:nn);%提取出near-white区域中10%的亮度值较大的像素点做参考白点%%提取出参考白点的RGB三信道的值%mn=min(Ciny2);for i=1:H    for j=1:W        if tst(i,j)<mn           tst(i,j)=0;        else           tst(i,j)=1;        end    endendR=I(:,:,1);G=I(:,:,2);B=I(:,:,3);R=double(R).*tst;G=double(G).*tst;B=double(B).*tst;%计算参考白点的RGB的均值%Rav=mean(mean(R));Gav=mean(mean(G));Bav=mean(mean(B));Ymax=double(max(max(Lu)))/15;%计算出图片的亮度的最大值%%计算出RGB三信道的增益%Rgain=Ymax/Rav;Ggain=Ymax/Gav;Bgain=Ymax/Bav;%通过增益调整图片的RGB三信道%im(:,:,1)=I(:,:,1)*Rgain;im(:,:,2)=I(:,:,2)*Ggain;im(:,:,3)=I(:,:,3)*Bgain;%显示图片%figure(1),subplot(121),imshow(I),title('原始图像');subplot(122),imshow(im),title('动态阈值法');
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA开源工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于FPGA的自动白平衡算法的实现(附代码)
对于白平衡基本概念的详细介绍请查看文章《白平衡初探》,白平衡算法主要的作用是将偏暖或者偏冷的色调自动恢复到正常色调,是图像看起来更加色彩饱满正常。
FPGA技术江湖
2021/04/07
2.1K0
基于FPGA的自动白平衡算法的实现(附代码)
OpenCV图像处理专栏十一 | IEEE Xplore 2015的图像白平衡处理之动态阈值法
这是OpenCV图像处理专栏的第十一篇文章,之前介绍过两种处理白平衡的算法,分别为灰度世界算法和完美反射算法。今天来介绍另外一个自动白平衡的算法,即动态阈值法,一个看起来比较厉害的名字。论文原文链接放在附录。
BBuf
2019/12/30
1K0
相机中白平衡的算法模拟实现
相机主要技术点为3A算法。 而3A算法主要指的是自动对焦(AF)、自动曝光(AE)及自动白平衡(AWB)。 自动白平衡:根据光源条件调整图片颜色的保真程度。 网上时常有类似招聘如下的招聘信息:   ---------------------------------------------- ---------------------------------------------- Camera/ISP 算法工程师 摄像机3A算法软件工程师  这里随机摘录一些具体要求。 任职要求: 1、本科以上学历,天文
cpuimage
2018/04/12
2.1K0
相机中白平衡的算法模拟实现
android 高斯模糊实现
高斯模糊 高斯模糊就是将指定像素变换为其与周边像素加权平均后的值,权重就是高斯分布函数计算出来的值。 一种实现 点击打开链接<-这里是一片关于高斯模糊算法的介绍,我们需要首先根据高斯分布函数计算权重值,为了提高效率我们采用一维高斯分布函数,然后处理图像的时候在横向和纵向进行两次计算得到结果。下面是一种实现 public static void gaussBlur(int[] data, int width, int height, int radius,   float sigma) {  
xiangzhihong
2018/02/01
1.6K0
android 高斯模糊实现
为什么做白平衡?康耐视Visionpro和Basler pylon,海康MVS如何做白平衡-三种软件相同条件下,白平衡效果一样?
由于在不同色温下各种波长光纤比例的不同,造成白色在高色温的光线照射下显得较蓝,在低色温度的光线下显得较黄。如下图:
视觉人机器视觉
2023/05/09
1.3K0
为什么做白平衡?康耐视Visionpro和Basler pylon,海康MVS如何做白平衡-三种软件相同条件下,白平衡效果一样?
自动白平衡之完美反射算法原理及C++实现
昨天介绍的灰度世界算法是最原始的处理白平衡的算法。今天要介绍的完美反射算法也是自动白平衡常用的算法之一。一起来看看吧。
BBuf
2019/12/04
1.8K0
自动白平衡之完美反射算法原理及C++实现
3A之自动白平衡(AWB)篇
人眼视觉系统具有颜色恒常性的特点,对物体的观察不受光源的影响。本质上是白色的物体,在不同色温,反射光线颜色不同的场景下,经过人眼的视觉系统矫正后还是白色;而对于Camera来说,不同色温,反射光线颜色不同,直接成像会有偏色现象发生。如下图所示,可以看到阴影区域的白色部分偏蓝:
雪月清
2020/08/18
4.1K0
快速均值模糊算法
前段时间在网上看到一个快速均值模糊算法,性能很不错。 源博客: http://www.lellansin.com/super-fast-blur-%E6%A8%A1%E7%B3%8A%E7%AE%97
cpuimage
2018/04/12
7950
快速均值模糊算法
IOS – OpenGL ES 调节图像白平衡/色温 GPUImageWhiteBalanceFilter
GPUImageWhiteBalanceFilter 属于 GPUImage 颜色处理相关,用来处理图片白平衡/色温
猿说编程[Python和C]
2023/03/23
5100
isp调试工具环境搭建及其介绍!
后期调试isp,是在rv1126提供的RKISP2.x Tuner工具上进行调试,所以我们大前提必须要把这个环境和一些操作先搞熟悉来,后面有一些专用术语,我们遇到了再去看,现在专门看一些专用术语,也记不住,也不知道他是干嘛用的,所以我们用到了,再去查看,这样可以节约学习成本,提高学习效率!比如下面这些专用名称:
用户6280468
2023/08/31
2.7K0
isp调试工具环境搭建及其介绍!
OpenHarmony轻松玩转GIF数据渲染
OpenAtom OpenHarmony(以下简称“OpenHarmony”)提供了Image组件支持GIF动图的播放,但是缺乏扩展能力,不支持播放控制等。今天介绍一款三方库——ohos-gif-drawable三方组件,带大家一起玩转GIF的数据渲染,搞定GIF动图的各种需求。
小帅聊鸿蒙
2025/04/22
750
OpenHarmony轻松玩转GIF数据渲染
影视后期: PR 调色处理之调色工具面板介绍
是指色彩的鲜艳程度,也被称为色彩的纯度。具体来说,它表示色相中灰色分量所占的比例,使用从0%(灰色)至100%(完全饱和)的百分比来度量。
山河已无恙
2024/01/02
1.4K0
影视后期: PR 调色处理之调色工具面板介绍
ISP基础(06):AWB算法
人的视觉和神经系统具有色彩恒常性,在看到白色物体的时候基本不受环境的变化。比如阴天、晴天、室内、室外、日光灯、白炽灯等的环境下,人的视觉中白纸基本保持色彩不变,但是 image sensor 这种电子器件没有心理和神经调节作用。不同色温光源下,拍出的照片中白色会出现偏色的情况。
233333
2020/11/24
4.4K0
ISP基础(06):AWB算法
ISP Pipeline | camera成像原理
由于Sensor漏电流存在,刚把镜头放入一个全黑的环境,Sensor输出的原始数据不为0;而我们希望全黑时原始数据为0。
iResearch666
2023/12/14
1.7K0
ISP Pipeline | camera成像原理
相机图像信号处理流程(ISP)
本文是图像信号处理流程的一个总体的介绍,以便更好理解一张照片究竟是如何诞生的,实际的技术要复杂很多。
混说Linux
2023/12/11
1.4K1
相机图像信号处理流程(ISP)
AISP Pipeline | 端到端camera成像原理
⚡ Model-Based Image Signal Processors via Learnable Dictionaries
iResearch666
2023/12/14
7531
AISP Pipeline | 端到端camera成像原理
数字成像系统概述
当你打开手机准备拍照,镜头(Lens)会首先把被摄景物投影在图像传感器(Sensor)上,与此同时,影像处理器(ISP)会通过测光、测距算出合适的参数并指示镜头对焦,随着你按下拍照键,图像传感器(Sensor)会完成一次曝光,并通过影像处理器(ISP)变成图片,再经手机应用的后期处理,最终呈现在屏幕上。
雪月清
2020/09/01
1.7K0
数字成像系统概述
MATLAB基于直方图的图像去雾
直方图是图像的一种统计表达形式,在一定程度上能够反映数学图像的概貌性描述,包括图像的灰度范围、灰度分布、整幅图像的亮度均值、阴暗对比度等,并可以此为基础进行分析来得出对图像进一步处理的重要依据。直方图均衡化也叫作直方图均匀化,就是把给定图像的直方图分布变换成均匀分布的直方图,是较为常用的灰度增强算法。直方图均衡化概括起来包括以下三个主要步骤。
巴山学长
2021/07/09
1.1K0
MATLAB基于直方图的图像去雾
自动曝光修复算法 附完整C代码
AF自动对焦(Automatic Focus) 自动对焦即调节摄像头焦距自动得到清晰的图像的过程
cpuimage
2018/06/02
2.9K0
Android性能优化实战之界面卡顿
作者:红橙Darren https://www.jianshu.com/p/18bb507d6e62
用户1269200
2018/12/18
9530
Android性能优化实战之界面卡顿
相关推荐
基于FPGA的自动白平衡算法的实现(附代码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验