% nacteni tech dvou obrazku a jejich znormovani,
% protoze potrebuji pouze cisla mezi 0-1 pro spravne barevne zobrazeni

im1= double(imread('panorama1.jpg'));
im1 = im1./255;
im2 = double(imread('panorama2.jpg'));
im2 = im2./255 ;

% zjisteni velikosti nactenych obrazku
size1x=size(im1,1);
size1y=size(im1,2);
size2x=size(im2,1);
size2y=size(im2,2);

% spusteni davky pro vypocet matice H
fora

% relativni posun prvniho , netransformovaneho, obrazku
posunx=100;
posuny=20;

% dale nasleduje hrani si se druhym obrazkem :

% Vytvoreni prazdne pracovni plochy o dvojnasobne velikosti, nez je velikost 1.obrazku
Vysled=zeros(2*size1x,2*size1y,3);

% Zkopirovani obrazku panorama2.jpg do pracovni plochy
Vysled( posunx : posunx + size2x -1, posuny : posuny+size2y-1,: )= im2(:,:,:);

% spoctu si rohy 2. transformovaneho obrazku (transformovane souradnice)

roh1=HH*[1,1,1]';
roh2=HH*[1,size1x,1]';
roh3=HH*[size1y,size1x,1]';
roh4=HH*[size1y,1,1]';

% Homogenizace souradnice rohu
roh1=roh1./roh1(3);
roh2=roh2./roh2(3);
roh3=roh3./roh3(3);
roh4=roh4./roh4(3);

% nastavim plochu pro transformovany obrazek na pocatecni hodnotu
pom=ones(roh4(1)-roh1(1),roh3(2)-roh4(2));

% Vypocet inverzni homografie , matice HH
IH=inv(HH);

% Vlasnti preneseni a inverzni transformace z vetsiho obrazku do mensiho
% kvuli lepsimu vykresleni vsech bodu
% Posunuti o 20 - kvuli pocatecnimu pruhu obrazku
for i=(roh1(1)+20):roh4(1) % souradnice y
  for j=roh4(2):roh3(2)		% souradnice x
                pom = IH*[i;j;1];
      pomx = round(pom(1)/pom(3)); %spolu s homogenizaci
      pomy = round(pom(2)/pom(3));
      
      if (pomx<=size1y & pomx>=1 & pomy>=1 & pomy<=size1x)
         Vysled(round(j)+ posunx,round(i)+posuny,:)=im1(pomy, pomx,:);
      end
   end
end
% zobrazeni vysledku
figure
imshow(Vysled,[]);
% imwrite(Vysled, [0:255]'*[1 1 1], 'image.bmp', 'bmp' );  %ulozeni vysledneho obrazku
