{ "info": { "author": "Masahiro Yoshimoto", "author_email": "yoshimoto@flab.phys.nagoya-u.ac.jp", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Image Recognition", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Scientific/Engineering :: Physics" ], "description": "==========\naffine6p\n==========\n\nThe Python affine6p lib is to estimate affine transformation parameters between two sets of 2D points.::\n\n | x' | | a b p | | x |\n | y' | = | c d q | | y |\n | 1 | | 0 0 1 | | 1 |\n\n.. image:: https://gitlab.com/yoshimoto/affine6p-py/raw/master/affine6p.png\n :alt: Example transformation\n :height: 398px\n :width: 342px\n\nWhen the sets are more than three points, the lib estimate parameters with the least squares method.\n\nIn making this lib, I used a lot of ideas in nudged lib. Ref: https://github.com/axelpale/nudged-py\n\nInstall\n-----------\nUse pip::\n\n pip install affine6p\n\nUsage\n-----------\n\nYou have lists of points for the **original** and **converted** of the transformation function to be estimated::\n\n import affine6p\n origin = [[0,0], [1,0], [0,1], [1,1]]\n convert = [[0,0], [1,0], [0,1], [1,1.1]]\n trans = affine6p.estimate(origin, convert)\n trans.get_matrix()\n # [[1.0, 0.0, 0.0],\n # [0.050000000000000044, 1.05, -0.02499999999999991],\n # [0, 0, 1]]\n affine6p.estimate_error(trans, origin, convert)\n # 0.025000000000000022\n\nWhen the number of origin is **1**, assume the following relationship::\n\n a = d = 1 and b = c = 0\n\nWhen the number of origin is **2**, assume the following relationship as described in *estimate_helmert*.::\n\n a = d and b = -c \n\nYou can access **Transform class members**.::\n\n trans.a() # params[0]\n trans.b() # params[1]\n trans.c() # params[2]\n trans.d() # params[3]\n trans.p() # params[4]\n trans.q() # params[5]\n trans.get_matrix() # [[a, b, p], [c, d, q], [0, 0, 1]]\n trans.get_rotation_x() # math.atan2(-b, a)\n trans.get_rotation_y() # math.atan2(c, d)\n trans.get_scale_x() # sqrt(a*a + b*b)\n trans.get_scale_y() # sqrt(c*c + d*d)\n trans.get_scale() # sqrt((scale_x*scale_x+scale_y*scale_y)*0.5)\n trans.get_translation() # [p, q]\n trans.params # [a, b, c, d, p, q]\n\nYou can apply **transform** or **rotate** to 2D point or points. The rotate means *p = q = 0*.::\n\n trans.transform([0, 0])\n trans.transform([[0, 0], [1, 1]])\n point = [0, 0]\n trans.transform_inv(point)\n trans.rotate(point)\n trans.rotate_inv(point)\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/yoshimoto/affine6p-py", "keywords": "calculate affine transformation six parameters", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "affine6p", "package_url": "https://pypi.org/project/affine6p/", "platform": "", "project_url": "https://pypi.org/project/affine6p/", "project_urls": { "Homepage": "https://gitlab.com/yoshimoto/affine6p-py" }, "release_url": "https://pypi.org/project/affine6p/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "The Python affine6p lib to estimate affine transformation parameters between two sets of 2D points", "version": "1.0.0" }, "last_serial": 4088946, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "1846ef4b24bce340bce2b904beaa0ea7", "sha256": "2244f5fb9921764e20acc13767a795801c91dffae6907f64465e6d82a60ff76c" }, "downloads": -1, "filename": "affine6p-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1846ef4b24bce340bce2b904beaa0ea7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3587, "upload_time": "2017-10-06T15:17:48", "url": "https://files.pythonhosted.org/packages/88/66/9e62a66c6e45ff35e8fe298f17568ff565a527b05e1aac3de6f4ae4a0611/affine6p-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "66b1c5eccd7495be31999ee4ccc5549c", "sha256": "1e4ee61eb4231a4d19f93688ef526067627460d28002c46000ab62da39d79ed7" }, "downloads": -1, "filename": "affine6p-0.1.tar.gz", "has_sig": false, "md5_digest": "66b1c5eccd7495be31999ee4ccc5549c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2302, "upload_time": "2017-10-06T15:17:50", "url": "https://files.pythonhosted.org/packages/64/eb/a66815cf42c46f3a66063a10e339ea1ca5aaeebdc0a725cdaa85f32d9f5c/affine6p-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "842a7c27bec24afba3118ad5b1919530", "sha256": "4e92875c0d9aa822fb1fc084784d88038e6d27ce0b395741a0d273c3e1c0d0ff" }, "downloads": -1, "filename": "affine6p-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "842a7c27bec24afba3118ad5b1919530", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3628, "upload_time": "2017-10-06T15:27:07", "url": "https://files.pythonhosted.org/packages/b8/4d/78da6f27ae23114867d28341d5f56f73613e3adfd8608f2bef284865b978/affine6p-0.2-py3-none-any.whl" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "cca24e9de1ef48fd01662f734a53a009", "sha256": "ac75a4697f119dadbbabf3cab4a67ef3e2c4bb14d8e51f522445a3cd85eb495e" }, "downloads": -1, "filename": "affine6p-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "cca24e9de1ef48fd01662f734a53a009", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3634, "upload_time": "2017-10-06T15:35:07", "url": "https://files.pythonhosted.org/packages/22/1c/ba8a63c5084c6f77e81335059515c28234023a97a01e70193542e4870b6d/affine6p-0.3-py3-none-any.whl" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "b3c0d85f6a8c12947eb05c7653b04879", "sha256": "d0231fb0d71c80489f4401a772fb006a94945f5a1e4b6914b752f45ab38f007f" }, "downloads": -1, "filename": "affine6p-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b3c0d85f6a8c12947eb05c7653b04879", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3668, "upload_time": "2017-10-06T15:42:47", "url": "https://files.pythonhosted.org/packages/1b/ae/4735e78a77d823547c0479c51e6aa5b687a6b85da8d38f8d70675cd6317c/affine6p-0.3.1-py3-none-any.whl" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "ac0f2bae8b4b6e125f378c1a82a52082", "sha256": "c7b12ca0a1f76017fe06f2fcae40ee9639904805e5425db5925a9d85332dac19" }, "downloads": -1, "filename": "affine6p-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ac0f2bae8b4b6e125f378c1a82a52082", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3639, "upload_time": "2017-10-06T16:04:10", "url": "https://files.pythonhosted.org/packages/9a/e2/5b5f5f939e32fc215b58b5059ac1bbc09df11b300ebb341e540bd8780c78/affine6p-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef97c834f13c1b08f8fd996e72d30ba1", "sha256": "bce13698bd0d5ec140c28b43f612802d42a6975c36efda9d1bc5a185bd767417" }, "downloads": -1, "filename": "affine6p-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "ef97c834f13c1b08f8fd996e72d30ba1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3637, "upload_time": "2017-10-06T15:48:18", "url": "https://files.pythonhosted.org/packages/2d/d9/f21daf601375ab33135c1c76281155c7a805216f493b454af7d107fd5699/affine6p-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "22d2a0d2a33c87d96d46781f856a3e55", "sha256": "ba2180b4aa81c42b896c3fa675e0054f6954f120947fca7af397b318b9953b30" }, "downloads": -1, "filename": "affine6p-0.4.tar.gz", "has_sig": false, "md5_digest": "22d2a0d2a33c87d96d46781f856a3e55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2308, "upload_time": "2017-10-06T16:04:14", "url": "https://files.pythonhosted.org/packages/52/31/74cc4dc7296a46599b2fd1dec087743893d58ea54d586b8dab177b2d0b1c/affine6p-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "55901e4d23884900c1d499ff21d714b7", "sha256": "33e2e5bfe87d9386b19faa196bd6230ca942da7219135cdc63a9412791b3e504" }, "downloads": -1, "filename": "affine6p-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "55901e4d23884900c1d499ff21d714b7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3638, "upload_time": "2017-10-06T16:04:12", "url": "https://files.pythonhosted.org/packages/0c/c8/39dbe1b5f6de66b9f4f3cfd31209f4c86ee10913306233fa393a956e025a/affine6p-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c55b3f24915bd87d6007eb134f0c4e95", "sha256": "e2f4c63697300921c55a5f4a4ebe8323589f4d51e38f852a6d9fc0d6effeed21" }, "downloads": -1, "filename": "affine6p-0.5.tar.gz", "has_sig": false, "md5_digest": "c55b3f24915bd87d6007eb134f0c4e95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2308, "upload_time": "2017-10-06T16:04:16", "url": "https://files.pythonhosted.org/packages/50/38/14c305bc18ff2cb5a0d5859ad94813ba40cdadb42198eda46ae266512300/affine6p-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "5e19c683e6a75800449882fa4a705d78", "sha256": "eabda9accc2414f3eb627ba4200e9c65eec41ed3fcfb3e3c8d0c00e83a366e1f" }, "downloads": -1, "filename": "affine6p-0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5e19c683e6a75800449882fa4a705d78", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6064, "upload_time": "2017-10-08T05:59:05", "url": "https://files.pythonhosted.org/packages/db/80/f03e248ca82765de2d0ceedee37333fa1aa33f7f7740a1f6a3cb87ce6caa/affine6p-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "62f8f8c574b532b21f7a62855ac81c41", "sha256": "3de5983ca59d123fe97e495f70c6637718d91bec7ff279b1c7cd7a5f74c811b8" }, "downloads": -1, "filename": "affine6p-0.6.tar.gz", "has_sig": false, "md5_digest": "62f8f8c574b532b21f7a62855ac81c41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3000, "upload_time": "2017-10-08T05:59:07", "url": "https://files.pythonhosted.org/packages/50/34/4ad4439e5a505c673f798325ca207555d39473b5e4f9ed4f9fbdb33759ca/affine6p-0.6.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "ff408c9292e92a8bf117403d944b3917", "sha256": "69c6653b9b4500f1ae283eb0d6438352cdd5e974bbf861d21d896d1846910644" }, "downloads": -1, "filename": "affine6p-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ff408c9292e92a8bf117403d944b3917", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5879, "upload_time": "2018-07-21T17:24:05", "url": "https://files.pythonhosted.org/packages/33/89/519563e336bf18f5fe44f9e0378d130c8c4e38d4ff357eeb9fd00369d52f/affine6p-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b2cd54f2cc47d4d7377aaf713d9bede6", "sha256": "6cfdc0ab4ee663f66ba70b2204dd58805f64d2f1a12c6c92cb38bd1af1fa469c" }, "downloads": -1, "filename": "affine6p-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b2cd54f2cc47d4d7377aaf713d9bede6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4085, "upload_time": "2018-07-21T17:24:06", "url": "https://files.pythonhosted.org/packages/b6/63/e9ca1ad9186afcffff177ebb42eea0cfa67f69954e82145e122a6228b8bc/affine6p-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ff408c9292e92a8bf117403d944b3917", "sha256": "69c6653b9b4500f1ae283eb0d6438352cdd5e974bbf861d21d896d1846910644" }, "downloads": -1, "filename": "affine6p-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ff408c9292e92a8bf117403d944b3917", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5879, "upload_time": "2018-07-21T17:24:05", "url": "https://files.pythonhosted.org/packages/33/89/519563e336bf18f5fe44f9e0378d130c8c4e38d4ff357eeb9fd00369d52f/affine6p-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b2cd54f2cc47d4d7377aaf713d9bede6", "sha256": "6cfdc0ab4ee663f66ba70b2204dd58805f64d2f1a12c6c92cb38bd1af1fa469c" }, "downloads": -1, "filename": "affine6p-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b2cd54f2cc47d4d7377aaf713d9bede6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4085, "upload_time": "2018-07-21T17:24:06", "url": "https://files.pythonhosted.org/packages/b6/63/e9ca1ad9186afcffff177ebb42eea0cfa67f69954e82145e122a6228b8bc/affine6p-1.0.0.tar.gz" } ] }