equirectangular image processing with python
Project description
equilib
Processing Equirectangular Images with Python
- A library for processing equirectangular image that runs on Python.
- Developed using
numpy
,pytorch
, andc++
. - Able to use GPU for faster processing.
- No need for other dependencies except for
numpy
andpytorch
. - Added functionality like creating rotation matrices, batched processing, and automatic type detection.
- Highly modular
Installation:
Prerequisites:
- Python (>=3.6)
- Pytorch
pip install pyequilib
For developing, use:
git clone --recursive https://github.com/haruishi43/equilib.git
cd equilib
pip install -r requirements.txt
python setup.py develop
Basic Usage:
equilib
has different transforms of equirectangular (or cubemap) images (note each transform has class
and func
APIs):
Cube2Equi
/cube2equi
: cubemap to equirectangular transformEqui2Cube
/equi2cube
: equirectangular to cubemap transformEqui2Equi
/equi2equi
: equirectangular transformEqui2Pers
/equi2pers
: equirectangular to perspective transform
There are no real differences in class
or func
APIs:
class
APIs will allow instantiating a class which you can call many times without having to specify configurations (class
APIs call thefunc
API)func
APIs are useful when there are no repetitive calls- both
class
andfunc
APIs are extensible, so you can extend them to your use-cases or create a method that's more optimized (pull requests are welcome btw)
Each API automatically detects the input type (numpy.ndarray
or torch.Tensor
), and outputs are the same type.
An example for Equi2Pers
/equi2pers
:
`Equi2Pers` |
`equi2pers` |
import numpy as np from PIL import Image from equilib import Equi2Pers # Input equirectangular image equi_img = Image.open("./some_image.jpg") equi_img = np.asarray(equi_img) equi_img = np.transpose(equi_img, (2, 0, 1)) # rotations rot = { 'roll': 0., 'pitch': np.pi/4, # rotate vertical 'yaw': np.pi/4, # rotate horizontal } # Intialize equi2pers equi2pers = Equi2Pers( w_pers=640, h_pers=480, fov_x=90, skew=0.0, sampling_method="default", mode="bilinear", ) # obtain perspective image pers_img = equi2pers( equi=equi_img, rot=rot, ) |
import numpy as np from PIL import Image from equilib import equi2pers # Input equirectangular image equi_img = Image.open("./some_image.jpg") equi_img = np.asarray(equi_img) equi_img = np.transpose(equi_img, (2, 0, 1)) # rotations rot = { 'roll': 0., 'pitch': np.pi/4, # rotate vertical 'yaw': np.pi/4, # rotate horizontal } # Intialize equi2pers pers_img = equi2pers( equi=equi_img, rot=rot, w_pers=640, h_pers=480, fov_x=90, skew=0.0, sampling_method="default", mode="bilinear", ) |
For more information about how each APIs work, take a look in .readme or go through example codes in the tests
or demo
.
Coordinate System:
Right-handed rule XYZ global coordinate system. x-axis
faces forward and z-axis
faces up.
roll
: counter-clockwise rotation about thex-axis
pitch
: counter-clockwise rotation about they-axis
yaw
: counter-clockwise rotation about thez-axis
See demo scripts under scripts
.
Grid Sampling
To process equirectangular images fast, whether to crop perspective images from the equirectangular image, the library takes advantage of grid sampling techniques.
Some sampling techniques are already implemented, such as scipy.ndimage.map_coordiantes
and cv2.remap
.
This project's goal was to reduce these dependencies and use cuda
and batch processing with pytorch
and c++
for a faster processing of equirectangular images.
There were not many projects online for these purposes.
In this library, we implement varieties of methods using c++
, numpy
, and pytorch
.
This part of the code needs cuda
acceleration because grid sampling is parallelizable.
For c++
and pytorch
, I tried to take advantage of cuda
.
For numpy
, I implemented naive
and faster
approaches for learning purposes.
Developing faster c++
and pytorch
approaches are WIP.
Currently, sampling_method
defaults to the fastest methods which are named "default"
.
See here for more info on implementations.
Develop:
Test files for equilib
are included under tests
.
Running tests:
pytest tests
Check CONTRIBUTING.md for more information
TODO:
- Documentations for each transform
- Add graphs and statistics for speed improvements
Acknowledgements:
Project details
Release history Release notifications | RSS feed
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
Hashes for pyequilib-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 227fe9d4f4b45949543251914e0be643e33393259bcd01ed4b2479a2711c6621 |
|
MD5 | 883922ec7c082b43a3a675fbb63f5494 |
|
BLAKE2b-256 | 41496d9d0cc2cabde27d27d84d52f78c39c97ee341eb9a8ebba826339ec174f1 |