Matlab实现图像白平衡(灰度世界法、全反射算法)

参考:https://www.cnblogs.com/molakejin/p/5766132.html

白平衡

白平衡的英文为White Balance,其基本概念是“不管在任何光源下,都能将白色物体还原为白色”,对在特定光源下拍摄时出现的偏色现象,通过加强对应的补色来进行补偿。

所谓的白平衡是通过对白色被摄物的颜色还原(产生纯白的色彩效果),进而达到其他物体色彩准确还原的一种数字图像色彩处理的计算方法。(源自百度百科)

灰度世界算法

灰度世界理论:认为任何一幅图像, 当有足够的色彩变化时, 其R, G, B分量均值会趋于平衡(即 RGB三个数值相等, 也就是说应当是黑白灰类型的颜色)。这个理论在全局白平衡中得到⼴泛应用, 特点是能够利用更多的图像信息来做判断, 但在面对⾊色彩较为单一的图像时就显得有些乏力了。

灰度世界算法:根据灰度世界理论,将原始图的RGB均值分别调整到R= G = B即可。不完美的地方就是这个算法对颜色不丰富的图像敏感程度一般,处理起来效果也就不会很理想,局限性很大。

Matlab代码实现:

clc;clear;close all;

img=imread('test.png');  
subplot(121),imshow(img),title('原图');
R = img(:,:,1);G = img(:,:,2);B = img(:,:,3);  
Rave = mean2(R);
Gave = mean2(G); 
Bave = mean2(B);
K = (Rave + Gave + Bave) / 3;

R_new=(K/Rave)*R;G_new=(K/Gave)*G;B_new=(K/Bave)*B;
subplot(122),imshow(cat(3,R_new,G_new,B_new)),title('平衡后');

代码效果:

在这里插入图片描述

全反射算法

全反射理论:一幅图像中亮度最大的点就是白点, 即假设在 YCbCr 空间中Y值最⼤的点为白色, 以此来校正整幅图像。特点是只考虑色彩最亮的那部分, 跟上面的灰度世界理论正好相反, 在处理色彩偏单调的图像时效果好些, 但面对颜色丰富的图片时,因为最亮的点不一定是⽩色的, 可能会出现偏色的情况。

全反射算法:该算法认为最亮的那个点就是白色,如果不是,就针对偏离白色的数值进行逆向修正。缺点是没有高亮点或者图像色彩复杂,它的修正效果就会比较乏力。

Matlab代码实现(未加解释),参考https://www.cnblogs.com/Imageshop/archive/2013/04/20/3032062.html

clc;clear;close all;

img=imread('test.png');
subplot(121),imshow(img),title('原图');
R=double(img(:,:,1));G=double(img(:,:,2));B=double(img(:,:,3));

histRGB=zeros(765);
[m,n,h]=size(img);
for i=1:m
    for j=1:n
        s=sum(img(i,j,:));
        histRGB(s)=histRGB(s)+1;
    end
end

num=0;
for i=1:765
    num=num+histRGB(766-i);
    if num>m*n*0.1
        thresh=765-i;
        break
    end
end

amount=0;
Rave=0;Gave=0;Bave=0;
for i=1:m
    for j=1:n
        s=sum(img(i,j,:));
        if s>thresh
            Rave=(Rave*amount+R(i,j))/(amount+1);
            Gave=(Gave*amount+G(i,j))/(amount+1);
            Bave=(Bave*amount+B(i,j))/(amount+1);
            amount=amount+1;
        end
    end
end

for i=1:m
    for j=1:n
        R(i,j)=255*R(i,j)/Rave;
        if R(i,j)>255
            R(i,j)=255;
        end
        G(i,j)=255*G(i,j)/Gave;
        if G(i,j)>255
            G(i,j)=255;
        end
        B(i,j)=255*B(i,j)/Bave;
        if B(i,j)>255
            B(i,j)=255;
        end
    end
end
        
subplot(122),imshow(uint8(cat(3,R,G,B))),title('平衡后');

代码效果:
在这里插入图片描述
写在后面:
上述图像为某潜水员在水下拍摄,为得到正确的白平衡,他拍摄了一张灰色卡片作为对比:
在这里插入图片描述
由灰色卡片修正图像白平衡结果如下:

在这里插入图片描述

另一种方,就是根据大量的数提炼出个 另一种方,就是根据大量的数提炼出个 另一种方,就是根据大量的数提炼出个 均值,并把它定义 均值,并把它定义 均值,并把它定义 均值,并把它定义 为灰色。这种方提炼的值可能因数据库使用不 同而有所为灰色。这种方提炼的值可能因数据库使用不 同而有所为灰色。这种方提炼的值可能因数据库使用不 同而有所为灰色。这种方提炼的值可能因数据库使用不 同而有所为灰色。这种方提炼的值可能因数据库使用不 同而有所为灰色。这种方提炼的值可能因数据库使用不 同而有所为灰色。这种方提炼的值可能因数据库使用不 同而有所为灰色。这种方提炼的值可能因数据库使用不 同而有所为灰色。这种方提炼的值可能因数据库使用不 同而有所同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 同。最终提炼的灰色也能仅适用于原始数据库,而对未包 括的图片适用 度就会比较差一些。确定下来灰色表达形式可以括的图片适用 度就会比较差一些。确定下来灰色表达形式可以括的图片适用 度就会比较差一些。确定下来灰色表达形式可以
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值