HelliceSaouli / GIBVH

GPU image-based visual hull implemntation C++/ CUDA
24 stars 9 forks source link

How can I run this program? #1

Open buddyhs opened 5 years ago

buddyhs commented 5 years ago

Hello, Thank you for your great work first. I want to use you program, but I dont find a cmakelist.txt, is there an other way to run these project?Thank you!

HelliceSaouli commented 5 years ago

Hey First of all, thank you for your interest in my work. Well this project was developed using Nsight Eclipse Edition IDE provided by Nvidia on Linux when installing CUDA. Hence, i didn't upload any makefile script. you can build your own makefile here are all the needed lib dependencies : -lGL -lSDL2 -lglut -lGLU -lGLEW -lX11 -lfreeimage -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_video Or use any other IDE as long as you know how to link your libs and NVCC compiler

buddyhs commented 5 years ago

Thanks for your response. I will take your advice and have a try, thank you very much!

HelliceSaouli commented 5 years ago

No problem, please if you have more questions please ask me? more the algorithm is presented in our paper : A.Saouli M.babahenini High Performance Volumetric Modeling from Silhouette: GPU-Image-Based Visual Hull

buddyhs commented 5 years ago

cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(opengl)

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") SET(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-gencode arch=compute_61,code=sm_61;-std=c++11;)

set(OpenCV_DIR "/home/sinkdream/Softwares/Opencv3.4.4/opencv-3.4.4/build") find_package(OpenCV REQUIRED) if (OPENCV_FOUND) include_directories(${OpenCV_INCLUDE_DIRS}) add_definitions(-DENABLE_OPENCV) list(APPEND LINK_LIB_LIST ${OpenCV_LIBS}) endif (OPENCV_FOUND)

find_package(Eigen3 REQUIRED) find_package(PkgConfig REQUIRED) FIND_PACKAGE(CUDA REQUIRED)

include_directories(Camera) include_directories(Geometry) include_directories(Input) include_directories(PixelBuffer) include_directories(shaders) include_directories(Texture) include_directories(Transforms) include_directories(Silhouettes) include_directories(volume) include_directories(Window) include_directories(cudaKernel) include_directories(./) set(SOURCE_FILES

src/cpp/some.cpp

Camera/vCamera.cpp
Geometry/Mesh.cpp
Input/input.cpp
PixelBuffer/PixelBuffer.cpp
shaders/Shader.cpp
Silhouettes/frame.cpp
Silhouettes/ImageDataArrays.cpp
Texture/TextureGL.cpp
Transforms/transform.cpp
volume/volume.cpp
Window/Fps.cpp
Window/Display.cpp
#cudaKernel/Findsilhouette.cu
#cudaKernel/render.cu

) add_library(SRC_LIBS STATIC ${SOURCE_FILES})

CUDA_ADD_EXECUTABLE(opengl main.cpp cudaKernel/Findsilhouette.cu cudaKernel/render.cu) target_link_libraries(opengl ${OpenCV_LIBS} ${CUDA_LIBRARIES} SRC_LIBS -lGL -lglut -lfreeimage -lX11 -lGLEW -lGLU -lSDL2)

buddyhs commented 5 years ago

hello, Thank you for your help. Now I can run this program by using a makefile script.Now I will read your paper and know more details about your program.If I have any question, I also hope get your help.Thanks very much. this is my cmakelists. If any one other need this, they can use my script

buddyhs commented 5 years ago

Can you give me the test sets of dancing woman? I want to run the dynamic scene. Thanks.

HelliceSaouli commented 5 years ago

Hey, thank you for the makefile script, you can upload it in the project by doing a pull request. for the dancer data set please check this: http://4drepository.inrialpes.fr/public/viewgroup/10

you can find the dancer here along with other datasets. However, you need to do some adjustment to the code. since some of these datasets provide only silhouette images or provide background images (for background subtraction). In fact, i have a stand-alone version of this code that runs on real-time captured dataset like the dancer. i will upload it this weekend as soon as possible

buddyhs commented 5 years ago

hello, I had some trouble and I think maybe need your help. #########function########### float resolution = pow(0.014928/(float)volumesize,1.0/3.0); this->_data = new float4[volumesize]; int index = 0; for(int i = 0; i < x; i++) { for(int k = 0; k < z; k++) { for(int j = 0; j < y; j++) { if(index > volumesize) break; this->_data[index].x = -0.13066 + i resolution; this->_data[index].y = -0.13066 + j resolution; this->_data[index].z = -0.74832 + k * resolution; this->_data[index].w = 1.0; index++; } } } #########function########### I don't know how to calculate these parameters(eg:0.014928、-0.13066). If I use my own data sets, I can't display reconstruction object.

HelliceSaouli commented 5 years ago

Hey. this is parameters that depend on the dataset. for instance, if you have ur own data set. u can find the bounding box according to the camera's position and orientation along with the resolution. In fact, for the x and y, you chose. the furthest and the nearest camera according to this axis for the z you have to see where the cameras are looking. One easy way is to use a Multi-view stereo method to reconstruct a coarse point cloud than use a third party software like Meshlab to display these points and compute the bounding box and resolution for you.

zhixiongzuo commented 3 years ago

Hello Saouli ,If I have the bounding box x is betwween (0,14000), y is (0 ,15000),and z is (0, 4000),my pics are 2160*1920,how can I caculate the resolution and parameters(eg:0.014928、-0.13066). Hope for your reply , thank you !

HelliceSaouli commented 3 years ago

@zhixiongzuo Hello, go to volume.cpp there is code under #ifdefine other that code is made for arbitry scene captured under 80 cm you can change resolution from 800/x to 15000/x

zhixiongzuo commented 3 years ago

@HelliceSaouli Thans you for your timely reply, I will try it . thanks again.