close all
clear all
clc


calibration;
clearvars -except cameraParams estimationErrors
close all
clc


worldPoints=[0 0; 0 17*60; 25*60 17*60; 25*60 0];

listing = dir('snimkyVidea/*.jpg');

pocetSnimku=20;%udává z kolika prvních snímků se má vyhodnotit vzorový pohyb pro určení mezních stavů

pic=imread(strcat('snimkyVidea/', listing(1).name));
[ tform, orez, error ] = urciTfotmAOrez( pic, cameraParams, worldPoints );
if error==0
    
[ maska ] = tvorMaskuPohybu( listing, cameraParams, tform, orez, pocetSnimku);
prazdny=logical(maska*0);

obrysMasky=logical(imdilate(maska, [0 0 1 0 0 ; 0 1 1 1 0 ; 1 1 1 1 1 ; 0 1 1 1 0; 0 0 1 0 0])-maska);

for pocitadloSnimku=1:1:size(listing)

pic=imread(strcat('snimkyVidea/', listing(pocitadloSnimku).name));
    
prah=prah4(imhist(sepBC(pic,1)));
bin=(sepBC(pic,1)<prah);
[binWithHoles,~] = undistortImage(bin,cameraParams);
bin=imfill(binWithHoles, 'holes');
binS=imwarp(bin, tform);
binS=vysekZBB(binS, orez);

s1 = regionprops(binS, 'Area', 'PixelIdxList');
indexNejObj=indexNejvetsihoObjektu(s1);
aktualni=prazdny;
aktualni(s1(indexNejObj).PixelIdxList)=true;

s2 = regionprops(aktualni, 'Area', 'BoundingBox', 'Orientation');

indexNejObj=indexNejvetsihoObjektu(s2);


% objektPomocny=imrotate(vysekZBB(binS, s2(indexNejObj).BoundingBox), -s2(indexNejObj).Orientation);
% s3 = regionprops(objektPomocny, 'Area', 'PixelIdxList');
% objekt= false(size(objektPomocny));
% objekt(s3(indexNejvetsihoObjektu(s3)).PixelIdxList)=true;


objekt=imrotate(vysekZBB(binS, s2(indexNejObj).BoundingBox), -s2(indexNejObj).Orientation);

celkemPix=sum(sum(aktualni));
cervenychPix=celkemPix-sum(sum(aktualni&maska));
obrSVyznacMezi=aktualni;
obrSVyznacMezi(:,:,2)=aktualni&maska;
obrSVyznacMezi(:,:,3)=aktualni&maska;

obrSVyznacMezi(:,:,1)=obrSVyznacMezi(:,:,1)&(~obrysMasky);
obrSVyznacMezi(:,:,2)=obrSVyznacMezi(:,:,2)|obrysMasky;
obrSVyznacMezi(:,:,3)=obrSVyznacMezi(:,:,3)&(~obrysMasky);

procentoMimo=(cervenychPix/celkemPix)*100;

obrSVyznacMezi=uint8(obrSVyznacMezi)*255;


[objekSeSymetri, procentoNesymetrie]=symetrieAuto(objekt, 0);
text = sprintf('Procento nesymetrie objektu vstupniho obrazku %s je %.3f%% a objekt je z %.3f%% mimo mezni stav.',listing(pocitadloSnimku).name ,procentoNesymetrie, procentoMimo);
disp(text)

imwrite(binS, strcat('outputSnimkyVidea/undist/', listing(pocitadloSnimku).name, '.png'));
imwrite(obrSVyznacMezi, strcat('outputSnimkyVidea/undistMezStav/', listing(pocitadloSnimku).name, '.png'));
imwrite(objekt, strcat('outputSnimkyVidea/obj/', listing(pocitadloSnimku).name, '.png'));
imwrite(objekSeSymetri, strcat('outputSnimkyVidea/objSym/', listing(pocitadloSnimku).name, '.png'));

  
end

else
text = sprintf('Prvni snimek neni dostatecne kvalitni!');
disp(text)
end







