Exemplo n.º 1
0
void BFS2::init() {
	float min_dist = std::numeric_limits<float>::max();
	RoadVertexDesc min_v1_desc;
	RoadVertexDesc min_v2_desc;

	// テンポラリで、手動でルートを指定
	//min_v1_desc = 33;
	//min_v2_desc = 74;
	min_v1_desc = 15;
	min_v2_desc = 5;

	//findBestRoots(roads1, roads2, min_v1_desc, min_v2_desc);

	if (tree1 != NULL) delete tree1;
	if (tree2 != NULL) delete tree2;
	tree1 = new BFSTree(roads1, min_v1_desc);
	tree2 = new BFSTree(roads2, min_v2_desc);

	correspondence = findCorrespondence(roads1, tree1, roads2, tree2);

	// シーケンスを生成
	clearSequence();
	for (int i = 0; i <= 20; i++) {
		float t = 1.0f - (float)i * 0.05f;

		sequence.push_back(interpolate(t));
	}

	selected = 0;
}
Exemplo n.º 2
0
int main(int argc, char* argv[]) {

	if (argc < 2) {
		printf("./match_image target_point.txt target.pgm [0.pgm ..]\n");
		return 1;
	}

	SDL_Init(SDL_INIT_VIDEO);
	SDL_WM_SetCaption("match_image",NULL);
	char buffer[128];
	target_point = fopen(argv[1],"w");
	FILE* ppm = fopen(argv[2],"r");
	if (!ppm) {
		printf("%s not found\n",argv[2]);
		return 1;
	}
	fgets(buffer,128,ppm); //P5 or P6
	do {
		fgets(buffer,128,ppm);
	} while (buffer[0]=='#'); //remove comments
	char *c = buffer;
	width = strtol(c,&c,10);
	height = strtol(c,&c,10);
	fgets(buffer,128,ppm); //255
	screen = SDL_SetVideoMode(width*2,height,24,SDL_SWSURFACE);
	leftscreen = SDL_CreateRGBSurface(0,width,height,24,0xFF0000,0xFF00,0xFF,0);
	rightscreen = SDL_CreateRGBSurface(0,width,height,24,0xFF0000,0xFF00,0xFF,0);
	Image leftimage = {width,height,NULL};
	Image rightimage = {width,height,NULL};
	leftimage.data = malloc(width*height*3);
	rightimage.data = malloc(width*height*3);
	leftrect.x = 0; leftrect.y = 0; leftrect.w = width; leftrect.h = height;
	rightrect.x = width; rightrect.y = 0; rightrect.w = width; rightrect.h = height;
	cx = 0.5 * (width-1);
	cy = 0.5 * (height-1);

	fread(leftimage.data,1,width*height,ppm);
	//populate gray level
	for (int i=width*height;i>=0;i--) {
		leftimage.data[i*3+2] = leftimage.data[i*3+1] = leftimage.data[i*3] = leftimage.data[i];
	}
	fclose(ppm);
	Color yellow = {255,255,0};
	List matches = {0,8,NULL};
	List rectList = {0,8,NULL};
	matches.data = malloc(8*sizeof(Match));
	rectList.data = calloc(8,sizeof(SDL_Rect));
	SDL_Rect* currentRect = rectList.data;

	imgcpy(leftimage,leftscreen);
	SDL_BlitSurface(leftscreen,NULL,screen,&leftrect);
	showRightImage(targetIndex++,&matches,rightimage);
	SDL_BlitSurface(rightscreen,NULL,screen,&rightrect);
	SDL_Flip(screen);

	SDL_Event event;
	while (true) {
		while (SDL_PollEvent(&event)) {
			switch(event.type){
				case SDL_KEYDOWN:
					switch( event.key.keysym.sym ){
						case 'b':
						if (showRightImage(targetIndex--,&matches,rightimage)) {
							SDL_BlitSurface(rightscreen,NULL,screen,&rightrect);
							SDL_Flip(screen);
						}
						break;
						case 'n':
						if (showRightImage(targetIndex++,&matches,rightimage)) {
							SDL_BlitSurface(rightscreen,NULL,screen,&rightrect);
							SDL_Flip(screen);
						}
						break;
						case 'm':
						findCorrespondence(matches,rectList);
						SDL_BlitSurface(rightscreen,NULL,screen,&rightrect);
						SDL_Flip(screen);
						break;
						case 'v':
						findCorrespondence(matches,rectList);
						while (showRightImage(targetIndex++,&matches,rightimage)) {
							findCorrespondence(matches,rectList);
							SDL_BlitSurface(rightscreen,NULL,screen,&rightrect);
							SDL_Flip(screen);
						}
						break;
						default:
						break;
					}
					break;
				case SDL_MOUSEBUTTONDOWN:
					if (event.button.button == SDL_BUTTON_LEFT) {
						mouseDrag = true;
						previousX = event.button.x;
						previousY = event.button.y;
						rectList.size++;
					}
					break;
				case SDL_MOUSEMOTION:
					if (mouseDrag) {
						imgcpy(leftimage,leftscreen);
						*currentRect = getVarRect(previousX,previousY,event.motion.x,event.motion.y);
						for (int i=0;i<rectList.size;i++)
							drawRect(leftscreen,((SDL_Rect*)rectList.data)[i],yellow);
						SDL_BlitSurface(leftscreen,NULL,screen,&leftrect);
						SDL_Flip(screen);
					}
					break;
				case SDL_MOUSEBUTTONUP:
					imgcpy(rightimage,rightscreen);
					SDL_BlitSurface(rightscreen,NULL,screen,&rightrect);
					if (mouseDrag) {
						mouseDrag = false;
						SDL_BlitSurface(rightscreen,NULL,screen,&rightrect);
						currentRect++;
					} else {
						imgcpy(leftimage,leftscreen);
						SDL_BlitSurface(leftscreen,NULL,screen,&leftrect);
						currentRect->w = 0;
						currentRect->h = 0;
					}
					SDL_Flip(screen);
					break;
				case SDL_QUIT:
					exit(0);
					break;
			}
		}
		usleep(1000);
	}

	fclose(target_point);
	free(leftimage.data);
	free(rightimage.data);

}