Matlab常用白平衡算法
matlab颜色数值
matlab颜色数值1. 引言Matlab是一种广泛应用于科学计算和工程领域的编程语言和环境。
在Matlab中,颜色的数值表示是一项重要的功能,它允许用户在绘图、图像处理和数据可视化等方面进行精确的控制。
本文将深入探讨Matlab中颜色数值的相关知识,包括RGB、HSV、CMYK等不同表示方式,以及如何使用这些数值来创建各种吸引人的图形效果。
2. RGB表示方式RGB是一种将颜色表示为红、绿、蓝三个分量混合而成的模型。
在Matlab中,RGB数值通常使用0到255之间的整数来表示。
例如,纯红色可以用(255,0,0)来表示。
通过调整这三个分量的数值可以创建出各种不同亮度和饱和度的颜色。
3. HSV表示方式HSV是一种将颜色表示为色调(Hue)、饱和度(Saturation)和亮度(Value)三个分量组合而成的模型。
在Matlab中,HSV数值通常使用0到1之间的小数来表示。
通过调整这三个分量可以实现更加直观且易于理解的颜色控制。
4. CMYK表示方式CMYK是一种将颜色表示为青、品红、黄、黑四个分量混合而成的模型。
在Matlab中,CMYK数值通常使用0到1之间的小数来表示。
CMYK模型常用于打印颜色的控制,通过调整这四个分量可以实现更准确的颜色匹配。
5. Matlab中颜色数值的应用在Matlab中,颜色数值广泛应用于图形绘制、图像处理和数据可视化等方面。
通过精确控制颜色数值,用户可以创建出各种吸引人且具有个性化特点的图形效果。
6. 图形绘制中的颜色控制在Matlab中,用户可以使用RGB、HSV或CMYK等表示方式来指定绘图对象(如线条、点和面)的颜色。
通过调整这些数值可以实现对线条粗细和透明度等方面进行精确控制。
7. 图像处理中的颜色控制在Matlab中,用户可以使用RGB或HSV等表示方式来对图像进行处理。
通过调整这些数值可以实现对亮度、对比度和饱和度等方面进行精确调整。
8. 数据可视化中的颜色控制在Matlab中,用户可以使用RGB或HSV等表示方式来创建各种数据可视化效果。
面阵ccd颜色识别与变换matlab代码
一、引言面阵CCD(Charge-Coupled Device)是一种常用的图形传感器,可用于获取图像信息。
在计算机视觉领域,图像的颜色识别与变换是一项重要的任务,而MATLAB作为一种强大的技术计算软件,提供了丰富的工具和函数,可以帮助我们实现对面阵CCD图像的颜色识别与变换。
本文将介绍如何利用MATLAB实现对面阵CCD图像的颜色识别与变换,并给出相应的代码和示例。
二、面阵CCD颜色识别1. 获取图像在进行面阵CCD颜色识别之前,首先需要获取一张面阵CCD图像。
可以通过MATLAB的图像处理工具箱中的函数来读取图像,例如imread函数。
2. 颜色空间转换面阵CCD图像通常以RGB颜色空间表示,而在进行颜色识别时,通常会将图像转换到其他颜色空间,比如HSV或Lab颜色空间。
可以利用MATLAB提供的rgb2hsv和rgb2lab函数来实现颜色空间的转换。
3. 颜色分割一旦图像转换到目标颜色空间,就可以进行颜色分割操作,将目标颜色区域提取出来。
MATLAB提供了一系列的图像分割函数,比如imfindcircles和regionprops,可以根据特定的颜色特征来分割图像。
三、面阵CCD颜色变换1. 色彩空间转换对于面阵CCD图像的颜色变换,我们可以利用MATLAB提供的颜色空间转换函数,比如rgb2gray和rgb2hsv,将图像转换到目标色彩空间。
2. 色彩增强一旦图像转换到目标色彩空间,就可以对图像进行色彩增强操作。
MATLAB中的imadjust函数可以帮助我们对图像的色彩进行调整,以实现颜色的变换和增强。
3. 色彩映射我们还可以利用MATLAB提供的颜色映射函数,比如ind2rgb和imfuse,将图像的颜色映射到其他色彩空间或者进行多通道的颜色融合。
四、MATLAB代码示例以下是一个简单的MATLAB代码示例,用于实现面阵CCD图像的颜色识别与变换:```matlab读取图像img = imread('ccdim.png');颜色空间转换img_hsv = rgb2hsv(img);颜色分割mask = img_hsv(:,:,1) > 0.5 img_hsv(:,:,2) > 0.3;显示结果subplot(1,2,1), imshow(img), title('原始图像');subplot(1,2,2), imshow(mask), title('颜色分割结果');```五、结论本文介绍了如何利用MATLAB实现对面阵CCD图像的颜色识别与变换,并给出了相应的代码和示例。
白平衡算法总结
Cb(i, j) − Mb ) N Cr(i, j) − Mr ) N
Dr =
i ,j (
为了提高算法的稳健性,将图片分为几个区域并且计算每个区域 的 Mb、Mr、Db、Dr,如果一个区域的 Db,Dr 太小,那么这个区域 就没有足够的色彩变化,就可以丢弃掉了。这样可以避免大面积的统 一色调对结果的影响。
8
%计算 Cb、Cr 的均值 Mb、Mr% Mb=sum(sum(Cb)); Mr=sum(sum(Cr)); Mb=Mb/(x*y); Mr=Mr/(x*y); %计算 Cb、Cr 的均方差% Db=sum(sum(Cb-Mb))/(x*y); Dr=sum(sum(Cr-Mr))/(x*y); %根据阀值的要求提取出 near-white 区域的像素点% cnt=1; for i=1:x for j=1:y 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 end end cnt=cnt-1;
9
iy=sort(Ciny,'descend');%将提取出的像素点从亮度值大的点到小 的点依次排列% nn=round(cnt/10); Ciny2(1:nn)=iy(1:nn);%提取出 near-white 区域中 10%的亮度值较 大的像素点做参考白点% %提取出参考白点的 RGB 三信道的值% mn=min(Ciny2); c=0; for i=1:x for j=1:y if tst(i,j)<mn tst(i,j)=0; else tst(i,j)=1; c=c+1; end end end R=im(:,:,1); G=im(:,:,2); B=im(:,:,3); R=double(R).*tst;
白平衡算法——gamma算子
传统CRT:
二、基于伽马变换的图像增强
原理步骤:
归一化
补偿
反归一化
二、伽马变换原理
归一化: y cr , r [0,1]
将像素值转换为 0 ~ 1 之间的实数。 算法如下 :r= ( i + 0. 5)/256 这里包含 1 个除 法和 1 个加法操作。对于像素 A 而言 , 其对应的归一化值为 0. 783203 。
LUT[i] = intTemp; }
二、程序的实现
//单通道 if (resultImage->nChannels == 1) {
for (int i = 0; i < resultImage->height; i++) {
for (int j = 0; j < resultImage->width; j++) {
假设像素值 i=200
1 1 0.4545
gamma 2.2 0.783203 0.894872
二、伽马变换原理
反归一化:
将经过预补偿的实数值反变换为 0 ~ 255 之间的整数值。具体算法为 : f*256 - 0.
5 此步骤包含一个乘法和一个减法运算。续前 例 , 将 A 的预补偿结果 0. 894872
float f = (i + 0.5f) / 255; f = (float)(pow(f, kFactor)); int intTemp = f*255.0f - 0.5f; if(intTemp<0) {
intTemp=0; } else if(intTemp>255) {
intTemp=255; }
MATLAB的7种滤波方法(重制版)
MATLAB的7种滤波方法(重制版)滤波是信号和图像处理中常用的一种方法,用于去除噪音,增强信号或图像的特征。
MATLAB提供了丰富的滤波函数和工具箱,包括7种常用的滤波方法,分别是均值滤波、中值滤波、高斯滤波、拉普拉斯滤波、Sobel滤波、Prewitt滤波和Canny边缘检测。
1.均值滤波:均值滤波是使用一个窗口对图像进行平滑处理的方法,窗口内的像素值取平均值作为输出像素值。
这种滤波方法可以有效地去除高频噪声,但会导致图像细节的模糊。
2.中值滤波:中值滤波是一种非线性滤波方法,它使用一个窗口对图像进行平滑处理,窗口内的像素值按照大小排序,然后取中值作为输出像素值。
这种滤波方法能够很好地去除椒盐噪声和脉冲噪声,但无法处理其他类型的噪声。
3.高斯滤波:高斯滤波是一种线性平滑滤波方法,它使用一个高斯函数对图像进行卷积处理,窗口内的像素值按照高斯分布加权求和作为输出像素值。
这种滤波方法能够平滑图像并保持图像的细节信息,但会导致图像的边缘模糊。
4.拉普拉斯滤波:拉普拉斯滤波是一种边缘增强滤波方法,它使用一个拉普拉斯算子对图像进行卷积处理,突出图像中的边缘信息。
这种滤波方法能够提高图像的锐度和对比度,但会增强图像中的噪声。
5. Sobel滤波:Sobel滤波是一种边缘检测滤波方法,它使用Sobel算子对图像进行卷积处理,突出图像中的边缘信息。
这种滤波方法能够检测出图像中的水平和垂直边缘,但对于斜向边缘检测效果较差。
6. Prewitt滤波:Prewitt滤波是一种边缘检测滤波方法,它使用Prewitt算子对图像进行卷积处理,突出图像中的边缘信息。
与Sobel滤波类似,Prewitt滤波也能够检测出图像中的水平和垂直边缘,但对于斜向边缘检测效果较差。
7. Canny边缘检测:Canny边缘检测是一种广泛应用的边缘检测算法,它使用多个步骤对图像进行处理,包括高斯滤波、计算梯度、非极大值抑制和双阈值处理。
这种滤波方法能够检测出图像中的所有边缘,并进行细化和连接,对于复杂的边缘检测有较好的效果。
自动白平衡(AWB)算法
自动白平衡(AWB)算法色温曲线本文大体讲解了白平衡的算法流程,适用于想了解和学习白平衡原理的筒子们.一般情况下要实现AWB算法需要专业的图像和算法基础,本文力图通过多图的方式,深入浅出,降低初学者理解上的门槛,让大家都理解到白平衡算法流程.看到这里还在继续往下瞄的同学,一定知道了色温的概念,并且知道sensor原始图像中的白色如果不经AWB处理,在高色温(如阴天)下偏蓝,低色温下偏黄,如宾馆里的床头灯(WHY!OTZ) (如下图).下面这个T恤的图片非常经典,怎么个经典后续再说,不过大体可以看出有偏黄和偏蓝的情况.虽然如此,却已经是AWB矫正以后的效果.所以,为了眼前的女神白富美在镜头里不变成阿凡达和黄脸婆,这时就需要白平衡来工作了.流程原理很简单:1,在各个色温下(2500~7500)拍几张白纸照片,假设拍6张(2500,3500…7500),可以称作色温照.2,把色温照进行矫正,具体是对R/G/B通道进行轿正,让偏色的白纸照变成白色,并记录各个通道的矫正参数.实际上只矫正R和B通道就可以,这样就得到了6组矫正参数(Rgain,Bgain).3,上面是做前期工作,爱思考的小明发现,只要知道当前场景是什么色温,再轿正一下就可以了.事实上也就是如此.所以,AWB算法的核心就是判断图像的色温,是在白天,晚上,室内,室外,是烈日还是夕阳,还是在阳光下的沙滩上.或者是在卧室里”暖味”的床头灯下.之前拍了6张色温照以及6组矫正参数.可是6够么,当然不够, 插值一下可以得到无数个值,我们把点连成线, 得到了一个神奇的曲线------色温曲线.大概是下面这个样子.上面提到了三个值(RG,BG,色温),这应该是个三维的.没关系,我们再来一条RG跟色温的曲线,这样只要知道色温,就知道RG,知道RG,就知道BG,知道RG,BG就能轿正了,yes!至此,我们的前期工作已经全部做完了, 并得到了AWB的色温曲线,下一步只要计算得到当前色温,顺藤摸瓜就能得到当前的矫正参数(Rgain,Bgain),那白平衡的工作就作完了.(放心,当然没这么简单)第一部分先到这里,下一部分将讲解AWB算法的核心------计算图像色温.涉及到的知识点大致有图像分块, 判断白区, 根据色温曲线划分不同光源, 对不同光源加权平均得到实际色温.色温计算首先简单说一下流程:1, 取一帧图像数据,并分成MxN块,假设是25x25,并统计每一块的基本信息(,白色像素的数量及R/G/B通道的分量的均值).2, 根据第1步中的统计值, 找出图像中所有的白色块,并根据色温曲线判断色温.3, 至此,我们得出来了图像中所有的可能色温,如果是单一光源的话,可以取色温最多的,当作当前色温.比如25x25=625 个块中,一共找出了100个有效白色块, 里面又有80个白色块代表了色温4500左右, 那当前色温基本就是4500.根据4500色温得出的Rgain,Bgain来调整当前图像,就不会差(很多!).下面我们再详细讲解一下,每一步中需要做的工作:第1步, 计算每一块的基本信息.关于白色像素统计,大家知道sensor原始图像是偏色的,怎么统计块中的白色点呢,那只有设置一个颜色范围,只要在范围中,就可以认为是白色像素,范围见下图:统计白色像素个数的用处是,1,如果块中的白色像素太少,可以抛弃掉. 2,如果白色像素太多,多到每一个像素点都是,那也要抛弃掉,因为很可能在该区域过曝了接着把统计到的白色像素点R/G/B取均值, 并得到该block 的R/G, B/G值至此,我们得到了每一块的白点数目及R/G,B/G的值. (请自动对应第1部分中色温曲线).第二步计算当前色温这个比较复杂, 大自然绚丽多彩,景色万千. 上一步中统计的”白色点”难免会有失误的地方,比较常见的如黄色皮肤容易被误判为低色温下的白点,淡蓝色的窗帘,容易被误判为高色温下的白点,一张图中既有白色,也有黄色,也有蓝色的时候,是不是感觉情况有点复杂,其它的大家可继续脑补.这时我们需要一定的策略来正确的判断出到哪个才是真的白.通常我们会把取到的白色块,计算一下到曲线的距离,再设置相应的权重.话不多说,上个图大家就都明白了.假设有上面这样一幅图,该图是在没有开AWB的前提下截取的,可以看到左边白色地方略有偏绿,当前色温是室内白炽灯,大概4000~5000k左右.(请忽略颜色不正的问题,我们在讨论白平衡)下面我们就根据之前的统计信息和测量好的色温曲线进行白平衡矫正.首先要找出白区,如下图:上面这个图中的数字标示出了检测到的白色区域,数字相同的表示一个白区,根据统计信息(白点数,rg/bg值)来区分的.可以看到有误判的地方,比如色卡左上第二块的肤色块.还有最右边从上面数第二块也是容易被判断成低色温白块的情况.针对这种误判的情况,对不同块根据统计信息进行权重设置,以求让误判的区域对最终结果影响小一些.上面这个图标注了权重,基本是根据统计信息中白点数来确定的.可以看到图中一片白色被标识了高权重.其它情况被标识了低权重. 权重高低一是看块中白色点数量,二是看rg/bg到色温曲线的距离.通过上面两个图,大家就可以明显的找到白色区,并根据曲线来矫正,即使不通过曲线矫正,把白色区的r/g,b/g值向1趋近,让r=g=b,也会得到非常好的白平衡效果.如下图所示:至此,白平衡的基本流程就讲完了,有图有真相,大家一定看着也方便.总结一下:第一次做白平衡,感觉理论很简单,不用什么基础也能看懂.实际算法调试时,可谓差之毫厘,失之千里.总是感觉不由自主就走上歪路.中间参考了大量资料,比如网上有许多基于色温/灰度世界/白点检测的白平衡算法,实际个人感觉应该把它们都结合起来,让算法强壮,健康才是我们想要的.还记得第一章中开始的那两张白色T恤的图么,算了,我再贴一下:这张图可以理解为在多光源下的白平衡调整.阴影色温比阳光下色温要高一些,如果阳光下是5000k,阴影可能是7000k.有光就有影,它们经常出现在一个镜头里,对着其中一个色温调,另一边就会偏色.为了整体效果好,要把翘翘板平衡起来,可以加一些策略在里面.。
数字图像处理12-白平衡算法
其中 max 代表最大值,w 代表设定的 white 值。 这种算法实际上是一种类似反求光源的算法。Rgb 值最高的一点如果确实是对应白色的
话,那么其在原本图像中呈现的颜色,就能很好的反应光源的颜色。然后把这个点通过增 益调整为白色,其实就相当于把环境光由非纯白色调整为纯白色,这样就达到了白平衡的 效果。 但是同前面一种算法一样,这种算法也有一定的局限性,需要优化。首先就是一个点的颜 色很可能具有偶然性,比如全图中最亮的像素本身就是黄色的,那么白平衡的结果就是把 所有黄色都变淡了。因此使用这种算法时多是取最亮的几个点的平均值作为最大值,或者 与其他算法配合起来使用。 然后就要提到 GW 和 PR 正交组合算法,这个算法的具体运算过程如下:
可以看到这里也是如上用到了平均值与最大值,但是和之前不同的是,这里有了一次分量和二 次分量,而且也有了 uv 两个参数。其基本的原理就是先确定一个二次的白平衡公式:
随后通过两个确定的目标模型求出 uv 值,就可以进行白平衡的运算了。第一个模型是平均值 的模型,也就是把 r 值向 rgb 的平均值的方向平衡。这里给了两个参数 R(ave)和 K (ave),分别是 r 分量的平均值和 rgb 三个分量的平均值的平均值。通过这个式子就可以得 到第一个方程,这里就是按照 gw 算法的思想写出的式子。同理下一个式子就是按照 pr 算法的 思想写出的式子。这两个式子联立就可以得到 uv 的值,进而就可以得到白平衡的运算结果。 程序也是实现了这一功能,进而得到了白平衡的运算结果。首先读取图片,获得图片的长宽 值。随后初始化一些值,比如输出图片的矩阵,记录最大值,平均值的变量等。随后利用一个 循环,遍历图像矩阵中每一个像素值,分别求出 rgb 三个通道平均值与最大值。随后求出三个 通道平均值的平均值与最大值的平均值记为 ak 与 mk,参与后续的运算。
均值白平衡原理
均值白平衡原理均值白平衡原理是数字图像处理中一种常用的白平衡算法。
它的基本原理是通过计算图像中的像素点的平均值,在不同的颜色通道上进行调整,使图像中的灰度平均值接近于理想的中值,从而实现消除图像中的色偏,恢复图像的真实色彩。
均值白平衡原理基于这样的假设:图像中的白色物体在不同的光照条件下在红绿蓝三个颜色通道上的亮度值应该是相等的。
但是由于光源的颜色温度及传感器响应的差异等因素的影响,图像中的白色物体在各个颜色通道上的亮度值并不相同,从而导致图像中的色偏。
为了消除这种色偏,均值白平衡算法首先需要计算图像中的像素点的平均值。
假设图像的大小为M×N,那么图像中的每个像素点可表示为一个R、G、B三个通道的向量(R,G,B)。
通过遍历图像的所有像素点,可以计算出图像中的每个通道上的像素值的平均值,分别记为R_avg、G_avg、B_avg。
接下来,通过将图像中的每个像素点的R、G、B三个通道的像素值分别除以对应通道的平均值,得到3个系数:Kr = R_avg / R,Kg = G_avg / G,Kb = B_avg / B。
然后将图像中的每个像素点的R、G、B三个通道的像素值乘以对应通道的系数,即R = R * Kr,G = G * Kg,B = B * Kb。
最后,将调整后的R、G、B三个通道的像素值分别映射到0到255的灰度范围内,即R = clip(R, 0, 255),G = clip(G, 0, 255),B =clip(B, 0, 255)。
通过以上步骤,均值白平衡算法实现了对图像中的白平衡进行校正。
它的基本思路是通过计算图像中的像素点的平均值,利用色彩分布的统计特性来实现灰度平衡,从而消除图像中的色偏,恢复图像的真实色彩。
同时,该算法的计算简单,实时性好,因此在实际应用中被广泛采用。
然而,均值白平衡算法也存在一些问题。
首先,该算法的基础假设是图像中存在白色物体,因此当图像中没有白色物体或者白色物体较少时,该算法的效果可能会较差。
MATLAB图像处理工具箱的高级图像增强算法详解
MATLAB图像处理工具箱的高级图像增强算法详解图像处理是数字图像处理领域中的重要分支,其中MATLAB图像处理工具箱是应用最广泛的工具之一。
该工具箱提供了许多高级图像增强算法,能够有效地优化图像质量,提高图像细节和对比度,从而使图像更加清晰和易于分析。
本文将详细解释几种主要的高级图像增强算法,并介绍它们的工作原理和应用场景。
1. 直方图均衡化算法直方图均衡化是一种常用的图像增强算法,用于提高图像的对比度。
该算法基于直方图分布的均匀性假设,通过拉伸直方图来实现像素值的均匀分布。
具体而言,它通过计算图像的累积分布函数来调整像素值。
直方图均衡化可广泛应用于医学影像分析、电视图像处理等领域,以改善图像细节和图像信息的可视化效果。
2. 自适应直方图均衡化算法自适应直方图均衡化算法是对传统直方图均衡化算法的改进。
传统算法基于图像全局直方图进行像素值的调整,这可能导致一些局部细节丢失。
为了克服这个问题,自适应直方图均衡化算法引入了局部直方图均衡化的概念。
它将图像划分为许多局部区域,并在每个区域内应用直方图均衡化算法。
这样能够更好地保留图像的局部细节和对比度信息。
3. 双边滤波算法双边滤波算法是一种常用的图像增强算法,用于减少图像的噪声。
与其他线性滤波算法不同,双边滤波器在计算滤波器系数时考虑了像素的空间距离和灰度差异。
这使得它能够保持图像的边缘信息,同时去除噪声。
双边滤波算法常用于图像去噪、图像增强等领域,以提高图像质量和视觉效果。
4. 维纳滤波算法维纳滤波算法是一种用于图像去噪的经典算法。
它基于图像信号和噪声的统计特性,采用滤波器来减少噪声的影响。
维纳滤波算法通过最小化均方误差来实现最佳平衡,既能抑制噪声,又能保留图像的细节。
该算法常用于医学图像处理、远程遥感图像处理等领域,在提高图像质量和减少噪声方面发挥重要作用。
5. 彩色图像增强算法彩色图像增强是图像处理的重要方向之一。
彩色图像增强算法包括色彩均衡、色度调整和对比度增强等技术。
使用Matlab进行图像配色与调整的技巧与实例
使用Matlab进行图像配色与调整的技巧与实例一、引言图像处理是计算机视觉和图形学中的一个重要领域。
在这个数字时代,我们面临着大量的图像内容,因此需要通过技术手段对这些图像进行优化和调整,以满足用户需求。
本文将介绍如何使用Matlab对图像进行配色和调整的技巧,并通过实例进行说明。
二、Matlab在图像处理中的作用Matlab是一种功能强大的高级编程语言和交互式环境,广泛应用于科学和工程领域。
它提供了丰富的图像处理工具箱,以及各种函数和算法,可以方便地进行图像的加载、处理和保存等操作。
借助Matlab强大的功能,我们可以在图像处理中更加高效和便捷地实现我们的目标。
三、图像色彩空间的基本概念在进行图像配色和调整之前,我们首先需要了解色彩空间的基本概念。
色彩空间是描述图像颜色的一种数学模型。
常见的色彩空间有RGB、HSV、Lab等。
其中,RGB是最常用的色彩空间,它是通过红、绿、蓝三个通道的强度值来描述颜色的。
HSV色彩空间则将颜色分为色调(Hue)、饱和度(Saturation)和明度(Value)三个分量,更符合人类对颜色的感知。
Lab色彩空间则将颜色分为亮度(Lightness)、a 和b两个颜色分量,可以准确地描述颜色的特征。
四、图像配色的技巧1. 色调映射色调映射是一种常用的图像配色技巧,它可以改变图像的整体色调,从而产生不同的视觉效果。
在Matlab中,可以使用imadjust函数来实现该技巧。
通过调整色调映射函数的参数,我们可以改变图像的对比度和亮度,从而达到所需的效果。
例如,如果想要增强图像的对比度,可以使用imadjust函数提高图像的对比度参数。
2. 色彩转换色彩转换是将图像从一种色彩空间转换到另一种色彩空间的过程。
在Matlab中,可以使用rgb2hsv和hsv2rgb函数来实现RGB和HSV色彩空间之间的相互转换。
通过进行色彩转换,我们可以更加方便地对图像的色调、饱和度和明度等属性进行调整。
适用于大场景范围的自动白平衡算法
适用于大场景范围的自动白平衡算法作者:叶樟丽杨鸣来源:《移动通信》2016年第12期【摘要】为了克服传统方法色温估计的局限性,提出了一种基于图像熵的灰度加权算法,根据得到的加权灰度值计算R、G、B三通道的增益值,从而达到白平衡校正效果,并采用Imatest软件对结果进行测评。
实验结果表明,适用于大场景范围的自动白平衡算法效果较好,达到预期要求。
【关键词】图像熵灰度加权法自动白平衡doi:10.3969/j.issn.1006-1010.2016.12.018 中图分类号:TP391 文献标志码:A 文章编号:1006-1010(2016)12-0082-04引用格式:叶樟丽,杨鸣. 适用于大场景范围的自动白平衡算法[J]. 移动通信, 2016,40(12): 82-85.1 引言白平衡是红、绿、蓝三基色混合后形成的白色精确度的指标[1]。
由于人眼对于色彩具有恒常性[2]的优势,对事物色彩的辨别不会因为外界环境的变化而受到影响,但是图像传感器不具备这种特点,在成像过程中经历了光电信号的转换、模数信号的转换、软件算法等一系列复杂的处理,图像的颜色不可避免地会受到传感器自身或者外部等多方面因素的影响,使得图像色彩失真,在色温[3](发光颜色的实际温度)改变的同时,采集到的图像色彩也会随之改变,产生偏色现象[4]。
这就需要通过算法对R(红)、G(绿)、B(蓝)三个通道分量进行调整来抑制图像的偏色。
自动白平衡调整一般可分为三步[5]:色温估计,是白平衡算法中的重点;增益计算,根据得到的色温,通过合适的算法计算红、绿、蓝三通道的校正系数;图像校正,用调整前R、G、B三分量的各值乘以相对应的校正系数。
2 典型的白平衡算法2.1 灰度世界法灰度世界法[6]的算法思想是假设图像的色彩比较丰富,即符合图像红(R)、绿(G)、蓝(B)三基色的统计平均值相等,约为128,因为色彩丰富图像的平均反射可以抵消图像的色差。
白平衡算法
灰色世界法(grey world method)要计算未知光源的特性必须从图片中提取相关的统计特性。
当我们能够仅使用一个统计特性就获得未知光源特性时,算法就变得非常简单了。
在这种情况下,未知光源必须在整幅图片上都是统一的。
均值于是就成为了此类方法之下最好的统计指标。
而灰色世界法正是利用了均值作为估算未知光源的关键统计量。
从物理意义上说,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰色”。
在给定图片的白平衡算法中,灰色世界假设图片中的反射面足够丰富,以至于可以作为自然界景物的一个缩影。
若这幅图片是在经典光源下拍摄的,其均值就应该等于灰色。
若这幅图是在非经典光源下拍摄的,那么均值就会大于或者小于灰色值。
而该均值对于灰色的偏离程度则反映了未知光源相对于已知光源的特性。
虽然这个方法比较简单,但是仍然可以从一些方面进行调整。
一个方面就是对于灰色的定义形式的选择。
包括对于光谱的定义、对于光谱成分的定义和在经典光源之下的RGB 的响应。
另一个更加重要的调整方面就是对于灰色的选择。
不管如何定义灰色,最佳的灰色之选必然是自然界实事上出现的灰色。
但是这个值是无法获得的(除非是合成数据),所以对于灰色的选择是不同的灰色世界算法的一个重要的区别点。
一个方法是假设这个灰色就是实事上的灰色。
也就是说反射光谱是均衡的。
给定光源之下的RGB 响应是纯白色对此光源的响应值的一部分。
比方说,可以使用50%作为反射率(虽然这个灰色值对于人眼视觉习惯而言可能过于明亮)。
另一种方法,就是根据大量的数据提炼出一个均值,并把它定义为灰色。
这种方法提炼的灰色值可能因为数据库使用的不同而有所不同。
最终提炼的灰色也能仅适用于原始的数据库,而对于数据库未包括的图片的适用度就会比较差一些。
确定下来的灰色表达形式可以用来表示。
下标i 表示信道,上标c 为canonical 的首字母,表示经典光源。
在确定灰色的表达形式后只要用RGB 响应与经典光源下灰色的比值来归一化图片就可以了。
利用 Matlab 和 Dcraw 处理数码相机 Raw 文件的完整流程 _ Capbone
Select a pageViewpointsLEGOTechInternetMobileArchivesMisc.AboutBlogrollRSSDonate!ViewpointsLEGOTechInternetMobileArchivesMisc.AboutBlogrollRSSDonate!利用 Matlab 和 Dcraw 处理数码相机 Raw 文件的完整流程这篇文章要说的当然不是如何用 PS、LightRoom 来处理 Raw 文件,而是一种更加彻底、数据化的办法 利用 Matlab 直接处理数码相机的 CFA(Color Filter Array) 数据。
接触过摄影的人都知道,对于数码相机来说 Raw Data 是原始的、未被处理的数据,相比 JPEG,Raw 文件记录了更多的场景信息,保留了更宽广的色域以及动态范围,也留下了更为自由的后期处理空间。
Raw Data 只是一种图像数据的封装形式而并不是一种文件格式,不同厂商的相机一般都拥有自己的 Raw Data 格式,比如常见的 *.CR2、*.NEF、*.ARW、*.ORF(Olympus)、*.RAF(Fuji)、*.DNG(Adobe、Leica)等。
对于大部分人来说,处理 Raw Data 的软件不外乎就那么几种,Camera Raw、LightRoom、Aperture、DxO 以及各厂商自带的处理软件。
这些软件虽然通过图形界面提供了简洁易懂的处理流程,但是遗憾的是它们能导出的都并非真正意义上的 “Raw Data”,即传感器直接记录的、与照度成线性关系的第一手数据。
对于摄影、媒体、艺术领域,这些软件已经足够强大,但是在图像处理、计算机视觉等研究领域,我们需要的是把照片中的信息转换为能够通过数字来定量表示的形式,或者通过一些公式、算法直接对图像(或图像的某一部分)进行处理,再或者对两张图片之间的差别进行量化表示,这时候 LightRoom 这些软件就显得有些无能为力了。
数字图像基本处理——白平衡(colorbalance)
数字图像基本处理——⽩平衡(colorbalance)下⾯介绍两种简单的处理图像⾊彩平衡问题的算法,⾊彩平衡就是说将⼀张图⽚中RGB三个通道的值处理的相对均衡,也就是将图像中物体原本的颜⾊恢复出来,⽽不是在光照或者阳光下变⾊。
算法1:White Balancematlab实现如下:function res = WhiteBalance(img)RGB=imread(img);R=RGB(:,:,1);G=RGB(:,:,2);B=RGB(:,:,3);I=0.299*R+0.587*G+0.114*B;kr=mean(I(:))/mean(R(:));kg=mean(I(:))/mean(G(:));kb=mean(I(:))/mean(B(:));% res(:,:,1)=kr*R;% res(:,:,2)=kg*G;% res(:,:,3)=kb*B;res=cat(3,kr*R,kg*G,kb*B);end算法2:Maximum Value BalanceT R,T G,T B的含义:⾸先统计三个通道中⾼于S RGB的强度的个数,找到最⼤个数为N max,最后在每个通道中找到第N max个最⼤的强度值(也就是从⼤到⼩排序第Nmax个值)分别为T R,T G,T B。
matlab实现如下:function res = MaxValueBalance(img)RGB=imread(img);R=RGB(:,:,1);% figure, imhist(R);G=RGB(:,:,2);% figure, imhist(G);B=RGB(:,:,3);% figure, imhist(B);Srgb=min([max(R(:)) max(G(:)) max(B(:))]);Nmax=max([sum(sum(R>=Srgb)) sum(sum(G>=Srgb)) sum(sum(B>=Srgb))]);Tr_temp=sort(R(:),'descend');Tr=Tr_temp(Nmax);Tg_temp=sort(G(:),'descend');Tg=Tg_temp(Nmax);Tb_temp=sort(B(:),'descend');Tb=Tb_temp(Nmax);kr=Srgb/Tr;kg=Srgb/Tg;kb=Srgb/Tb;% res(:,:,1)=kr*R;% res(:,:,2)=kg*G;% res(:,:,3)=kb*B;res=cat(3,kr*R,kg*G,kb*B);end最后主函数测试⼀些⽰例图⽚,主函数如下:clear;close all;clc;addpath('E:\Digital_img_processing\Lecture_3_dicussion_color_balance');fig1='BW1.png';fig2='BW2.png';fig3='BW3.jpg';wb_algorithm3=WhiteBalance(fig3);% wb_algorithm2=WhiteBalance(fig2);% wb_algorithm1=WhiteBalance(fig1);%figure, imshow(wb_algorithm3);title('White Balance algorithm 3');% figure, imshow(wb_algorithm2);% title('White Balance algorithm 2');% figure, imshow(wb_algorithm1);% title('White Balance algorithm 1');% mvb_algorithm3=MaxValueBalance(fig3); % mvb_algorithm2=MaxValueBalance(fig2); % mvb_algorithm1=MaxValueBalance(fig1); % figure, imshow(mvb_algorithm3);% title('Max Value Balance algorithm 3');% figure, imshow(mvb_algorithm2);% title('Max Value Balance algorithm 2');% figure, imshow(mvb_algorithm1);% title('Max Value Balance algorithm 1');测试结果如下:算法1(输⼊->输出):值得注意的是,后⾯两个测试图⽚有⽩⾊的边框,这在平衡后的图像中也可以看出,如果去掉这些⽩⾊的边框效果会更好,如下:算法2(输⼊->输出):需要注意的问题:(这些问题是⼀些使⽤matlab或者是处理数字图像的基本问题,查了⼀些其他资料,予以总结)①变量清除的问题:如果重复执⾏某⼀脚本命令⽂件,需要在最前⾯加上在前⾯clc; close all; clear all; 为了清除⼯作空间中之前的变量,否则会影响后续的变量值。
matlab 亮度评价指标
matlab 亮度评价指标
在MATLAB中,我们可以使用不同的指标来评价图像的亮度。
其中一些常用的指标包括:
1. 平均亮度,可以通过计算图像中所有像素的亮度值的平均值来得到。
在MATLAB中,可以使用mean函数来计算图像的平均亮度值。
2. 方差,图像的亮度方差可以提供关于图像亮度分布的信息。
使用var函数可以在MATLAB中计算图像亮度的方差。
3. 直方图均衡化,这是一种常用的图像增强技术,通过重新分配图像的像素值来增强图像的对比度和亮度。
在MATLAB中,可以使用histeq函数来实现直方图均衡化,并且可以通过比较均衡化前后的直方图来评价亮度的改善程度。
4. 对比度指标,对比度是图像中亮度差异的度量,可以通过计算图像中像素值的范围来评价。
在MATLAB中,可以使用imcontrast函数来调整图像的对比度,并且可以通过比较对比度调整前后的图像来评价对比度的改善情况。
5. 亮度直方图,通过查看图像的亮度直方图,可以了解图像中不同亮度级别的像素分布情况。
在MATLAB中,可以使用imhist函数来绘制图像的亮度直方图,并且可以通过观察直方图的形状来评价图像的亮度分布情况。
综上所述,MATLAB提供了多种方法来评价图像的亮度,可以根据具体的需求和应用场景选择合适的指标进行评价。
白平衡增益算法
白平衡增益算法技术合作合同甲方(技术提供方)信息:甲方名称:____________________________甲方地址:____________________________甲方联系人:____________________________甲方联系电话:____________________________甲方电子邮件:____________________________乙方(技术接受方)信息:乙方名称:____________________________乙方地址:____________________________乙方联系人:____________________________乙方联系电话:____________________________乙方电子邮件:____________________________第一条合作背景1.1 甲方拥有白平衡增益算法的专有技术和相关知识产权,具备技术开发和应用的能力。
1.2 乙方希望将甲方的白平衡增益算法技术应用于其产品中,提升产品的图像处理能力和性能。
第二条合作内容2.1 技术提供2.1.1 甲方将向乙方提供白平衡增益算法的、技术文档和相关技术支持。
2.1.2 甲方应对提供的算法进行详细说明,包括算法的工作原理、应用方法和优化建议。
2.2 技术应用2.2.1 乙方将白平衡增益算法应用于其产品中,并进行相关的测试和验证。
2.2.2 乙方应根据甲方提供的技术文档,正确实现算法,并确保其在实际应用中的效果。
第三条技术支持与培训3.1 技术支持3.1.1 甲方应提供为期______个月的技术支持,解答乙方在算法实施过程中遇到的技术问题。
3.1.2 技术支持方式包括但不限于在线咨询、技术和邮件支持。
3.2 培训3.2.1 甲方应安排技术专家为乙方提供必要的培训,确保乙方技术人员能够熟练掌握白平衡增益算法的使用。
3.2.2 培训时间、地点及形式由双方协商确定,培训费用由______(甲方/乙方)承担。
OpenCV-白平衡(灰度世界算法)
OpenCV-白平衡(灰度世界算法)作者:翟天保Steven版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处实现原理白平衡的意义在于,对在特定光源下拍摄时出现的偏色现象,通过加强对应的补色来进行补偿,使白色物体能还原为白色。
灰度世界算法是白平衡各种算法中最基本的一种。
它假设图像世界具备丰富色彩,红蓝绿三通道的灰度值在平均后趋近一致,该值作为“灰色”;若各通道均值偏离“灰色”,则将其进行补偿,使其回归“灰色”,进而实现白平衡的效果。
通俗的讲,若图像中绿色较强,蓝色和红色较弱,则用了灰度世界算法后,绿色会适当减弱,蓝色和红色会适当加强,这样就使原本偏色严重的情况得到了缓解。
灰度世界算法的实现流程如下:1.计算图像RGB三通道各自的灰度平均值Raver、Gaver、Baver。
2.计算“灰色”:Gray=(Raver+Gaver+Baver)/3。
3.计算三通道的补偿系数,即灰色值除以单通道平均值。
功能函数代码// 白平衡-灰度世界cv::Mat WhiteBalcane_Gray(cv::Mat src){cv::Mat result = src.clone();if (src.channels() != 3){cout << "The number of image channels is not 3." << endl;return result;}// 通道分离vector<cv::Mat> Channel;cv::split(src, Channel);// 计算通道灰度值均值double Bm = cv::mean(Channel[0])[0];double Gm = cv::mean(Channel[1])[0];double Rm = cv::mean(Channel[2])[0];double Km = (Bm + Gm + Rm) / 3;// 通道灰度值调整Channel[0] *= Km / Bm;Channel[1] *= Km / Gm;Channel[2] *= Km / Rm;// 合并通道cv::merge(Channel, result);return result;}C++测试代码#include <iostream>#include <opencv.hpp>using namespace std;// 白平衡-灰度世界cv::Mat WhiteBalcane_Gray(cv::Mat src) {cv::Mat result = src.clone();if (src.channels() != 3){cout << "The number of image channels is not 3." << endl; return result;}// 通道分离vector<cv::Mat> Channel;cv::split(src, Channel);// 计算通道灰度值均值double Bm = cv::mean(Channel[0])[0];double Gm = cv::mean(Channel[1])[0];double Rm = cv::mean(Channel[2])[0];double Km = (Bm + Gm + Rm) / 3;// 通道灰度值调整Channel[0] *= Km / Bm;Channel[1] *= Km / Gm;Channel[2] *= Km / Rm;// 合并通道cv::merge(Channel, result);return result;}int main(){// 载入原图cv::Mat src = cv::imread("test.jpg");// 白平衡-灰度世界cv::Mat result = WhiteBalcane_Gray(src);// 显示cv::imshow("src", src);cv::imshow("result", result);cv::waitKey(0);return 0;}测试效果图1 原图图2 白平衡后图像如图1所示,是傍晚的一张图像,众所周知,傍晚的色温是较低的,此时采用高于傍晚色温的色温值拍照,就会得到一张暖色系的图片,偏黄;对其进行白平衡,使图片颜色回归真实的环境色温,就得到如图2的效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
灰色世界法(grey world method)要计算未知光源的特性必须从图片中提取相关的统计特性。
当我们能够仅使用一个统计特性就获得未知光源特性时,算法就变得非常简单了。
在这种情况下,未知光源必须在整幅图片上都是统一的。
均值于是就成为了此类方法之下最好的统计指标。
而灰色世界法正是利用了均值作为估算未知光源的关键统计量。
从物理意义上说,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰色”。
在给定图片的白平衡算法中,灰色世界假设图片中的反射面足够丰富,以至于可以作为自然界景物的一个缩影。
若这幅图片是在经典光源下拍摄的,其均值就应该等于灰色。
若这幅图是在非经典光源下拍摄的,那么均值就会大于或者小于灰色值。
而该均值对于灰色的偏离程度则反映了未知光源相对于已知光源的特性。
虽然这个方法比较简单,但是仍然可以从一些方面进行调整。
一个方面就是对于灰色的定义形式的选择。
包括对于光谱的定义、对于光谱成分的定义和在经典光源之下的RGB 的响应。
另一个更加重要的调整方面就是对于灰色的选择。
不管如何定义灰色,最佳的灰色之选必然是自然界实事上出现的灰色。
但是这个值是无法获得的(除非是合成数据),所以对于灰色的选择是不同的灰色世界算法的一个重要的区别点。
一个方法是假设这个灰色就是实事上的灰色。
也就是说反射光谱是均衡的。
给定光源之下的RGB 响应是纯白色对此光源的响应值的一部分。
比方说,可以使用50%作为反射率(虽然这个灰色值对于人眼视觉习惯而言可能过于明亮)。
另一种方法,就是根据大量的数据提炼出一个均值,并把它定义为灰色。
这种方法提炼的灰色值可能因为数据库使用的不同而有所不同。
最终提炼的灰色也能仅适用于原始的数据库,而对于数据库未包括的图片的适用度就会比较差一些。
确定下来的灰色表达形式可以用Grey i c来表示。
下标i 表示信道,上标c 为canonical 的首字母,表示经典光源。
在确定灰色的表达形式后只要用RGB 响应与经典光源下灰色的比值来归一化图片就可以了。
假设RGB 响应均值为Ave i u,下标i 表示信道,上标U 为Unknown 的首字母,表示未知光源。
那么归一化率的计算式为σi如下式所示:σi = Grey i cAve i u根据光源转换理论,从未知光源到经典光源下图片表达式的转换式如下式所定义:ρ⃑c=[σ1σ2σ3]∙ρ⃑u那么,灰色世界法的计算过程如下图所示:本实验选择的灰色值为(129,129,129),具体的matlab实现程序如下:%灰色世界法%clear all; %清屏%img=imread('b1.bmp'); %读取位图的rgb值并存在名为img的三维矩阵中%AveR=mean(mean(img(:,:,1))); %计算R通道的均值%AveG=mean(mean(img(:,:,2))); %计算G通道的均值%AveB=mean(mean(img(:,:,3))); %计算B通道的均值%Qr=129/AveR; %计算R通道的归一化率Qr%Qg=129/AveG; %计算G通道的归一化率Qg%Qb=129/AveB; %计算B通道的归一化率Qb%%光源变换%img0(:,:,1)=Qr*img(:,:,1);img0(:,:,2)=Qg*img(:,:,2);img0(:,:,3)=Qb*img(:,:,3);figure,imshow(img0),title('变换后图片'); %显示图片%偏蓝图片白平衡调整后的图片正常光照下的图片基于动态阀值的自动白平衡法(Automatic White Balance Method)这个算法是通过对图片的ycbcr色空间的分析来确定参考白点的,所以次算法可以说是自适应白平衡算法。
本算法选择参考白点的阀值是动态变化的,所以对于不同的图片,其阀值也不同。
通过对图片的cbcr坐标空间的分析,我们可以看到一个接近白色的区域(near-white region)是包含着参考白点的。
通过这个思路,我们可以通过对图片分区,然后找出参考白点,然后在通过von kvies model来调整图片时期实现白平衡。
这样,这个算法就包括了两个步骤了:寻找参考白点,白点调整。
寻找参考白点:为了确定一个接近白色的区域,我们就必须把RGB色空间转换成YCbCr色空间。
色空间转换后,就是计算Cb、Cr的均值Mb、Mr;然后通过下式计算Cb、Cr的均方差Db、Dr:Db=∑(|Cb(i,j)−Mb|) i,jN⁄Dr=∑(|Cr(i,j)−Mr|) i,jN⁄为了提高算法的稳健性,将图片分为几个区域并且计算每个区域的Mb、Mr、Db、Dr,如果一个区域的Db,Dr太小,那么这个区域就没有足够的色彩变化,就可以丢弃掉了。
这样可以避免大面积的统一色调对结果的影响。
接下来就可以通过下面的关系式得到接近白色区域的所有像素点了:|Cb(i,j)−(Mb+Db×sign(Mb))|<1.5×Db|Cr(i,j)−(1.5×Mr+Dr×sign(Mr))|<1.5×Dr 根据亮度值,我们选择接近白色区域中的10%的候选参考白点最为参考白点。
在白点确定后,就可以从参考白点中得到信道增益的值了。
为了维持整幅图片的亮度不变,亮度的最大值被用来得到信道增益。
所以信道增益不及和参考白点有关还与亮度的最大值有关,其表达式如下:⁄R gain=Y max RavewG gain=Y max G⁄avewB gain=Y max B⁄avew其中Y max是整幅图片像素的亮度最大值,R avew、G avew和B avew是参考白点的RGB信道的均值。
最后,根据von-kvies model来调整图片,使其达到白平衡的效果。
调整的表达式如下:R=́R gain×RG=́G gain×GB=́B gain×B其中RGB是图片的像素点的三个信道值,ŔǴB́是调整之后的图片的像素点的三个信道值。
其源程序如下:%Program for white balancing%function W=wbalance(im)clear all;close all;%读取照片的信息%[filename, pathname] = uigetfile('*.jpg;*.bmp;*.gif', 'Pick an image-file');if isequal(filename,0)disp('User selected Cancel');elsedisp(['User selected', fullfile(pathname, filename)]);endfname=strcat(pathname,filename);im=imread(fname);im2=im;im1=rgb2ycbcr(im);%将图片的RGB值转换成YCbCr值% Lu=im1(:,:,1);Cb=im1(:,:,2);Cr=im1(:,:,3);[x y z]=size(im);tst=zeros(x,y);%计算Cb、Cr的均值Mb、Mr%Mb=sum(sum(Cb));Mr=sum(sum(Cr));Mb=Mb/(x*y);Mr=Mr/(x*y);%计算Cb、Cr的均方差%Db=sum(sum(Cb-Mb))/(x*y);Dr=sum(sum(Cr-Mr))/(x*y);%根据阀值的要求提取出near-white区域的像素点% cnt=1;for i=1:xfor j=1:yb1=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;endendendcnt=cnt-1;iy=sort(Ciny,'descend');%将提取出的像素点从亮度值大的点到小的点依次排列%nn=round(cnt/10);Ciny2(1:nn)=iy(1:nn);%提取出near-white区域中10%的亮度值较大的像素点做参考白点%%提取出参考白点的RGB三信道的值%mn=min(Ciny2);c=0;for i=1:xfor j=1:yif tst(i,j)<mntst(i,j)=0;elsetst(i,j)=1;c=c+1;endendendR=im(:,:,1);G=im(:,:,2);B=im(:,:,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)=im(:,:,1)*Rgain;im(:,:,2)=im(:,:,2)*Ggain;im(:,:,3)=im(:,:,3)*Bgain;%显示图片%W=im;figure,imshow(im2,[]),title('原图');figure,imshow(im,[]),title('白平衡后的效果图');黄偏色图片正常光照下的图片次算法的缺点是运行速度慢,但是对图片的还原效果还是比较显著的。
其他白平衡算法镜面法(Perfect Reflector Model)根据图像形成理论,对于纯白色的反射面而言,无论光源是什么颜色,最终反射后的颜色总能完全表现出光源的颜色。
如果景物中有纯白的部分,那么就可以直接从这些像素中提取出光源信息。
基于这种思想的方法都被称为是镜面法。
与灰色世界法类似的,镜面法也有多种调整方式。
在本文中着重介绍两种。
第一种方法较为基本也较为简便。
这种方法假设图片中一定有纯白色面存在,那么在经典光源下,图片中所有像素点三个信道的最大值都应该等于255,或者是一个给定的纯白色的值。
在任何其他的光源下,图片纯白色点的像素值就会小于经典光源下的纯白色,并且这些点将代表整幅图片中最亮的点。
那么只要将各信道的值按比例规一化到最大值(纯白色)就可以获得在经典光源下的图片了。