Projective geometry in 2D and 3D with homogeneous and Plücker coordinates, projection matrices, and visualization.
Project description
ProjectiveGeometry23
Projective Geometry of Two- and Three-space
ProjectiveGeometry23 is a collection of numpy-based utilities for projective geometry of real two- and three-space, including homogeneous coordinates of point, lines and planes, Plücker coordinates and projection matrices.
The package has been converted from an existing C++ implementation LibProjectiveGeometry, which is well-tested and obviously faster.
The main use of this code is for the visualization or X-Ray source-detector geometries but applied generally to geometric computer vision problems.
Features:
- Computing with points, lines and planes
- Plücker coordinates, Plücker matrices
- Projection matrices, intrinsic and extrinsic parameters
- Decomposition of projection matrices, backprojection
- Visualization of X-Ray source-detector geometries
- (WIP) estimation based on direct linear transform, X-ray calibraion
General recommendation for better readibility of outputs:
from rich import print
np.set_printoptions(suppress=True)
Example of an interactive visualization, using the optional svg_snip package:
from svg_snip.Jupyter import CanvasWithOverlay
from svg_snip.Composer import Composer
import svg_snip.Elements as e2d
import svg_snip.Elements3D as e3d
from ProjectiveGeometry23.homography import rotation_x, rotation_z, scale
from ProjectiveGeometry23.svg_utils import svg_source_detector, svg_world_geometry
vis = CanvasWithOverlay(int(target.image_size[0]), int(target.image_size[1]))
# World transformation
ax, az = 0.5, 0.5
s = 0.2
def handle_draw(vis):
global ax
global az
x,y = vis.mouse_state.pos()
svg = Composer((vis.w, vis.h))
svg.add(svg_world_geometry)
svg.add(svg_source_detector, projection=target,
draw_on_detector=svg_world_geometry,
label_source='C0', label_detector='I0(u,v)')
svg.add(e2d.star, x=x, y=y, size=8,
fill="red" if vis.mouse_state.clicked else "blue")
svg.add(e2d.text, x=10, y=20, content=f'ax={ax:.3} az={az:.3}')
T = scale(s) @ rotation_x(ax) @ rotation_z(az)
raw_svg_code = svg.render(P=target.P@T)
vis.html_overlay.value = raw_svg_code
if vis.mouse_state.clicked:
az += vis.mouse_state.dx * 0.01
ax += vis.mouse_state.dy * 0.01
vis.handle_draw = handle_draw
vis.display()
Installation
Using pip
You can install ProjectiveGeometry23 using pip:
pip install ProjectiveGeometry23
Using setup.py
git clone https://github.com/aaichert/ProjectiveGeometry23
cd ProjectiveGeometry23
python setup.py install
Testing and Publication on PyPy
Two useful code snippets
python -m unittest discover tests
python setup.py sdist bdist_wheel
pip install twine
twine upload dist/*
References
- LibProjectiveGeometry (c++). GitHub https://github.com/aaichert/EpipolarConsistency/tree/master/code/LibProjectiveGeometry
- Hartley, Richard, and Andrew Zisserman. Multiple view geometry in computer vision. Cambridge university press, 2003. https://www.robots.ox.ac.uk/~vgg/hzbook/
- Coxeter, Harold Scott Macdonald. Projective geometry. Springer Science & Business Media, 2003.
- Stolfi, Jorge. "Oriented projective geometry." Proceedings of the third annual symposium on Computational geometry. 1987.
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
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 projectivegeometry23-0.1.0.tar.gz.
File metadata
- Download URL: projectivegeometry23-0.1.0.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a10f3f8ba46056e3c007cd649a3ee9c55ea51d5e167370dbd6993829170e738
|
|
| MD5 |
9fa75c05b45380c503af2488137d7768
|
|
| BLAKE2b-256 |
89ae16d1c88ce58cedc4cb05a20326f9a1d2f0c342f9c29710ee5a243c8f2513
|
File details
Details for the file projectivegeometry23-0.1.0-py3-none-any.whl.
File metadata
- Download URL: projectivegeometry23-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2ad44ebdcb9ce0c4f1f02b9fe8bb15922cbf4dd22fee9839f91bf304e22cc40
|
|
| MD5 |
69cd52cb921e07d4299d44dbef30593f
|
|
| BLAKE2b-256 |
6d71badb215f75a4e8be2bf89efc5dcccd9f0d94fedc943c93785687faa7d81d
|