#ifndef HAUSDORFF_H
#define HAUSDORFF_H

#include <math.h>//abs

#include <funkce.h>
#include <my_image.h>

#include <stdlib.h>

class hausdorff
{
    //metody
public:
    hausdorff(my_image* image,bool mod=false);
    ~hausdorff();
    void find(my_image* image);
private:
    my_image * image2voroni(my_image * image);
    int find_distant(int x1,int y1,int x2,int y2);//vypocita vzdalenost mezi body
    void flood(int x,int y,my_image *voro);
    void del_image();//smaze obrazky pri opetovnem nacteni sablony

    int H_ab();
    int h_ab(int posun_x,int posun_y,my_image * imageA, my_image * voroB);//zjisti maximalni vzdalenost obrazu a od obrazu B, max min |a-b|
                //pro vsechny body z A, zjisti minimalni vzdalenostB (voroni)
                //a z teto vzdalenosti maximum



    //modifikace hausdorfa:
    float d(int x1,int y1,int x2,int y2,my_image * image1,my_image * image2);
    int d_min(int x,int y,my_image * image);


    ///////////////////////registrace bodu///////////////////////////////////////////////////
    std::vector<BOD> registruj(my_image * image);

    void H_ab_reg();
    float h_ab_reg(int posun_x,int posun_y,my_image * imageA, my_image * imageB);
    float Find_Nearest_Point_reg(BOD stred,my_image * image);




    //promenne
public:
    std::vector<BOD> body;

private:
    bool registruj_mod;//mod false-> klasicke prochazeni obrazku, mod true-> vsechny body z obrazku jsou ulozeny ve vektoru, vektor je pak prohledavan
    my_image * img_ref;
    my_image * voroni_ref;//ve value je minimalni vzdalenost
    my_image * img;
    my_image * voroni;
    float act_min_posun;
    BOD location;


    ///////////////////////registrace bodu///////////////////////////////////////////////////

    std::vector<BOD> body_img;
    std::vector<BOD> body_img_ref;
};

#endif // HAUSDORFF_H
