% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%	MPOV - uloha 9 - klasifikace objektu	
%
%
%	- otevre komunikaci s pripojenou kamerou
%	- naprogramujte segmentaci, popis a klasifikaci spojovaciho materialu
%
%	
%	verze: 9-2021 / vision.uamt.feec.vutbr.cz
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% uklid
clear all;
close all;
clc;

%% kamera
imaqreset;
pause(2);
kam = videoinput('winvideo',1);
kam.ReturnedColorSpace = 'rgb';
triggerconfig(kam,'manual');
param = getselectedsource(kam);
param.ExposureMode = 'manual';
param.Exposure = -5;
param.GainMode = 'manual';
param.Gain = 16;
param.WhiteBalanceMode = 'manual';
param.WhiteBalance = 5000;

% nahled videa pro nastaveni            
preview(kam);
pause(1);
pause;
closepreview(kam);
pause(1);

% ZACNETE PROGRAMOVAT ZDE >>>
% ... doplnte/upravte program tak, aby klasifikoval objekty do kategorii 

% ... porizeni snimku
imgRGB = getsnapshot(kam);

% zvolte si vhodny barevny model/slozku modelu pro segmentaci, napr.: HSV
% vytvorte binarni obraz, kde objekty jsou bile a pozadi cerne, napr.:
imgBW = imbinarize(rgb2gray(imgRGB),0.5); 

% u jednotlivych indexovanych objektu urcete vhodne parametry (priznaky)
% viz help regionprops
regs = regionprops(imgBW, 'Centroid', 'MajorAxisLength', 'PixelIdxList');

figure(1)
subplot(1, 2, 1); imshow(imgBW);
subplot(1, 2, 2); imshow(imgRGB);

% kategorie objektu
categories = [{'vrut kratky'} {'vrut dlouhy'} {'sroub kratky'} {'sroub dlouhy'} {'matka mala cerna'} {'matka male pozink'} {'matka velka'} {'podlozka'}];

% cyklus pres jednotlive objekty 
for i = [1 : length(regs)]
    % zobrazeni indexu objektu
    x = regs(i).Centroid(1);
    y = regs(i).Centroid(2);
    subplot(1, 2, 1); text(x, y, sprintf('%d', i), 'Color', 'g');
        
    % muzete si dopocitat i dalsi pomocne priznaky:
    
    cat = '???';
    
    % zde doplnte navrzeny klasifikator, napr. podminky s limitnimi
    % hodnotamy priznaku; snazte se vse navrhovat co nejrobustneji
    if(regs(i).MajorAxisLength > 200)
        cat = 'vrut nebo sroub'; % nebo cat = categories(x);
    end
    
    % vypsani urcenych kategorii 
    subplot(1, 2, 2);   text(x, y,  cat, 'Color', 'g');
    
    % vsechny sledovane informace (i vami urcene) o objektech si muzete 
    % zobrazit vedle struktury regs v pomocne strukture regs_params
    regs_params(i) = struct('Id', i, 'Category', cat);
 end
  

