%% Ovo je Matlab skripta koja dodaje bijeli sum na sliku.
%% Ulazna slika: slika.bmp
%% Izlazna slika

function out=bijeli_sum(in,Std_R, Std_G, Std_B)
% Ova funkcija sluzi dodavanju bijelog Gaussovog suma
% na ulaznu sliku.
% Moze se odabrati snaga suma za svaku komponentu slike posebno


% in    -- Ulazna slika
% out   -- Izlazna zasumljena slika
% Std_R -- standardna devijacija suma u crvenoj komponenti slike
% Std_G -- standardna devijacija suma u zelenoj komponenti slike
% Std_B -- standardna devijacija suma u plavoj komponenti slike


SLIKA = in;     % ulazna slika

% Velicina slike
x = size(SLIKA,1);       % broj redaka
y = size(SLIKA,2);       % broj stupaca


% Dodavanje bijelog suma na crvenu komponentu!
randn('state',sum(100*clock));      % clock osigurava da svaki put dobijemo drugaciji sum
sumR=randn(x,y)*Std_R;
SLIKA(:,:,1)=SLIKA(:,:,1)+sumR;

% Dodavanje bijelog suma na zelenu komponentu!
randn('state',sum(100*clock));      % clock osigurava da svaki put dobijemo drugaciji sum
sumG=randn(x,y)*Std_G;
SLIKA(:,:,2)=SLIKA(:,:,2)+sumG;

% Dodavanje bijelog suma na plavu komponentu!
randn('state',sum(100*clock));      % clock osigurava da svaki put dobijemo drugaciji sum
sumB=randn(x,y)*Std_B;
SLIKA(:,:,3)=SLIKA(:,:,3)+sumB;


% maksimalne vrijednosti u izlaznoj matrici mogu biti [0:255] --> 8 bita
% Dodavanjem suma neke vrijednosti bi mogle biti i vece od toga 
% zato je potrebno napraviti rezanje onih komponenti koje su manje
% od 0 i vece od 255
for i=1:x
    for j=1:y
        for k=1:3
            if (SLIKA(i,j,k)<0)
                SLIKA(i,j,k)=0;
            elseif (SLIKA(i,j,k)>255)
                SLIKA(i,j,k)=255;
            end
        end
    end
end

out=SLIKA;     % izlazna zasumljena slika
imwrite(uint8(SLIKA),'slika_bsum.bmp','bmp');

