% BALANCE
% balance an image
% must have run getbalance first
newImage = test_image;
lighting = 3;
method = 2;
filePath = 'C:\Documents and Settings\Kim Shultz\My Documents\ee362\balanced pictures\';
fileName = cat(2,filePath,test_image.jpg');
% lighting number as follows:
% 1 = sun
% 2 = shadow
% 3 = flourescent
% 4 = incandescent
% 5 = flash
%method for balancing as follows:
% 1 = linear subtract: subtract illuminant bias
%add/subtract to R, G and B to match mean value
% 2 = linear scale: scale R, G and B to match mean value by multiplying by
% ratio
% 4 = grey world multiplicative - scale image's G and B means (by addition)
% to match mean value
if method == 1
Rav = mean(newImage(:,:,1));
Rav = mean(Rav);
Gav = mean(newImage(:,:,2));
Gav = mean(Gav);
Bav = mean(newImage(:,:,3));
Bav = mean(Bav);
targetav = mean([Rav Gav Bav]);
scale = (1-balanceValues(:,lighting))*targetav;
newImage(:,:,1) = newImage(:,:,1) + scale(1);
newImage(:,:,2) = newImage(:,:,2) + scale(2);
newImage(:,:,3) = newImage(:,:,3) + scale(3);
newImage(:,:,3) = newImage(:,:,3)+Bscale;
%if any values are over 1, cutoff at 1
newImage = min(newImage,1);
%if any values are under 0, cutoff at 0
newImage = max(newImage,0);
end
if method == 2
newImage(:,:,1) = newImage(:,:,1)/balanceValues(1,lighting);
newImage(:,:,2) = newImage(:,:,2)/balanceValues(2,lighting);
newImage(:,:,3) = newImage(:,:,3)/balanceValues(3,lighting);
%if any values are over 1, cutoff at 1
newImage = min(newImage,1);
end
if method == 3
Rav = mean(newImage(:,:,1));
Rav = mean(Rav);
Gav = mean(newImage(:,:,2));
Gav = mean(Gav);
Bav = mean(newImage(:,:,3));
Bav = mean(Bav);
targetav = mean([Rav Gav Bav]);
newImage(:,:,1) = newImage(:,:,1)+(targetav-Rav);
newImage(:,:,2) = newImage(:,:,2)+(targetav-Gav);
newImage(:,:,3) = newImage(:,:,3)+(targetav-Bav);
%if any values are over 1, cutoff at 1
newImage = min(newImage,1);
%if any values are under 0, cutoff at 0
newImage = max(newImage,0);
end
if method == 4
Rav = mean(newImage(:,:,1));
Rav = mean(Rav);
Gav = mean(newImage(:,:,2));
Gav = mean(Gav);
Bav = mean(newImage(:,:,3));
Bav = mean(Bav);
targetav = mean([Rav Gav Bav]);
newImage(:,:,1) = newImage(:,:,1)*(targetav/Rav);
newImage(:,:,2) = newImage(:,:,2)*(targetav/Gav);
newImage(:,:,3) = newImage(:,:,3)*(targetav/Bav);
%if any values are over 1, cutoff at 1
newImage = min(newImage,1);
%if any values are under 0, cutoff at 0
newImage = max(newImage,0);
end
imwrite(newImage,fileName,'jpeg');