function [sl_rek]= partitioning (slika, block_size, bpp, n_razl) 
% partitioning
% Ulaz: slika - matrica slike (originalna slika umanjena za 128)
%       block_size - velièina stranice blokova na koje se rastavlja matrica
%                    (obe stranice jednake)
%       bpp - broj bitova po pikselu
%       n_razl - broj razina DWT razlaganja
% Izlaz: sl_rek - ukupna rekonstruirana slika
% Slika se rastavlja na blokove od kojih se svaki posebno razlaže DWT-om te
% kodira SPIHT-om, zatim dekodira i rekonstruira DWT-om te se, na kraju,
% ubacuje na odgovarajuæe mjesto u rekonstruiranoj matrici


[sizey sizex]= size(slika);
slika1=slika+128;

%postaviti vrijednosti dimenzija 'male' slike
sizey_p=block_size;
sizex_p=block_size;
n_py=sizey/sizey_p;
n_px=sizex/sizex_p;
n_p=n_py*n_px; %ukupan broj blokova

sl_rek= zeros(sizey, sizex);

for i=1:n_py
    for j=1:n_px
        el_py_last=sizey_p*i; % 
        el_px_last=sizex_p*j;
        sl_p=slika((el_py_last-(sizey_p-1)): el_py_last, (el_px_last-(sizex_p-1)): el_px_last);
        %figure, imshow(sl_p,[]) %
        DWT=DWT_decomposition (sl_p, n_razl); %n_razl=2
        %size(DWT)
        [bitstream, time_cod]=SPIHT_coder(DWT, n_razl, bpp);
        [DWT_rek, time_dec]=SPIHT_decoder(bitstream);
        %size(DWT_rek)
        sl_p_rek=DWT_reconstruction (DWT_rek,n_razl);
        %figure, imshow(sl_p_rek,[]) %
        sl_rek((el_py_last-(sizey_p-1)): el_py_last, (el_px_last-(sizex_p-1)): el_px_last)=sl_p_rek;
    end
end

%figure,imshow(sl_rek, [])
% img=uint8(sl_rek);
% imwrite(img, 'partit.jpg'); 

sum=0;
for i=1:sizey
    for j=1:sizex
        sum=sum+ (slika1(i,j)-sl_rek(i,j))^2;
    end
end
MSE=sum/(sizey*sizex);
PSNR=10*log10(255^2/MSE);

disp (['PSNR iznosi ' num2str(PSNR) ' dB.']);

string_orig = ['Original ',  num2str(sizey) 'x' num2str(sizex) 'px, velièina ' num2str(sizey*sizex*8) 'B'];
string_rek = ['Rek. slika, bpp=' num2str(bpp) ', broj razlaganja=' num2str(n_razl)]; 
string_rek1= ['Velièina blokova= ' num2str(block_size) ', PSNR= ' num2str(PSNR) 'dB'];

figure;
subplot(1,2,1);
imshow(slika1,[]);
title(string_orig);

subplot(1,2,2);
imshow(sl_rek,[]);
title(string_rek);
xlabel(string_rek1);

pogreska=abs(slika1-sl_rek);
figure,imshow(pogreska, [])
title('Pogreška (partitioned)');


    