Code Monkey home page Code Monkey logo

nerf's Introduction

NeRF: Neural Radiance Fields

Open Tiny-NeRF in Colab
Tensorflow implementation of optimizing a neural representation for a single scene and rendering new views.

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
Ben Mildenhall*1, Pratul P. Srinivasan*1, Matthew Tancik*1, Jonathan T. Barron2, Ravi Ramamoorthi3, Ren Ng1
1UC Berkeley, 2Google Research, 3UC San Diego
*denotes equal contribution
in ECCV 2020 (Oral Presentation, Best Paper Honorable Mention)

TL;DR quickstart

To setup a conda environment, download example training data, begin the training process, and launch Tensorboard:

conda env create -f environment.yml
conda activate nerf
bash download_example_data.sh
python run_nerf.py --config config_fern.txt
tensorboard --logdir=logs/summaries --port=6006

If everything works without errors, you can now go to localhost:6006 in your browser and watch the "Fern" scene train.

Setup

Python 3 dependencies:

  • Tensorflow 1.15
  • matplotlib
  • numpy
  • imageio
  • configargparse

The LLFF data loader requires ImageMagick.

We provide a conda environment setup file including all of the above dependencies. Create the conda environment nerf by running:

conda env create -f environment.yml

You will also need the LLFF code (and COLMAP) set up to compute poses if you want to run on your own real data.

What is a NeRF?

A neural radiance field is a simple fully connected network (weights are ~5MB) trained to reproduce input views of a single scene using a rendering loss. The network directly maps from spatial location and viewing direction (5D input) to color and opacity (4D output), acting as the "volume" so we can use volume rendering to differentiably render new views.

Optimizing a NeRF takes between a few hours and a day or two (depending on resolution) and only requires a single GPU. Rendering an image from an optimized NeRF takes somewhere between less than a second and ~30 seconds, again depending on resolution.

Running code

Here we show how to run our code on two example scenes. You can download the rest of the synthetic and real data used in the paper here.

Optimizing a NeRF

Run

bash download_example_data.sh

to get the our synthetic Lego dataset and the LLFF Fern dataset.

To optimize a low-res Fern NeRF:

python run_nerf.py --config config_fern.txt

After 200k iterations (about 15 hours), you should get a video like this at logs/fern_test/fern_test_spiral_200000_rgb.mp4:

ferngif

To optimize a low-res Lego NeRF:

python run_nerf.py --config config_lego.txt

After 200k iterations, you should get a video like this:

legogif

Rendering a NeRF

Run

bash download_example_weights.sh

to get a pretrained high-res NeRF for the Fern dataset. Now you can use render_demo.ipynb to render new views.

Replicating the paper results

The example config files run at lower resolutions than the quantitative/qualitative results in the paper and video. To replicate the results from the paper, start with the config files in paper_configs/. Our synthetic Blender data and LLFF scenes are hosted here and the DeepVoxels data is hosted by Vincent Sitzmann here.

Extracting geometry from a NeRF

Check out extract_mesh.ipynb for an example of running marching cubes to extract a triangle mesh from a trained NeRF network. You'll need the install the PyMCubes package for marching cubes plus the trimesh and pyrender packages if you want to render the mesh inside the notebook:

pip install trimesh pyrender PyMCubes

Generating poses for your own scenes

Don't have poses?

We recommend using the imgs2poses.py script from the LLFF code. Then you can pass the base scene directory into our code using --datadir <myscene> along with -dataset_type llff. You can take a look at the config_fern.txt config file for example settings to use for a forward facing scene. For a spherically captured 360 scene, we recomment adding the --no_ndc --spherify --lindisp flags.

Already have poses!

In run_nerf.py and all other code, we use the same pose coordinate system as in OpenGL: the local camera coordinate system of an image is defined in a way that the X axis points to the right, the Y axis upwards, and the Z axis backwards as seen from the image.

