# BTF Extractor
[](https://pypi.org/project/btf-extractor/#history)
[](https://github.com/2-propanol/BTF_extractor/releases)
[](https://pypi.org/project/btf-extractor/)
[](https://github.com/psf/black)
Extract UBO BTF archive format([UBO2003](https://cg.cs.uni-bonn.de/en/projects/btfdbb/download/ubo2003/), [ATRIUM](https://cg.cs.uni-bonn.de/en/projects/btfdbb/download/atrium/), [UBO2014](https://cg.cs.uni-bonn.de/en/projects/btfdbb/download/ubo2014/)).
This repository uses [zeroeffects/btf](https://github.com/zeroeffects/btf)'s [btf.hh](https://github.com/zeroeffects/btf/blob/master/btf.hh) (MIT License).
Extract to ndarray compatible with openCV(BGR, channels-last).
## Install
```bash
pip install btf-extractor
```
This package uses the [Cython](https://cython.readthedocs.io/en/latest/src/quickstart/install.html).
To install this package, a C++ and OpenMP build environment is required.
### Build is tested on
- Windows 10 20H2 + MSVC v14.28 ([Build Tools for Visual Studio 2019](https://visualstudio.microsoft.com/downloads/))
- MacOS 11(Big Sur) + clang 13.0.0 (`xcode-select --install`) + libomp (`brew install libomp`)
- Ubuntu 20.04 + GCC 9.3.0 ([build-essential](https://packages.ubuntu.com/focal/build-essential))
## Example
```python
>>> from btf_extractor import Ubo2003, AtriumHdr, Ubo2014
>>> btf = Ubo2003("UBO_CORDUROY256.zip")
>>> angles_list = list(btf.angles_set)
>>> print(angles_list[0])
(0, 0, 0, 0)
>>> image = btf.angles_to_image(*angles_list[0])
>>> print(image.shape)
(256, 256, 3)
>>> print(image.dtype)
uint8
>>> btf = AtriumHdr("CEILING_HDR.zip")
>>> angles_list = list(btf.angles_set)
>>> print(angles_list[0])
(0, 0, 0, 0)
>>> image = btf.angles_to_image(*angles_list[0])
>>> print(image.shape)
(256, 256, 3)
>>> print(image.dtype)
float32
>>> btf = Ubo2014("carpet01_resampled_W400xH400_L151xV151.btf")
>>> print(btf.img_shape)
(400, 400, 3)
>>> angles_list = list(btf.angles_set)
>>> print(angles_list[0])
(60.0, 270.0, 60.0, 135.0)
>>> image = btf.angles_to_image(*angles_list[0])
>>> print(image.shape)
(400, 400, 3)
>>> print(image.dtype)
float32
```
## Supported Datasets
### UBO2003
6561 images, 256x256 resolution, 81 view and 81 light directions.

> Mirko Sattler, Ralf Sarlette and Reinhard Klein "[Efficient and Realistic Visualization of Cloth](http://cg.cs.uni-bonn.de/de/publikationen/paper-details/sattler-2003-efficient/)", EGSR 2003.
### ATRIUM (non-HDR and HDR)
6561 images, 800x800 resolution, 81 view and 81 light directions.

### UBO2014
22,801 images, 512x512(400x400) resolution, 151 view and 151 light directions.

> [Michael Weinmann](https://cg.cs.uni-bonn.de/en/people/dr-michael-weinmann/), [Juergen Gall](http://www.iai.uni-bonn.de/~gall/) and [Reinhard Klein](https://cg.cs.uni-bonn.de/en/people/prof-dr-reinhard-klein/). "[Material Classification based on Training Data Synthesized Using a BTF Database](https://cg.cs.uni-bonn.de/de/publikationen/paper-details/weinmann-2014-materialclassification/)", accepted at ECCV 2014.