Homography package for Python¶
A 2D homography from \(\left(\begin{smallmatrix}x \\ y\end{smallmatrix}\right)\) to \(\left(\begin{smallmatrix}x' \\ y'\end{smallmatrix}\right)\) can be represented by 8 parameters \((a,b,\ldots h)\), organized in a 3x3 matrix. The transformation rule is as follows:
homography module¶
library for 2d homographies.
The Homography object represents a 2D homography as a 3x3 matrix.
Homographies can be applied directly on numpy arrays or Shapely points using
the “call operator” (brackets), composed using * and inverted using ~.
This module supports basic operations, conversion methods and utilities. Sample usage:
>>> h = Homography.translation(5, -1) * Homography.rotation(90)
>>> h.as_ndarray().astype(int)
array([[ 0, 1, 5],
[-1, 0, -1],
[ 0, 0, 1]])
>>> print(h([[0, 0],[1, 0],[1 ,1]]))
[[ 5. -1.]
[ 5. -2.]
[ 6. -2.]]
>>> print(~h*h)
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
>>> print((~h)(h([12, 34])))
[12. 34.]
-
class
homography.Homography(other=None)¶ The 3x3 homography transformation matrix contains 8 free parameters and represents transfromation from \((x,y)\) to \((x',y')\) as follows:
| x0 | | a b c | | x | | y0 | = | d e f | | y | | z0 | | g h 1 | | 1 | x' = x0 / z0 y' = y0 / z0
-
__init__(other=None)¶ Constructs itself from Homography, Affine or 3x3 mat. The default constuctor returns the identity homography.
-
classmethod
identity()¶
-
classmethod
translation(x, y)¶
-
classmethod
scale(x, y=None)¶
-
classmethod
rotation(angle_deg)¶
-
classmethod
from_affine(aff)¶ - Parameters
aff (affine.Affine) – the affine to convert from
- Return type
-
classmethod
from_dict(d)¶
-
to_affine()¶ Ignores projective part.
-
to_dict()¶
-
projectivity()¶ Rough approximation of how non-affine is the homography.
-
apply(x, y, z=1)¶ Direct multiplication with H, returns 3-vector. deprecated? consider using __call__()
-
__eq__(other)¶ Return self==value.
-
equal(other, eps=1e-06)¶
-
norm(width=1, height=1)¶ Homography norm in pix, estimated on image with given width, height.
-
dist_sourcespace(other, width=1, height=1)¶ Distance between homographies in source space, estimated on output image with given width, height.
-
dist(other, width=1, height=1)¶ Distance between homographies in output space, estimated on image with given width, height.
-
dist_bidirectional(other, width=1, height=1)¶ Distance between homographies as max between distance in source and image space. Estimated on image with given width, height.
-
rel_dist(other, width=1, height=1)¶ Distance between homographies, estimated on image with given size, and normalized by the diagonal length.
-
get_shift_at_point(point)¶ Calculates the shift applied to the specified point when the homography is applied. Input point can be a 1D 2 element numpy array or a Shapely point
>>> print(Homography.scale(3).get_shift_at_point([1, -2])) [ 2. -4.]
-
as_ndarray()¶
-
__getitem__(key)¶ Returns submatrix, e.g.:
>>> print(Homography.identity()[2, 1:]) [0. 1.]
-
__invert__()¶
-
__module__= 'homography'¶
-
__mul__(other)¶
-
__weakref__¶ list of weak references to the object (if defined)
-
__call__(point)¶ Call self as a function.
-
-
homography.from_points(src, dst)¶ Find homography that transforms four source points ‘src’ to destination points ‘dst’. Both specified as 4x2 arrays, or lists of 4 shapely Point objects