Skip to main content

The Python affine6p lib to estimate affine transformation parameters between two sets of 2D points

Project description

The Python affine6p lib is to estimate affine transformation parameters between two sets of 2D points.:

| x' |   | a  b  p | | x |
| y' | = | c  d  q | | y |
| 1  |   | 0  0  1 | | 1 |
Example transformation

When the sets are more than three points, the lib estimate parameters with the least squares method.

In making this lib, I used a lot of ideas in nudged lib. Ref: https://github.com/axelpale/nudged-py

Install

Use pip:

pip install affine6p

Usage

You have lists of points for the original and converted of the transformation function to be estimated:

import affine6p
origin = [[0,0], [1,0], [0,1], [1,1]]
convert = [[0,0], [1,0], [0,1], [1,1.1]]
trans = affine6p.estimate(origin, convert)
trans.get_matrix()
# [[1.0, 0.0, 0.0],
# [0.050000000000000044, 1.05, -0.02499999999999991],
# [0, 0, 1]]
affine6p.estimate_error(trans, origin, convert)
# 0.025000000000000022

When the number of origin is 1, assume the following relationship:

a = d = 1 and b = c = 0

When the number of origin is 2, assume the following relationship as described in estimate_helmert.:

a = d and b = -c

You can access Transform class members.:

trans.a() # params[0]
trans.b() # params[1]
trans.c() # params[2]
trans.d() # params[3]
trans.p() # params[4]
trans.q() # params[5]
trans.get_matrix() # [[a, b, p], [c, d, q], [0, 0, 1]]
trans.get_rotation_x() # math.atan2(-b, a)
trans.get_rotation_y() # math.atan2(c, d)
trans.get_scale_x() # sqrt(a*a + b*b)
trans.get_scale_y() # sqrt(c*c + d*d)
trans.get_scale() # sqrt((scale_x*scale_x+scale_y*scale_y)*0.5)
trans.get_translation() # [p, q]
trans.params # [a, b, c, d, p, q]

You can apply transform or rotate to 2D point or points. The rotate means p = q = 0.:

trans.transform([0, 0])
trans.transform([[0, 0], [1, 1]])
point = [0, 0]
trans.transform_inv(point)
trans.rotate(point)
trans.rotate_inv(point)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

affine6p-1.0.0.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

affine6p-1.0.0-py2.py3-none-any.whl (5.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file affine6p-1.0.0.tar.gz.

File metadata

  • Download URL: affine6p-1.0.0.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for affine6p-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6cfdc0ab4ee663f66ba70b2204dd58805f64d2f1a12c6c92cb38bd1af1fa469c
MD5 b2cd54f2cc47d4d7377aaf713d9bede6
BLAKE2b-256 b663e9ca1ad9186afcffff177ebb42eea0cfa67f69954e82145e122a6228b8bc

See more details on using hashes here.

File details

Details for the file affine6p-1.0.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for affine6p-1.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 69c6653b9b4500f1ae283eb0d6438352cdd5e974bbf861d21d896d1846910644
MD5 ff408c9292e92a8bf117403d944b3917
BLAKE2b-256 3389519563e336bf18f5fe44f9e0378d130c8c4e38d4ff357eeb9fd00369d52f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page