Skip to main content

D2NT: A High-Performing Depth-to-Normal Translator

Project description

D2NT: A High-Performing Depth-to-Normal Translator

This repo is the official implementation of the paper:

"D2NT: A High-Performing Depth-to-Normal Translator"

[arXiv] [homepage] [video]

trade-off

trade-off

Installation

Install from PyPI (Recommended)

pip install d2nt

Install from Source

# Clone the repository
git clone https://github.com/fengyi233/depth-to-normal-translator.git
cd depth-to-normal-translator

# Install in development mode
pip install -e .

# Or install normally
pip install .

Prerequisites

  • Python >= 3.7
  • numpy >= 1.20.0
  • opencv-python >= 4.5.0
  • matplotlib >= 3.5.0 (optional, for visualization)

Dataset Preparation

Public real-world datasets generally obtain surface normals by local plane fitting, which makes the surface normal ground truth unreliable. Therefore, we use the synthesis 3F2N dataset provided in this paper to evaluate estimation performance.

The 3F2N dataset can be downloaded from:
GoogleDrive
The dataset is organized as follows:

3F2N
 |-- Easy
 |  |-- android
 |  |  |-- depth
 |  |  |-- normal
 |  |  |-- params.txt
 |  |  |-- pose.txt
 |  |-- cube
 |  |-- ...
 |  |-- torusknot
 |-- Medium
 |  |-- ...
 |-- Hard
 |  |-- ...

Usage

Python Package Usage

After installation, you can use the depth2normal() function directly:

import numpy as np
from d2nt import depth2normal

# Prepare depth map (example)
depth = np.random.rand(480, 640) * 10.0

cam_intrinsic = np.array([
    [525.0, 0, 320.0],  # fx=525.0, u0=320.0
    [0, 525.0, 240.0],  # fy=525.0, v0=240.0
    [0, 0, 1]
])

# Convert depth to normal
normal = depth2normal(depth, cam_intrinsic, version='d2nt_v3')

print(f"Normal map shape: {normal.shape}")  # (480, 640, 3)

Algorithm Versions

  • d2nt_basic: Basic version without any optimization method
  • d2nt_v2: With Discontinuity-Aware Gradient (DAG) filter
  • d2nt_v3: With DAG filter and MRF-based Normal Refinement (MNR) module (recommended)

Python Demo

Run the demo script in the root directory to see visualization results and error maps:

python demo.py

This will display:

  • Ground truth normal map
  • Estimated normal map
  • Error map (in degrees) with mean angular error

The demo uses test data from demo_data/ directory.

You can change the VERSION parameter in demo.py to select different D2NT versions:

  • d2nt_basic: Basic version without any optimization method
  • d2nt_v2: With Discontinuity-Aware Gradient (DAG) filter
  • d2nt_v3: With DAG filter and MRF-based Normal Refinement (MNR) module (recommended)

Cite

If you find our work useful in your research, please consider citing our paper:

@inproceedings{feng2023d2nt,
	author      = {{Yi Feng, Bohuan Xue, Ming Liu, Qijun Chen, and Rui Fan}},
	title       = {{D2NT: A High-Performing Depth-to-Normal Translator}},
	booktitle   = {{IEEE International Conference on Robotics and Automation (ICRA)}},
	year        = {{2023}}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

d2nt-0.1.1.tar.gz (6.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

d2nt-0.1.1-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file d2nt-0.1.1.tar.gz.

File metadata

  • Download URL: d2nt-0.1.1.tar.gz
  • Upload date:
  • Size: 6.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.7

File hashes

Hashes for d2nt-0.1.1.tar.gz
Algorithm Hash digest
SHA256 40ca6a87ec7b9841ef830312f7f1020efabe2c1e13872da9efa936c9911b2909
MD5 23e3926f0079f7d0c49eccd860e35d08
BLAKE2b-256 1df19b073a83ac976c22f0c5a284cab7d55257e65901c3f0ed76bf998bd5fd1b

See more details on using hashes here.

File details

Details for the file d2nt-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: d2nt-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.7

File hashes

Hashes for d2nt-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 41742a92107b83d5b135a1a65442a18a6c05af9647f9da3adea679ac483ded50
MD5 d899d8a9c3de10ae86e1fbf8a7e1ec45
BLAKE2b-256 ac2d0012a439eee76fc0db93a86b97acbac29539defc88efd63a4eaf78983d2d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page