clear all;

addpath('gyak5') %csak ha ide dolgozunk
cnn_setenv;

mCNN.TemGroup='temlib_plus';
%gradiens
ImgSize=256;
ImgNum=5;
class=[0; 0; 0; 0; 0];
GT=LoadGT();
for i=1:ImgNum
    %input=lbmp2cnn(strcat('gyak2/img', num2str(i), '.bmp')); %iterating input image
    %fenti sor helyett gépteremben:
    load(strcat('gyak2/img', num2str(i), '.mat'));
    %vagy mégjobb
    loadCNN(strcat('gyak2/img', num2str(i), '.bmp'))
    input=img;
    
    denoised=input;
    
    %15x15 nél kisebb négyzet:
    %binaris kep
        %THRESHOLD
        mCNN.INPUT1 = 1 .* denoised;
        mCNN.STATE = 1 .* denoised;  %black image  
        mCNN.Boundary = 2;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 10;
        LoadTem('THRES');
        mCNN.I=1;
        runtem;
        bin = 1 .* mCNN.OUTPUT;
        %erodáljuk le a kis objektumokat
        err=bin;
        for q=1:10
                mCNN.INPUT1 = 1 .* err;
                mCNN.STATE = zeros(ImgSize);  %black image  
                mCNN.Boundary = -1;
                mCNN.TimeStep = 1;
                mCNN.IterNum = 10;
                LoadTem('EROSION');
                runtem;
                err = 1 .* mCNN.OUTPUT;
        end
        
        %recall a nagyokra
        mCNN.INPUT1 = 1 .* bin;
        mCNN.STATE = 1 .* err;  %black image  
        mCNN.Boundary = 2;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 100;
        LoadTem('RECALL');
        runtem;
        recall = 1 .* mCNN.OUTPUT;
        %kivon
        mCNN.INPUT1 = 1 .* recall;
        mCNN.STATE = 1 .* bin;  %black image  
        mCNN.Boundary = 2;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 10;
        LoadTem('LOGDIF');
        runtem;
        obj = 1 .* mCNN.OUTPUT;
        %arányok-vetítés le:
        %SHADOWD
        mCNN.INPUT1 = 1 .* obj;
        mCNN.STATE = 1 .* ones(ImgSize);  %black image  
        mCNN.Boundary = -1;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 260;
        LoadTem('SHADOWD');
        runtem;
        down = 1 .* mCNN.OUTPUT;
        %arányok-vetítés le:
        %SHADOWL
        mCNN.INPUT1 = 1 .* obj;
        mCNN.STATE = 1 .* ones(ImgSize);  %black image  
        mCNN.Boundary = -1;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 260;
        LoadTem('SHADOWL');
        runtem;
        left = 1 .* mCNN.OUTPUT;
        if (CountBlackRow(down)==CountBlackCol(left)) 
            if (CountBlackRow(down)~=0)
                class(i)=class(i)+1;
            end
        end
        
   
    %128-as téglalap:
        %binaris kep
        %THRESHOLD 128-nál sötétebb
        mCNN.INPUT1 = 1 .* denoised;
        mCNN.STATE = 1 .* denoised;  %black image  
        mCNN.Boundary = 2;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 10;
        LoadTem('THRES');
        mCNN.I=1;
        runtem;
        bin = 1 .* mCNN.OUTPUT;
        %THRESHOLD 128-nál sötétebb
        mCNN.INPUT1 = 1 .* denoised;
        mCNN.STATE = 1 .* denoised;  %black image  
        mCNN.Boundary = 2;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 10;
        LoadTem('THRES');
        mCNN.I=0.4;
        runtem;
        thres = 1 .* mCNN.OUTPUT;
        %vegyük le az objektumokat
        mCNN.INPUT1 = 1 .* thres;
        mCNN.STATE = 1 .* bin;  %black image  
        mCNN.Boundary = 2;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 10;
        LoadTem('LOGDIF');
        runtem;
        col = 1 .* mCNN.OUTPUT;
        %arányok-vetítés le:
        %SHADOWD
        mCNN.INPUT1 = 1 .* col;
        mCNN.STATE = 1 .* ones(ImgSize);  %black image  
        mCNN.Boundary = -1;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 260;
        LoadTem('SHADOWD');
        runtem;
        down = 1 .* mCNN.OUTPUT;
        %arányok-vetítés le:
        %SHADOWL
        mCNN.INPUT1 = 1 .* col;
        mCNN.STATE = 1 .* ones(ImgSize);  %black image  
        mCNN.Boundary = -1;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 260;
        LoadTem('SHADOWL');
        runtem;
        left = 1 .* mCNN.OUTPUT;
        if (CountBlackRow(down)>=1.5*CountBlackCol(left)) || (CountBlackCol(left)>=1.5*CountBlackRow(down))
            if (CountBlackRow(down)~=0) && (CountBlackCol(left)~=0)
                class(i)=class(i)+10;
            end
        end
        
        
    %Nem teljesen kitöltött objektum detekciója
    
        %THRESHOLD
        mCNN.INPUT1 = 1 .* denoised;
        mCNN.STATE = 1 .* denoised;  %black image  
        mCNN.Boundary = 2;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 10;
        LoadTem('THRES');
        mCNN.I=1;
        runtem;
        thres = 1 .* mCNN.OUTPUT;
        %HOLERFILLER
        mCNN.INPUT1 = 1 .* thres;
        mCNN.STATE = ones(ImgSize);  %black image  
        mCNN.Boundary = -1;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 600;
        LoadTem('HOLE');
        runtem;
        holefilled = 1 .* mCNN.OUTPUT;
        %LOGAND eredetivel
        mCNN.INPUT1 = 1 .* thres;
        mCNN.STATE = 1 .* holefilled;  %black image  
        mCNN.Boundary = -1;
        mCNN.TimeStep = 1;
        mCNN.IterNum = 10;
        LoadTem('LOGDIF');
        runtem;
        if (CountBlackImg(mCNN.OUTPUT)>10)
            class(i)=class(i)+100;
        end

%EZek használhatóak:
%CountBlackImg(mCNN.INPUT1)
%CountBlackRow(mCNN.INPUT1)
%CountBlackCol(mCNN.INPUT1)
disp([num2str(i), '. kep Osztály: ', num2str(class(i)), ' Helyes :' num2str(GT(i))])

end




end
