#ifndef _funkce
#define _funkce

#define LOGIN



#include<stdio.h>
#include<highgui.h>
#include <cv.h>
#include "fftw3.h"
#include <iostream>

using namespace std;

typedef struct cal_back_struct {
  const IplImage *orig;
  IplImage *img;
  CvSize size;
  CvPoint center_ret;//v promenne bude po kliknuti hodnoty kliku (x,y)
} CALL_BACK_STRUCT;




void prekladac(void);

void img_rotate(IplImage * img,double angle,CvPoint center);
void img_rotate(IplImage * img,double angle);//pretizeno, vola v centru obrazku fci img_rotate
int img_copy_image_beside(const IplImage * img_src,IplImage * img_big,float start);

IplImage * img_create_meta_shape(const IplImage * img,CvPoint center,CvSize size,float angle,float delta_angle);//!alokuje novou pamet
void my_mouse_callback( int event, int x, int y, int flags, void* param );
IplImage* Create_Shape(const IplImage*img_ref,CvSize window,CvPoint* shift=NULL);


IplImage * Create_Shape(const IplImage * img,CvPoint center,CvSize size,CvPoint shift=cvPoint(0,0),float angle=0 );//!alokuje novou pamet

int phase_correlation(const IplImage *ref, IplImage *tpl,CvPoint * max=NULL);//navrat hodnota je pozice obrazku(c. metashape)
CvPoint phase_correlation(const fftw_complex *img1 ,const fftw_complex *img2,CvSize size);//vstupni obrazy musi byt v FFT
int phase_correlation(IplImage *ref,const fftw_complex *img1 , IplImage *tpl,CvPoint * max=NULL);//ref->fft=img1 HYBRIDNI FCE(tzn.ref je fft a tpl je normalni




fftw_complex* img2fft(const IplImage *img);//tato funkce bude prepsana na vlastni navratovy typ, kterym bude struktura ktera bude obsahovat datovou cast (fftw_complex) a dale take img->width a img->height... tato struktura bude definovana v hunkce.h a bude vyuzita i pri funkci phse_corelation.//funkce alokuje pamet!




void view_result(const IplImage *img_ref,const IplImage * img_shape,CvPoint shift,float angle);

#endif

