void keys(unsigned char key, int x, int y) { switch(key){ case 'r': kfusion.setPose( toMatrix4( trans * rot * preTrans )); break; case 'c': kfusion.Reset(); kfusion.setPose( toMatrix4( trans * rot * preTrans )); break; case 'd': cout << kfusion.pose << endl; break; case 'q': exit(0); break; } glutPostRedisplay(); }
void keys(unsigned char key, int x, int y){ switch(key){ case 'c': kfusion.Reset(); kfusion.setPose(toMatrix4(initPose)); reset = true; break; case 'q': exit(0); break; } }
void keys(unsigned char key, int x, int y){ switch(key){ case 'c': kfusion.Reset(); kfusion.setPose(toMatrix4(initPose)); reset = true; break; case 'q': exit(0); break; case 'i': should_integrate = !should_integrate; break; case 't': render_texture = !render_texture; break; } }
int main(int argc, char ** argv) { const float size = (argc > 1) ? atof(argv[1]) : 2.f; KFusionConfig config; // it is enough now to set the volume resolution once. // everything else is derived from that. // config.volumeSize = make_uint3(64); config.volumeSize = make_uint3(128); // config.volumeSize = make_uint3(256); // these are physical dimensions in meters config.volumeDimensions = make_float3(size); config.nearPlane = 0.4f; config.farPlane = 5.0f; config.mu = 0.1; config.combinedTrackAndReduce = false; // change the following parameters for using 640 x 480 input images config.inputSize = make_uint2(320,240); config.camera = make_float4(297.12732, 296.24240, 169.89365, 121.25151); // config.iterations is a vector<int>, the length determines // the number of levels to be used in tracking // push back more then 3 iteraton numbers to get more levels. config.iterations[0] = 10; config.iterations[1] = 5; config.iterations[2] = 4; config.dist_threshold = (argc > 2 ) ? atof(argv[2]) : config.dist_threshold; config.normal_threshold = (argc > 3 ) ? atof(argv[3]) : config.normal_threshold; initPose = SE3<float>(makeVector(size/2, size/2, 0, 0, 0, 0)); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE ); glutInitWindowSize(config.inputSize.x * 2, config.inputSize.y * 2); glutCreateWindow("kfusion"); kfusion.Init(config); if(printCUDAError()) exit(1); kfusion.setPose(toMatrix4(initPose)); lightScene.alloc(config.inputSize), depth.alloc(config.inputSize), lightModel.alloc(config.inputSize); depthImage.alloc(make_uint2(640, 480)); if(InitKinect(depthImage.data())) exit(1); atexit(exitFunc); glutDisplayFunc(display); glutKeyboardFunc(keys); glutReshapeFunc(reshape); glutIdleFunc(idle); glutMainLoop(); return 0; }
int main(int argc, char ** argv) { const float default_size = 2.f; KFusionConfig config; // Search for --help argument for (int i = 0; i < argc; ++i) { if (std::string(argv[i]) == "--help") { std::cout << "Usage: kinect [size] [dist_threshold] [normal_threshold]" << std::endl; std::cout << std::endl; std::cout << "Defaults:" << std::endl; std::cout << " size: " << default_size << std::endl; std::cout << " dist_threshold: " << config.dist_threshold << std::endl; std::cout << " normal_threshold: " << config.normal_threshold << std::endl; return 0; } } const float size = (argc > 1) ? atof(argv[1]) : default_size; // it is enough now to set the volume resolution once. // everything else is derived from that. // config.volumeSize = make_uint3(64); // config.volumeSize = make_uint3(128); // config.volumeSize = make_uint3(256); config.volumeSize = make_uint3(512); // these are physical dimensions in meters config.volumeDimensions = make_float3(size); config.nearPlane = 0.4f; config.farPlane = 5.0f; config.mu = 0.1; config.combinedTrackAndReduce = false; // change the following parameters for using 640 x 480 input images config.inputSize = make_uint2(320,240); // config.inputSize = make_uint2(640,480); config.camera = make_float4(531.15/2, 531.15/2, 640/4, 480/4); // config.camera = make_float4(614.221/2, 614.221/2, 640/4, 480/4); // config.iterations is a vector<int>, the length determines // the number of levels to be used in tracking // push back more then 3 iteraton numbers to get more levels. config.iterations[0] = 10; config.iterations[1] = 5; config.iterations[2] = 4; config.dist_threshold = (argc > 2 ) ? atof(argv[2]) : config.dist_threshold; config.normal_threshold = (argc > 3 ) ? atof(argv[3]) : config.normal_threshold; initPose = SE3<float>(makeVector(size/2, size/2, 0, 0, 0, 0)); // rgbdDevice = RGBD::create(RGBD::kRGBDDeviceKinect); // rgbdDevice = RGBD::create(RGBD::kRGBDRealSense); rgbdDevice = RGBD::create(RGBD::kRGBDDeviceOpenNI2); if (rgbdDevice == 0L) { std::cerr << "no capture device" << std::endl; return -1; } glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE ); glutInitWindowSize(config.inputSize.x * 2 + 640, max(config.inputSize.y * 2, 480)); glutCreateWindow("kfusion"); kfusion.Init(config); // input buffers depthImage[0].alloc(make_uint2(640, 480)); depthImage[1].alloc(make_uint2(640, 480)); rgbImage.alloc(make_uint2(640, 480)); // render buffers lightScene.alloc(config.inputSize), trackModel.alloc(config.inputSize), lightModel.alloc(config.inputSize); pos.alloc(make_uint2(640, 480)), normals.alloc(make_uint2(640, 480)), dep.alloc(make_uint2(640, 480)), texModel.alloc(make_uint2(640, 480)); if(printCUDAError()) { cudaDeviceReset(); return 1; } std::cout << "Using depthImage size: " << depthImage[0].size.x*depthImage[0].size.y * sizeof(uint16_t) << " bytes " << std::endl; std::cout << "Using rgbImage size: " << rgbImage.size.x*rgbImage.size.y * sizeof(uchar3) << " bytes " << std::endl; memset(depthImage[0].data(), 0, depthImage[0].size.x*depthImage[0].size.y * sizeof(uint16_t)); memset(depthImage[1].data(), 0, depthImage[1].size.x*depthImage[1].size.y * sizeof(uint16_t)); memset(rgbImage.data(), 0, rgbImage.size.x*rgbImage.size.y * sizeof(uchar3)); uint16_t * buffers[2] = {depthImage[0].data(), depthImage[1].data()}; rgbdDevice->setBuffers(buffers, (unsigned char *)rgbImage.data()); if (rgbdDevice->open()){ cudaDeviceReset(); return 1; } kfusion.setPose(toMatrix4(initPose)); // model rendering parameters preTrans = SE3<float>::exp(makeVector(0.0, 0, -size, 0, 0, 0)); trans = SE3<float>::exp(makeVector(0.5, 0.5, 0.5, 0, 0, 0) * size); atexit(exitFunc); glutDisplayFunc(display); glutKeyboardFunc(keys); glutSpecialFunc(specials); glutReshapeFunc(reshape); glutIdleFunc(idle); glutMainLoop(); // CloseKinect(); return 0; }
int main(int argc, char ** argv) { benchmark = argc > 1 && string(argv[1]) == "-b"; KFusionConfig config; config.volumeSize = make_uint3(128); config.combinedTrackAndReduce = false; config.iterations[0] = 10; config.iterations[1] = 5; config.iterations[2] = 5; config.inputSize = make_uint2(320, 240); config.camera = make_float4(100, 100, 160, 120); config.nearPlane = 0.001; config.maxweight = 100; config.mu = 0.1; config.dist_threshold = 0.2f; config.normal_threshold = 0.8f; kfusion.Init(config); if(printCUDAError()){ cudaDeviceReset(); exit(1); } reference.init(config.volumeSize, config.volumeDimensions); initVolumeWrap(reference, 1.0f); setBoxWrap(reference, make_float3(0.1f,0.1f,0.8f), make_float3(0.9f, 0.9f, 0.9f), -1.0f); setBoxWrap(reference, make_float3(0.1f,0.8f,0.1f), make_float3(0.9f, 0.9f, 0.9f), -1.0f); setBoxWrap(reference, make_float3(0.8f,0.1f,0.1f), make_float3(0.9f, 0.9f, 0.9f), -1.0f); setSphereWrap(reference, make_float3(0.5f), 0.2f, -1.0f); kfusion.setPose( toMatrix4( trans * rot * preTrans )); vertex.alloc(config.inputSize); normal.alloc(config.inputSize); depth.alloc(config.inputSize); rgb.alloc(config.inputSize); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE ); glutInitWindowSize(config.inputSize.x * 3, config.inputSize.y * 3); glutCreateWindow("kfusion test"); glutDisplayFunc(display); glutKeyboardFunc(keys); glutSpecialFunc(specials); glutReshapeFunc(reshape); glutIdleFunc(idle); glutMainLoop(); cudaDeviceReset(); return 0; }
int main(int argc, char ** argv) { const float size = (argc > 1) ? atof(argv[1]) : 2.f; KFusionConfig config; // it is enough now to set the volume resolution once. // everything else is derived from that. // config.volumeSize = make_uint3(64); // config.volumeSize = make_uint3(128); config.volumeSize = make_uint3(256); // these are physical dimensions in meters config.volumeDimensions = make_float3(size); config.nearPlane = 0.4f; config.farPlane = 5.0f; config.mu = 0.1; config.combinedTrackAndReduce = false; // change the following parameters for using 640 x 480 input images config.inputSize = make_uint2(320,240); config.camera = make_float4(531.15/2, 531.15/2, 640/4, 480/4); // config.iterations is a vector<int>, the length determines // the number of levels to be used in tracking // push back more then 3 iteraton numbers to get more levels. config.iterations[0] = 10; config.iterations[1] = 5; config.iterations[2] = 4; config.dist_threshold = (argc > 2 ) ? atof(argv[2]) : config.dist_threshold; config.normal_threshold = (argc > 3 ) ? atof(argv[3]) : config.normal_threshold; initPose = SE3<float>(makeVector(size/2, size/2, 0, 0, 0, 0)); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE ); glutInitWindowSize(config.inputSize.x * 2 + 640, max(config.inputSize.y * 2, 480)); glutCreateWindow("kfusion"); kfusion.Init(config); // input buffers depthImage[0].alloc(make_uint2(640, 480)); depthImage[1].alloc(make_uint2(640, 480)); rgbImage.alloc(make_uint2(640, 480)); // render buffers lightScene.alloc(config.inputSize), trackModel.alloc(config.inputSize), lightModel.alloc(config.inputSize); pos.alloc(make_uint2(640, 480)), normals.alloc(make_uint2(640, 480)), dep.alloc(make_uint2(640, 480)), texModel.alloc(make_uint2(640, 480)); if(printCUDAError()) { cudaDeviceReset(); return 1; } memset(depthImage[0].data(), 0, depthImage[0].size.x*depthImage[0].size.y * sizeof(uint16_t)); memset(depthImage[1].data(), 0, depthImage[1].size.x*depthImage[1].size.y * sizeof(uint16_t)); memset(rgbImage.data(), 0, rgbImage.size.x*rgbImage.size.y * sizeof(uchar3)); uint16_t * buffers[2] = {depthImage[0].data(), depthImage[1].data()}; if(InitKinect(buffers, (unsigned char *)rgbImage.data())){ cudaDeviceReset(); return 1; } kfusion.setPose(toMatrix4(initPose)); // model rendering parameters preTrans = SE3<float>::exp(makeVector(0.0, 0, -size, 0, 0, 0)); trans = SE3<float>::exp(makeVector(0.5, 0.5, 0.5, 0, 0, 0) * size); atexit(exitFunc); glutDisplayFunc(display); glutKeyboardFunc(keys); glutSpecialFunc(specials); glutReshapeFunc(reshape); glutIdleFunc(idle); glutMainLoop(); CloseKinect(); return 0; }