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 petyrOr, build from source
pip3 install git+https://github.com/safwankdb/petyrfrom petyr import Similarity, Affine, HomographyAffine, 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 * pat = 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 * bTo run the inbuilt unit tests,
git clone https://github.com/safwankdb/petyr
cd petyr
python3 -m unittest -v- Add
Rigidtransformations. - Implement
petyr.Homography. - Add unit tests.
- Vectorize
from_points. - Add unit tests for
AffineandHomographyclasses as well. - Add
Similarityclass for similarity transforms. - Update all tests for similarity transform
- Update README with Similarity Transform
- Generate complete documentation.
- Move documentation to somwhere other than README.