[討論] Matlab有白平衡語法嗎?已回收
請教前輩如何在rgb影像裡設定白平衡的方法或語法
因為HSV的H還是受到光影的影響頗嚴重,我想白平衡應該可以改善
有google過但是matlab白平衡資料不太多?
PS:
網路有找到這段code,但是出來的運算後的影像顏色卻是更深,而且趕不上即時運算
不知道是哪裡出問題?
im=imread('image_0441.jpg');
im2=im;
im1=rgb2ycbcr(im);
Y=im1(:,:,1);
Cb=im1(:,:,2);
Cr=im1(:,:,3);
[x y z]=size(im);
tst=zeros(x,y);
Mb=sum(sum(Cb));
Mr=sum(sum(Cr));
Mb=Mb/(x*y);
Mr=Mr/(x*y);
Db=sum(sum(Cb-Mb))/(x*y);
Dr=sum(sum(Cr-Mr))/(x*y);
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)=Y(i,j);
tst(i,j)=Y(i,j);
cnt=cnt+1;
end
end
end
cnt=cnt-1;
iy=sort(Ciny,'descend');
nn=round(cnt/10);
Ciny2(1:nn)=iy(1:nn);
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;
G=double(G).*tst;
B=double(B).*tst;
Rav=mean(mean(R));
Gav=mean(mean(G));
Bav=mean(mean(B));
Ymax=double(max(max(Y)))/15;
Rgain=Ymax/Rav;
Ggain=Ymax/Gav;
Bgain=Ymax/Bav;
im(:,:,1)=im(:,:,1)*Rgain;
im(:,:,2)=im(:,:,2)*Ggain;
im(:,:,3)=im(:,:,3)*Bgain;
figure,imshow(im2,[]),title('Original Image');
figure,imshow(im,[]),title('Corrected Image');
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.163.119
※ 編輯: EdisonDrink 來自: 123.204.163.119 (12/21 00:19)
※ 編輯: EdisonDrink 來自: 123.204.163.119 (12/21 00:22)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章
13
34