自动白平衡算法(matlab)

自动白平衡算法(matlab)

 

clear
clc
im=imread('box.jfif');
im1=rgb2ycbcr(im);
Lu=im1(:,:,1);
Cb=im1(:,:,2);
Cr=im1(:,:,3);
%第一块
I1=im1(1:size(im,1)/2,1:size(im,2)/2,:);
 [x,y,~]=size(I1);
 [Mb1,Mr1,Db1,Dr1]=test(I1,Cb,Cr,x,y);
 %第二块
I2=im1(size(im,1)/2:size(im,1),1:size(im,2)/2,:);
 [x,y,~]=size(I2);
 [Mb2,Mr2,Db2,Dr2]=test(I2,Cb,Cr,x,y);
%第三块
I3=im1(1:size(im,1)/2,size(im,2)/2:size(im,2),:);
 [x,y,~]=size(I3);
 [Mb3,Mr3,Db3,Dr3]=test(I3,Cb,Cr,x,y);
%第四块
I4=im1(size(im,1)/2:size(im,1),size(im,2)/2:size(im,2),:);
 [x,y,~]=size(I4);
 [Mb4,Mr4,Db4,Dr4]=test(I4,Cb,Cr,x,y);
Mr=(Mr1+Mr3+Mr4)/3;
Mb=(Mb1+Mb3+Mb4)/3;
Dr=(Dr1+Dr3+Dr4)/3;
Db=(Db1+Db3+Db4)/3;
[x,y,z]=size(im);
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
sumsort=sort(Ciny,'descend');%将提取出的像素点从亮度值大的点到小的点依次排列%
count=round(size(sumsort,2)/10);
Ciny2(1:count)=sumsort(1:count);
mn=min(Ciny2);
index=Lu>mn;
R=im(:,:,1);
G=im(:,:,2);
B=im(:,:,3);
Rave=mean(mean(R(Lu>mn)));
Gave=mean(mean(G(Lu>mn)));
Bave=mean(mean(B(Lu>mn)));
Ymax=max(max(Lu));
%求增益
Rgain=double(Ymax)/double(Rave);
Ggain=double(Ymax)/double(Gave);
Bgain=double(Ymax)/double(Bave);
R=R*Rgain;
G=G*Ggain;
B=B*Bgain;
I3=cat(3,R,G,B);
imshow([im I3]);
function [Mb,Mr,Db,Dr]=test(I,Cb,Cr,x,y)
    Cb=I(:,:,2);
    Cr=I(:,:,3);
    Mb=mean(mean(Cb));
    Mr=mean(mean(Cr));
    Db=sum(sum(Cb-Mb))/(x*y);
    Dr=sum(sum(Cr-Mr))/(x*y);
end

左原图右白平衡后图像

自己写的转载请备注。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月蹉跎的一杯酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值