Affine, Similarity Transformations and Homography for Python. Fast and chainable inplace operations. Produced matrix can be used with cv2.warpAffine
and cv2.warpPerspective
.
For stable release
pip3 install petyr
Or, build from source
pip3 install git+https://github.com/safwankdb/petyr
from petyr import Similarity, Affine, Homography
Affine
, Similarity
and Homography
derive from the Transform2D
base class which implements all the basic operations.
p = np.array([[0,0],[1,0],[1,1],[0,1]])
rotate_and_move = Affine().rotate(90).translate(2,1)
q = rotate_and_move * p
pt = Homography.from_elements([1,0,0,0,1,0,0.1,0.2,1])
r = pt * p
at = Affine.from_points(p, q)
pt = Homography.from_points(p, q)
st = Similarity.from_points(p, q)
These operations modify the object in-place except for invert()
which return a new object.
- Translation
- Scaling
- Shearing
- Rotation
- Inversion
- Reset
at = Affine()
at.translate(1, 3)
at.scale(1.05, 2)
at.rotate(45, degrees=True)
at.shear(10, 45)
at_inv = at.invert()
Same goes for Homography
and Transform2D
objects.
Mutiple operations can be chained together.
at = Affine()
at.scale(2,2).rotate(90)
at.shear(10, 0).translate(-3, 4)
Multiple transforms can be multiplied together. This is a non-commutative operation. The rightmost transform will be applied first.
a = Affine()
a.translate(2,3)
b = Homography()
b.scale(4,5)
c = a * b
To run the inbuilt unit tests,
git clone https://github.com/safwankdb/petyr
cd petyr
python3 -m unittest -v
- Add
Rigid
transformations. - Implement
petyr.Homography
. - Add unit tests.
- Vectorize
from_points
. - Add unit tests for
Affine
andHomography
classes as well. - Add
Similarity
class for similarity transforms. - Update all tests for similarity transform
- Update README with Similarity Transform
- Generate complete documentation.
- Move documentation to somwhere other than README.