[討論] Matlab有白平衡語法嗎?已回收

看板MATLAB作者 (白開水)時間15年前 (2010/12/21 00:14), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
請教前輩如何在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)
文章代碼(AID): #1D3u3oo- (MATLAB)
文章代碼(AID): #1D3u3oo- (MATLAB)