This project is mainly based on the seminal work Unstructured Lumigraph Rendering (ULR). It includes an image-based renderer using explicit geometry that can render color, blending weigths and depth. The explicit geometry can be of two types: an accurate reconstruction (i.e., colmap) or a approximate coarse proxy (cube or plane).
reconstruction.mp4
proxy.mp4
Clone the repo and initialize submodules
git clone https://github.com/manurare/ULR.git
git submodule update --init
For GLEW and Eigen use:
sudo apt-get install libglew-dev
sudo apt install libeigen3-dev
Build Colmap, Pangolin and Triangle inside the third_party directory.
For Triangle
cd third_party/triangle
mkdir build
cd build
cmake ..
make -j
Once done, we can build this repo
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
Should be inside directory named datasets
Examples of working datasets come from SIBR datasets. Download the Unstructured Lumigraph option.
Create the exact same folder structure as SIBR datasets. You can use the following:
rsync -a --include='*/' --exclude='*' SIBR_dataset/ yourOwnDataset/
Please name your images under the yourOwnDataset/sibr_cm/images directory as: %08zu.jpg, i.e., 8 digits with zero padding. Also, make sure the filenames start indexing at 0.
./main datasets/tree18/sibr_cm/ [0|1]
The last argument can take 0 or 1 values:
0: Do not use proxy geometry. Use SfM (colmap) dense reconstruction instead.1(default): Use a simple proxy geometry. At the moment only plane and cube shapes are supported.
We can fly-through the scene using controls similar to those of videogames:
Click & Drag: Rotate viewMouse Wheel: Zoom in/outW|S: Shift verticallyA|D: Shift horizontallyK: Increase candidates (max 8)L: Decrease candidates (min 1)E: Show depthB: Show blending weightsP: Overlay wireframe
The original work creates the blending field per vertex. They evaluate the contribution of each input view at the vertices defined by the intersection of a coarse image grid and the proxy. Instead, in this project, I evaluate the contribution of each input view per fragment recovering the final blending field.