Poses are stored as 3x4 numpy arrays that represent camera-to-world transformation matrices. The other data you will need is simple pinhole camera intrinsics (hwf = [height, width, focal length]) and near/far scene bounds. Take a look at our data loading code to see more.

Citation

@inproceedings{mildenhall2020nerf,
  title={NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis},
  author={Ben Mildenhall and Pratul P. Srinivasan and Matthew Tancik and Jonathan T. Barron and Ravi Ramamoorthi and Ren Ng},
  year={2020},
  booktitle={ECCV},
}

nerf's People

Contributors

bmild avatar duckworthd avatar holzers avatar matt-williams avatar tancik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nerf's Issues

tiny_nerf_data.npz missing

I would love to play around with the tiny nerf notebook but I can't find the file tiny_nerf_data.npz or a script that generates it.

Error on render_demo.ipynb with pretrained checkpoints

Did a basic install, ran bash download_example_weights.sh, and now I'm getting this error when running the # Create nerf model cell in render_demo.ipynb:

ValueError: You called set_weights(weights) on layer "model_2" with a weight list of length 24, but the layer was expecting 22 weights. Provided weights: [array([[ 2.2547479e-01, 1.2292581e-01, -7.073085...

I figure its a sizing mismatch of the pretrained model and the code, but I dont know for sure. Could very well be because I installed something wrong.

Full output is this:

MODEL 63 27 <class 'int'> <class 'int'> True
(?, 90) (?, 63) (?, 27)
MODEL 63 27 <class 'int'> <class 'int'> True
(?, 90) (?, 63) (?, 27)
Found ckpts ['./logs/fern_example/model_200000.npy']
Reloading from ./logs/fern_example/model_200000.npy
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-10-add5623f69fa> in <module>
      1 # Create nerf model
----> 2 _, render_kwargs_test, start, grad_vars, models = run_nerf.create_nerf(args)
      3 
      4 bds_dict = {
      5     'near' : tf.cast(near, tf.float32),

/workspace/data-vol/image/nerf/run_nerf.py in create_nerf(args)
    446         ft_weights = ckpts[-1]
    447         print('Reloading from', ft_weights)
--> 448         model.set_weights(np.load(ft_weights, allow_pickle=True))
    449         start = int(ft_weights[-10:-4]) + 1
    450         print('Resetting step to', start)

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer.py in set_weights(self, weights)
   1330                        str(len(weights)) + ', but the layer was expecting ' +
   1331                        str(len(params)) + ' weights. Provided weights: ' +
-> 1332                        str(weights)[:50] + '...')
   1333     if not params:
   1334       return

ValueError: You called `set_weights(weights)` on layer "model_2" with a  weight list of length 24, but the layer was expecting 22 weights. Provided weights: [array([[ 2.2547479e-01,  1.2292581e-01, -7.073085...

And heres a dump of the args which was loaded in the args = parser.parse_args('--config {} --ft_path {}'.format(config, os.path.join(basedir, expname, 'model_200000.npy'))) cell:

Namespace(
    N_importance=128,
    N_rand=4096,
    N_samples=64,
    basedir='./logs/',
    chunk=32768,
    config='./logs/fern_example/config.txt',
    datadir='./data/nerf_llff_data/fern',
    dataset_type='llff',
    expname=None,
    factor=4,
    ft_path='./logs/fern_example/model_200000.npy',
    half_res=False,
    i_embed=0,
    i_img=500,
    i_print=100,
    i_testset=50000,
    i_video=50000,
    i_weights=10000,
    lindisp=False,
    llffhold=8,
    lrate=0.0005,
    lrate_decay=250,
    multires=10,
    multires_views=4,
    netchunk=65536,
    netdepth=8,
    netdepth_fine=8,
    netwidth=256,
    netwidth_fine=256,
    no_batching=False,
    no_ndc=False,
    no_reload=False,
    perturb=1.0,
    raw_noise_std=0.0,
    render_factor=0,
    render_only=False,
    render_test=False,
    shape='greek',
    spherify=False,
    testskip=8,
    use_viewdirs=True,
    white_bkgd=False
)

What can we do with our own trained model?

I've trained my own nerf model using 80~100 real images successfully, it takes 8 hours for 50000 iters (probably my GPU not so good), so i think it will take four times hours for 20k iters, it's too long.

And i have no idea about how to use the trained model, because it's not like most general deep learning models. In my opinion, when we train a model for a specific object, then this model can only be tested for images which similar to the train set. so what can we do with our own trained model? all i know is that we can use it to extract mesh model.

My goal is to build a 3D model with some 2D images, i don't konw whether this repo can achieve it or not. The biggest problem is how to use depth map to add color to the extract mesh model. Can you show some guideline for me? I'll be very appreciate.

installation problems

Is there a write up somewhere how to install the environment needed to run the demos?
Currently my main problem is not to be able to downgrade the Cuda toolkit from 10.2 to 10.1 as tensorflow 1.15 requires it.

Conversion between NDC coordinate and world coordinate

Hi, thanks for the great work!

I want to project a 3D point [x, y, z] to an arbitrary camera's image plane. This can be done easily if not using NDC, because we can use the w3c and c2w matrix Colmap provided.

If NDC is used, we then need to invert the NDC equation to get back world space values. You mentioned in issue #35, that the conversion is:

z = 2 / (z' - 1)
x = -x' * z * W / 2 / f
y = -y' * z * H / 2 / f

As a sanity check, I did the following experiments:

  1. Construct rays_d and rays_o by get_rays_np.

  2. Construct z_vals by near * (1.-tf.linspace(0., 1., 64)) + far * (tf.linspace(0., 1., 64)).

  3. Construct 3D points pts by rays_o[...,None,:] + rays_d[...,None,:] * z_vals[...,:,None]. These points are in the world coordinate.

  4. Construct rays_d and rays_o in the NDC coordinate by ndc_rays(H, W, focal, tf.cast(1., tf.float32), rays_o, rays_d).

  5. Construct z_vals by 0. * (1.-tf.linspace(0., 1., 64)) + 1. * (tf.linspace(0., 1., 64)).

  6. Construct 3D points pts_NDC by rays_o[...,None,:] + rays_d[...,None,:] * z_vals[...,:,None]. These points are in the NDC coordinate.

  7. Change pts_NDC from the NDC coordinate to the world coordinate.

pts_NDC2world_z = 2 / (pts_NDC[..., 2:] - 1)
pts_NDC2world_x = - pts_NDC[..., 0:1] * pts_NDC2world_z * W / 2 / f
pts_NDC2world_y = - pts_NDC[..., 1:2] * pts_NDC2world_z * H / 2 / f
pts_NDC2world = concatenate(pts_NDC2world_x, pts_NDC2world_y, pts_NDC2world_z)

Ideally, pts_NDC2world and pts should be the same. But they are not. Am I missing something? Thank you in advance!

How to generate 3D model?

Or just one video file?
Fern's training model is 200000. There are 200000 videos, but the changes are very slight. I'm using VLC to view the videos.
You and the trained pre training model have been downloaded and then installed,trimesh and pyrender packages。
So what? Can I generate / obj file later?

Re-rendering

Hi, Thanks for this impressive work and for sharing the code.
Do you think it's possible - using your framework - to re-render a scene - for example with different illumination?
If yes, how would you proceed to do it?
Thanks

NDC near plane definition

Thanks for sharing the NDC projection derivation in previous issues. I just have a queston regarding the "final trick" you mentioned at the bottom of page 3 where you move the ray's origin to near plane then perform the projection. Why do you use z = -n instead of z = n? It does make sense in equation 20 to plug in -n but what's the physial meaning in this --- is it because the ray is originally in the -z direction?
(When the code uses front-facing llff images, near plane is at 1, but you are in fact pushing the origin to -1 which is required for NDC, but what does the near plane at 1 represent? Or is it the same as -1 but just the definition of direction is different?)

Thanks in advance!

Extending nerf to support Temporal Coherence for image sequences.

Hi,

I have been looking at your work done on nerf and have some ideas about future funtionality that would be very handy for lightfield video synthesis.

Firstly I was wondering about the feasibility of implementing Temporal Coherence checks as a loss function.

Secondly being able to split image sets into volume tiles to parallelize computation of specific regions of interest.

My third idea would be to wrap these volume tiles in sparse data set checks with Taichi in order to tell if the volume has changed over time and needs to be updated.

I'd assume there would need to be a system in place to manage/write/read these volume containers to disk efficiently and also manage volume frames as they change over time.

Additionally it would be handy to define a known camera rig to optimize against in specific cases.

Let me know what you think!

Ian

imageMagick

Amazing work to the team.
Can i skip this one dependency imagemagick, or is there a resolve easy?
You only need it to align your cameras?

"0x288" as image size

[rawvideo demuxer @ 0x55ed9798a7a0] Unable to parse option value "0x288" as image size
[rawvideo demuxer @ 0x55ed9798a7a0] Error setting option video_size to value 0x288.
pipe:: Invalid argument

Full resolution synthesis

What is the best way to synthesize full resolution image? For real images that have 4032x3024 image size, I tried default 1/8 scale training and it works quite well, but it already takes about 7s to synthesize an image. When I tried 1/4 scale training, first the training time increases as there are more rays, more important of all, inference time also increases quadratically (so to about 30s) with size. Of course, the image quality improves in terms of higher PSNR, but maybe not that much to human eye.

There are two alternatives I can think of:

  1. synthesize on lowres images then use some super-resolution techniques to generate highres images
  2. train on full resolution using your algo

In your opinion, which one is better in practice given limited resource and time?

the direction in get_rays

May I know how do you derive this equation?

dirs = tf.stack([(i-W*.5)/focal, -(j-H*.5)/focal, -tf.ones_like(i)], -1)

I read this article and gained some insight on the transformation between coordinates. However, the formula seems to be different than yours, in particular the +0.5 to center the pixels.

tips for training real 360 inward-facing scene

I tried to train on my own 360 inward-facing scenes, however, there is a huge portion of noise in the output: It doesn't disappear no matter how many steps I train.
002
I follow the suggestion in the readme and add --no_ndc --spherify --lindisp, the other settings are same as fern.
I suspect that it is due to the fact that input images has many arbitrary backgrounds, which deteriorates the training? For example some of the training images:
IMG_4491
IMG_4500
These arbitrary backgrounds are inevitable unless I have a infinite ground or an infinitely large table...
What's your opinion on this problem? Is it really due to the background or any other reason?

some maths about weights sum

I found this part of code confusing at first sight:

nerf/run_nerf.py

Lines 145 to 154 in c39def3

# Computed weighted color of each sample along each ray.
rgb_map = tf.reduce_sum(
weights[..., None] * rgb, axis=-2) # [N_rays, 3]
# Estimated depth map is expected distance.
depth_map = tf.reduce_sum(weights * z_vals, axis=-1)
# Disparity map is inverse depth.
disp_map = 1./tf.maximum(1e-10, depth_map /
tf.reduce_sum(weights, axis=-1))

More precisely, you divide by the weights sum for disparity but not for rgb and depth.

number of output channels

Normally the output has only 4 channels: rgb and sigma, but here it is set to 5 when N_importance>0, which is always the case in default experiments.

output_ch = 5 if args.N_importance > 0 else 4

So what does this 5th output do? I checked the code of raw2outputs and it seems the 5th element is never accessed, so it means the network has a redundant output?

Image undistortion

Is image undistortion required? With the current COLMAP setup it seems it's not performed.
Won't the mathematical derivations be broken due to distortion?

LLFF data preprocessing

From what I can decipher, the pose_bounds.npy contains 3x5 pose matrices and 2 depth bounds for each image. Each pose has [R T] as the left 3x4 matrix and [H W F] as the right 3x1 matrix.

However I get confused by the functions poses_avg and recenter_poses. What do these functions do and why?

I checked the original code but there aren't these averaging or recentering.

License

Hi,

Can you please add a license?

Thanks!

Config for the mic scene

Hi @bmild,

Do you happen to have a separate config for the mic scene? (or the defaults for blender sequences are expected to work?)

3d model from real images

Hello, thanks for this great work!

Can you give me a hint how can we create the 3d model same as in lego extract_mesh.ipynb example using real life images?

How much video memory is needed to run the test example?

My laptop's video card is 1660Ti, and I always run out of resources.
Runtime exception:
tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM when allocating tensor with shape[4194304,90] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc [Op:ConcatV2]name: concat

How to create a new dataset?

How to create a new dataset?Can data sources take photos with clean objects? You should be using the game engine to make your own datasets. Do I also need to use blender to make my own datasets? How do you make your own datasets?nerf_pl-master\dataset\nerf_synthetic\lego,?

N_importance value

In the paper you stated

Nc= 64coordinates in the coarse volume and Nf = 128 additional coordinates in thefine volume.

But the config files in the repo the N_importance is set to 64 for all scenes. If I understand correctly, N_importance is Nf, so why is it different from the paper? Also the effect of different Nf is not shown in the ablation study table (all experiments have Nf=128), does that mean Nf is not so important?

how to create database.db ?

subprocess.CalledProcessError: Command '['colmap', 'feature_extractor', '--database_path', 'batman/database.db', '--image_path', 'batman/images', '--ImageReader.single_camera', '1']' returned non-zero exit status 1.

I have placed my picture in batman/images/, but I still report an error, which feels like missing some files, such as database.db or others.

tiny_nerf notebook bugs

When running the tiny_nerf.ipynb notebook, the final interactive cell was causing the notebook to run indefinitely. I had to change this line: rays_o, rays_d = get_rays(H, W, focal, c2w.numpy()[:3,:4]) to add the .numpy(), and now it works.

I also had to remove the print(i, psnr.numpy()) from an earlier cell, because psnr is not defined yet.

imagemagick in “environment.yml” &&" log\summaries " folder

exception 1:
input: conda env create -f environment.yml
This error occurred:ResolvePackageNotFound: - imagemagick
exception 2:
After downloading the data.Run this order python run_nerf.py --config config_fern.txt directly.
This error occurred:
Failed to create a directory: ./logs\summaries\fern_test
by the way,I am using Windows os.
Please answer my simple questions.I would be most grateful

0

0

Any plan for pytorch version

Hello,

I was wondering if there would be any plans for a pytorch version, or if you heard of someone working on one :P.

Quadrature formula

First, thank you for sharing the code!
Could you please explain the derivation of the quadrature formula (3) from the paper?
Why does the term equal T_i * c_i * (1 - exp(- sigma_i * delta_i)) instead of T_i * c_i * sigma_i * delta_i?

Why NDC space has degenerate case when capturing 360 degree views

Hi,

I experimented NeRF on 360-degree scenes, and if I use NDC, there are always degenerate cases like the figure shown below. I am wondering why this happens in NDC space. Does NDC only works for half-hemisphere, do you have any intuition or math explanation for this?

playground_360_ndc

Thanks!

Semantic object and material segmentation in nerf

I am wondering how well semantic segmentation into object and material data and reflection/refraction passes would work in this render pipeline. If it were part of the ray tracing process it would get progressively more accurate as the volume gets resolved.

Perhaps eventually being able to extract material albedo/lighting/shadows/refraction and BRDFs into their own output passes.

The single problem of model file

I simulated the training results of the small mine car. NPY file, export obj file, so when I need a new item, such as chair, how can I get the chair model? Wait until 12 hours to train 200000 iterations of NPY before turning? The key is how do I get the data set of the chair? At present, your algorithm is well written and has the complete idea of image to 3D model, but I am very distressed about how to build the data set of this new item. Thank you for the wonderful code of your team. I wish you could reply to me earlier, thank you!

physical intuition behind ndc_rays?

Thanks for sharing the great work! I noticed that in the codebase, there's special handling of forward-facing data, specifically, this ndc_rays function. I wonder what is the physical intuition behind it. It's a bit hard for me to digest this piece of code snippet. Any help is appreciated!

Scalar PI is missing when creating positional encodings?

I dunno if it's on purpose but the PI scalar (as in original paper) is missing when creating positional encodings for:

        for freq in freq_bands:
            for p_fn in self.kwargs['periodic_fns']:
                embed_fns.append(lambda x, p_fn=p_fn,
                                 freq=freq: p_fn(x * freq))
                out_dim += d

Line 49, on Run Nerf Helpers, is it on purpose or it's done somewhere else?

Question about handling of deepvoxels data

Great work! Thanks for sharing the code.

I'm a little puzzled by how deepvoxels data is handled in load_deepvoxels.py (L67-73). Since both deepvoxels and nerf use opencv convention for camera coordinate system, i.e., x points right, y points down, z points towards scene, why does one need to multiply the deepvoxels pose with transf (shown below)? I don't get why we need to flip the y,z axes of the camera coordinate system used by deepvoxels. Any help is appreciated!

transf = np.array([ [1,0,0,0], [0,-1,0,0], [0,0,-1,0], [0,0,0,1.], ]) <br/> poses = poses @ transf

network acceleration and generalization

hi,

Thank you for your impressive work at first! I am a big follower of your research at LLFF as well, and I am more than glad to witness the huge improvement you havd made!

Meanwhile, as many comparisons are made while I am reading this one, here are some questions that I am a little bit comfused and might need your explanations:

  1. what's the advantage that you select a fully-connected network rather than a deep convolutional network?
    As far as I know, the net in Nerf needs to be retrained if the input data is changed. While in LLFF, the network is once and for all: the network could split out defined number of depth planes automatically once trained.

  2. Have you ever considered to speed up the training process?
    To get the first output video(50000 iterations by default), it takes about 2.5~3 hours on 2080Ti. Given the time needed for training, Nerf network could be barely able to be embeded into a smart phone. I am wondering whether it is possible to be accelerated? For example, distinguish user cases as several labels like plants, people, building, etc. and pre-train base models for each case. Then finetune the base models with inputs.(just an example, maybe not make sense).

  3. Have you ever tried similar ideas in Nerf to LLFF to improve the performance? If yes, how was the result; if no, what's the difficulties?
    Similar ideas like positional encoding, or set (x,y,z,theta, phi) as inputs are very likely to be useful in LLFF.

  4. Precision of COLMAP
    I notice that both nets use COLMAP to get the initial poses for images. What if the poses are slightly different from the ground truth (I came up with these cases several times)?

Thanks again for your sharing of your excellent work!

`pi` in positional embedding?

Hello, thanks for the nice work!

In the paper, the positional embedding has the term pi inside each sin and cos:

Screen Shot 2020-03-30 at 7 50 53 PM

May I know where's pi in positional embedding's code here?

How to translate depth in NDC to real depth?

When in NDC space, the predicted depth has range 0~1. How to translate that into real depth?
We know that predicted depth=0 means that it's at the near plane, which is at real distance 1.0, how about predicted depth=1? In the formula it corresponds to infinity, but in reality, do we translate that into the real farthest depth provided by COLMAP? And how about the values that are between 0 and 1?

I ask this question because I want to reconstruct the LLFF data in 3D. Using the predicted depth in 0~1 gives something visually plausible but I think it is mathematically wrong, we need to convert it to real depth.
Screenshot from 2020-04-22 22-21-54

Usage in Photogrammetry?

Hi,
This project is very cool and has a lot of potential in a lot of applications. I have seen some stuff floating around about generating blender files (.blend). Is this true? Can this be used as photogrammetry? Will a blender file be generated that has textures/materials of the object that is scanned?
Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.