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:
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 methodd2nt_v2: With Discontinuity-Aware Gradient (DAG) filterd2nt_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 methodd2nt_v2: With Discontinuity-Aware Gradient (DAG) filterd2nt_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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40ca6a87ec7b9841ef830312f7f1020efabe2c1e13872da9efa936c9911b2909
|
|
| MD5 |
23e3926f0079f7d0c49eccd860e35d08
|
|
| BLAKE2b-256 |
1df19b073a83ac976c22f0c5a284cab7d55257e65901c3f0ed76bf998bd5fd1b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41742a92107b83d5b135a1a65442a18a6c05af9647f9da3adea679ac483ded50
|
|
| MD5 |
d899d8a9c3de10ae86e1fbf8a7e1ec45
|
|
| BLAKE2b-256 |
ac2d0012a439eee76fc0db93a86b97acbac29539defc88efd63a4eaf78983d2d
|