图像处理中的白平衡

2012-11-03 10:30:00 weixin_34190136 阅读数 90
  • 自动白平衡

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发,获得理论与实际的帮助。

    822人学习 姜卓
    免费试看

 

自动白平衡原理: 1. 因为光照或其它原因,会使原来的颜色产生偏色 2. 在灰色时候最为明显 如 本来 200,200,200的点, 变为,209,201,192 3. 自动白平衡的原理,就是把,本来是灰色(RGB相等的点)的点, 仍旧调整为灰色! 实现: 1. 根据统计学,一张灰片上最亮,最暗的部分,一般为灰色 2. 计算,最亮部分RGB, 3. 计算,最暗部分RGB 4. 目标,最亮部分将由RGB转为RRR 5. 目标,最暗部分将由RGB转为RRR 6. 根据简单的,一元一次方程,得到所有调整后的像素(注意像素值在 0-255之间) 7. 完成

 

 

 

 

 

转载于:https://www.cnblogs.com/signal/archive/2012/11/03/2752252.html

2018-10-18 11:28:46 mzl_18353516147 阅读数 1041
  • 自动白平衡

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发,获得理论与实际的帮助。

    822人学习 姜卓
    免费试看

为了更好的显示图像画质或者电视机的画质,通常需要对画面进行白平衡调节,这里介绍一种简单的均值系数白平衡调节方法,并提供代码和运行结果图,便于大家直观的初步理解白平衡调节。

clc;  
clear;
img=imread('desert.jpg'); %读入三通道彩色图像
AveR=mean(mean(img(:,:,1)));  %获取R通道像素均值
AveG=mean(mean(img(:,:,2)));  %获取G通道像素均值
AveB=mean(mean(img(:,:,3)));  %获取通道像素均值
Qr=129/AveR;   %求取R通道系数
Qg=129/AveG;   %求取G通道系数
Qb=129/AveB;   %求取B通道系数
img0(:,:,1)=Qr*img(:,:,1); %求取变换后的R通道图像
img0(:,:,2)=Qg*img(:,:,2);%求取变换后的G通道图像
img0(:,:,3)=Qb*img(:,:,3);%求取变换后的B通道图像
figure,imshow(img),title('原图像');  
figure,imshow(img0),title('白平衡变化后的图像'); 

测试结果显示:

                                                                                                             原图像

                                                                                                         变换后的图像

 

2012-02-23 10:19:05 hellmonky 阅读数 6340
  • 自动白平衡

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发,获得理论与实际的帮助。

    822人学习 姜卓
    免费试看

转载请注明出处和作者,谢谢合作!!!

使用相机等采集图像的过程中,往往由于成像过程中的感光元件或者镜头会对原始色彩造成影响,为了校正这种光线和镜头对颜色影响,都会加入白平衡来对成像结果进行调整,那么今天就介绍一个最简单的白平衡处理方法:灰色世界方法

话不多说了,有不懂原理的可以留言,直接上测试通过的代码:

im = imread('1.jpg','jpg');
im = double(im)./256;
r = im(:,:,1);
g = im(:,:,2);
b = im(:,:,3);
avgR = mean(mean(r));
avgG = mean(mean(g));
avgB = mean(mean(b));
avgGray = (avgR + avgG + avgB)/3;
if avgR == 0
	outR = r;
else
	outR = (avgGray/avgR).*r;
end

if avgG == 0
	outG = g;
else
	outG = (avgGray/avgG).*g;
end

if avgB == 0
	outB = b;
else
	outB = (avgGray/avgB).*b;
end

maxRGB = [max(max(outR)) max(max(outG)) max(max(outG))];

factor = max(maxRGB);
if  factor > 1
	outR = outR./factor;
	outG = outG./factor;
	outB = outB./factor;
end

GWoutIm(:,:,1) = outR;
GWoutIm(:,:,2) = outG;
GWoutIm(:,:,3) = outB;

imshow(GWoutIm);

imwrite(GWoutIm, 'testout.jpg', 'jpg');

avgIn1RGB = [mean(mean(r)) mean(mean(g)) mean(mean(b))];
avgGW1RGB = [mean(mean(outR)) mean(mean(outG)) mean(mean(outB))];
avgIn1 = mean([mean(mean(r)) mean(mean(g)) mean(mean(b))]);
avgGW1 = mean([mean(mean(outR)) mean(mean(outG)) mean(mean(outB))]);

一下是测试图像(来源自网络):

原始图像(色调偏冷)


处理以后的图像(色调转暖):


谢谢您的支持,有任何的问题欢迎留言

2015-01-19 09:05:11 scottly1 阅读数 9381
  • 自动白平衡

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发,获得理论与实际的帮助。

    822人学习 姜卓
    免费试看

白平衡,即所谓的白色的平衡。

白平衡的算法有很多,这里记录的是最简单实用的白平衡算法,即灰色世界法!

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


下面是具体的算法代码:

RGB=imread('test.jpg');

R = RGB(:,:,1);      G = RGB(:,:,2);      B = RGB(:,:,3);
Rx4 = RGB(:,:,1)*4;  Gx4 = RGB(:,:,2)*4;  Bx4 = RGB(:,:,3)*4; //Rx4只是做了一个简单的线性的提亮,可以不用参考。

