#include<stdio.h>
#include "funkce.h"

#include<highgui.h>
#include <cv.h>

//#define TEXT(t) (cout<<t)
#define TEXT(t)

//GLOBALNI PROMENNE
float angle_range=20.0;
float angle_resolution=5.0;

int main( int argc, char** argv ){
TEXT("pocet argumentu je "<<argc-1<<"\n");
prekladac();
CvPoint pozice,shift;
	IplImage *img_ref = cvLoadImage("1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
	IplImage *img_load = cvLoadImage("3.jpg", CV_LOAD_IMAGE_GRAYSCALE);
	if(img_ref==NULL){cout <<"nezdarilo se nacteni obrazku \n";}
	if(img_ref->width<=0 ||img_ref->height<=0){cout <<"nezdarilo se nacteni obrazku, spatne velikosti \n";}

	CvSize window=cvSize(500,500);//velikost detekovaneho useku
	CvPoint center=cvPoint(img_ref->width/2+50,img_ref->height/2+100);//stred okna

	IplImage *img_meta=img_create_meta_shape(img_ref,center,window,angle_range,angle_resolution);
	fftw_complex* img_meta_fft=img2fft(img_meta);

	IplImage *img_tpl=NULL;
	IplImage *img_p=NULL;

float angle=0.0,angle_ret;
shift=cvPoint(0,0);


for(int i=-100;i<121;i+=60)
for(int j=-100;j<121;j+=20)
for(int k=-20;k<=20;k+=5){
	/*shift.x=i;
	shift.y=j;
	angle=(float)k;
	//*/

 	//img_tpl=Create_Shape(img_load,window,&shift);//fce alokuje pamet!
		//shift.x=shift.x-center.x;
		//shift.y=shift.y-center.y;

	img_tpl=Create_Shape(img_load,center,window,shift,angle);//fce alokuje pamet!

	int pozition=phase_correlation(img_meta,img_meta_fft ,img_tpl);
	TEXT("funkce vratila pozici "<<pozition<<"\n");
	angle_ret=(((img_meta->width/window.width)-1-pozition)*angle_resolution)-angle_range;
	TEXT("koreluji nahotovo (uhel je"<<angle_ret<<":\n");
	img_p=Create_Shape(img_ref,center,window,cvPoint(0,0),angle_ret);//fce alokuje pamet!
	
	phase_correlation(img_p,img_tpl,&pozice);

	if(pozice.x>img_tpl->width/2)pozice.x=pozice.x-img_tpl->width;
	if(pozice.y>img_tpl->height/2)pozice.y=pozice.y-img_tpl->height;
	pozice.x=pozice.x*(-1);
	pozice.y=pozice.y*(-1);
	if(pozice.x>0)pozice.y--;
	TEXT("sablona posunuta o "<<pozice.x<<"x"<<pozice.y<<"\n");

//zhodnoceni vystupu
//	if(angle!=angle_ret || shift.x!=pozice.x || shift.y!=pozice.y){
		cout<<"uhel: "<<angle<<" > "<<angle_ret<<"\tpozice: "<<shift.x<<" > "<<pozice.x<<"\t "<<shift.y<<" > "<<pozice.y;

		cout<<"\t";
		if(angle!=angle_ret)cout<<" chyba uhlu!"<<angle-angle_ret<<" . ";
		if(shift.x!=pozice.x)cout<<" chyba hodnoty X "<<shift.x-pozice.x<<" . ";
		if(shift.y!=pozice.y)cout<<" chyba hodnoty Y "<<shift.y-pozice.y<<" . ";
		cout<<"\n";
//	}


view_result(img_ref,img_tpl,cvPoint(pozice.x+center.x,pozice.y+center.y),angle_ret);//cvPoint shift == absolutni pozice vuci ref obr

	cvReleaseImage(&img_tpl);
	cvReleaseImage(&img_p);
}




	cvReleaseImage(&img_ref);
	cvReleaseImage(&img_load);
	cvReleaseImage(&img_meta);
return 0;}