Rave = mean(mean(R)); 
Gave = mean(mean(G)); 
Bave = mean(mean(B));
Kave = (Rave + Gave + Bave) / 3;

R1 = (Kave/Rave)*R; G1 = (Kave/Gave)*G; B1 = (Kave/Bave)*B; 
R2 = (Kave/Rave)*Rx4; G2 = (Kave/Gave)*Gx4; B2 = (Kave/Bave)*Bx4; 

RGB_white = cat(3, R1, G1, B1);
RGB_whitex4 = cat(3, R2, G2, B2);

RGB_white_out = uint8(RGB_white); RGB_white_outx4 = uint8(RGB_whitex4);

下面是算法的效果:

原图:



白平衡之后:



可见,最原始的算法,效果还是不错的,后面有机会会补充其他好一些的算法。


注:原创文章,转载请注明出处: http://blog.csdn.net/scottly1/article/details/42741495


2017-10-16 23:10:09 helimin12345 阅读数 9283
  • 自动白平衡

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发,获得理论与实际的帮助。

    822人学习 姜卓
    免费试看

 

%%白平衡与色温紧密相关,不同色温光源下图像会呈现不同程度的偏色
%%由于人眼独特的适应性,在不同光照条件下观看物体时不会出现偏色,而就没这么先进了
%%蓝色光色温高,红色光色温低
 
clc;
clear all;
close all;
tic;
imgSrc = imread('E:\picture\03-work\02-imgProc\00-ISP\wb_sardmen-incorrect.jpg');
imgDst = imgSrc;
%%第一步,计算三个通道的平均灰度
imgR = imgSrc(:,:,1);
imgG = imgSrc(:,:,2);
imgB = imgSrc(:,:,3);
RAve = mean2(imgR);
GAve = mean2(imgG);
BAve = mean2(imgB);
aveGray = (RAve + GAve + BAve) / 3;
%%第二步,计算三个通道的增益系数
RCoef = aveGray / RAve;
GCoef = aveGray / GAve;
BCoef = aveGray / BAve;
%%第三步,使用增益系数来调整原始图像
RCorrection = RCoef * imgR;
GCorrection = GCoef * imgG;
BCorrection = BCoef * imgB;
imgDst(:,:,1) = RCorrection;
imgDst(:,:,2) = GCorrection;
imgDst(:,:,3) = BCorrection;
figure,subplot(1,2,1),imshow(imgSrc),title('original image');
subplot(1,2,2),imshow(imgDst),title('white balanced image');
toc;


白平衡,顾名思义,即白色的平衡,由于人眼的适应性,在不同色温下,都能准确判断出白色,但是相机就差远了,在不同色温的光源下,图像会出现偏色,与人眼看到的颜色不一致,因此需要进行白平衡处理。在数码相机中,往往有ISP,这里面会做AWB(自动白平衡)处理。

 

下面先来说说白平衡与色温,然后介绍一种简单的白平衡算法,并且考虑其硬件化实现。

白平衡后的图像看起来更真实,这里说的真实,是指人眼实际看到的效果。

  1. 白平衡与色温

色温指某一温度下黑体所辐射的光谱,我们知道,blackbody吸收所有光谱,既不反射也不透过,因此,我们看到的黑体的颜色只与其表面温度相关。不同温度下黑体辐射出的光谱相对强度如下,可以看出,温度升高时,辐射的峰值波长在向短波方向移动,我们知道,温度越高,能量越大,而红橙黄绿蓝锭紫,波长依次减小,光子能量依次增大。因此,色温越高,光线越偏冷色,色温越低,光线越偏暖色

有些数码相机在做白平衡时,可以手动选择光源,不同光源的色温如下:

自动白平衡(auto white balance,AWB),相对来说可能没有手动白平衡效果好,对于非摄影应用来说,由于无须人为设置,而广泛应用成像监控领域。

  1. 白平衡的方法介绍

白平衡的算法很多,有灰度世界法,完美反射法、动态阈值法,这里先介绍一种比较简单的,灰度世界法。

该方法以灰度世界假设为前提,认为对于一幅有大量色彩的场景,R、G、B分量的平均值趋于同一个灰度。算法大致可以分为以下三步:

  1. 计算三个通道的平均灰度
  2. 计算三个通道的增益系数
  3. 原始值乘上增益系数

matlab代码如下:

 

效果如下,该算法适用于有大量色彩的场景。

  1. 考虑硬件化实现

对于数字硬件来说,要考虑算法硬件实现的可能性,一般来说,可以利用帧间数据相关性,使用上一帧计算得到的各个分量的增益系数来完成图像数据的调整。算法实现如下:

  1. 帧有效期间,完成各个分量数据的累加;
  2. 帧消隐期间,完成通道平均灰度与增益系数的计算;
  3. 下一帧有效期间,使用上一帧计算的增益系数完成数据调整,同时,完成各个分量数据的累加,依此下去。

 

参考:

[1] http://www.cambridgeincolour.com/tutorials/white-balance.htm

[2] https://www.cnblogs.com/Imageshop/archive/2013/04/20/3032062.html