Metadata-Version: 2.0
Name: pyefd
Version: 0.1.1
Summary: Python implementation of "Elliptic Fourier Features of a Closed Contour"
Home-page: https://github.com/hbldh/pyefd
Author: Henrik Blidh
Author-email: henrik.blidh@nedomkull.com
License: MIT
Keywords: elliptic fourier descriptors,shape descriptors,image analysis
Platform: any
Classifier: Development Status :: 4 - Beta
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Software Development
Classifier: Topic :: Scientific/Engineering
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Requires-Dist: numpy (>=1.7.0)

PyEFD
=====

.. image:: https://travis-ci.org/hbldh/pyefd.svg?branch=master
    :target: https://travis-ci.org/hbldh/pyefd
.. image:: http://img.shields.io/pypi/v/pyefd.svg
    :target: https://pypi.python.org/pypi/pyefd/
.. image:: http://img.shields.io/pypi/dm/pyefd.svg
    :target: https://pypi.python.org/pypi/pyefd/
.. image:: http://img.shields.io/pypi/l/pyefd.svg
    :target: https://pypi.python.org/pypi/pyefd/

An Python/NumPy implementation of the method described in \[1\].

Usage
-----
::

    $ pip install pyefd

Given a closed contour of a shape, generated by e.g. `scikit-image <http://scikit-image.org/>`_
or `OpenCV <http://opencv.org/>`_, this package can fit a 
`Fourier series <https://en.wikipedia.org/wiki/Fourier_series>`_
approximating the shape of the contour::

    from pyefd import elliptic_fourier_descriptors
    coeffs = elliptic_fourier_descriptors(contour, order=10)

The coefficients returned are the ``a_n``, ``b_n``, ``c_n`` and ``d_n`` of
the following Fourier series representation of the shape.

The coefficients returned are by default normalized so that they are 
rotation and size-invariant. This can be overridden by calling::

    from pyefd import elliptic_fourier_descriptors
    coeffs = elliptic_fourier_descriptors(contour, order=10, normalize=False)

Normalization can also be done afterwards::

    from pyefd import normalize_efd
    coeffs = normalize_efd(coeffs)

To use these as features, one can write a small wrapper function::

    def efd_feature(contour):
        coeffs = elliptic_fourier_descriptors(contour, order=10, normalize=True)
        return coeffs.flatten()[3:]

If the coefficients are normalized, then ``coeffs[0, 0] = 1.0``,
``coeffs[0, 1] = 0.0`` and ``coeffs[0, 2] = 0.0``, so they can be disregarded when using
the elliptic Fourier descriptors as features.

See \[1\] for more technical details.

Testing
-------

Run tests with::

    $ python setup.py test

or with `Pytest <http://pytest.org/latest/>`_::

    $ py.test tests.py

The tests includes a single image from the MNIST dataset of handwritten digits (\[2\]) as a contour to use
for testing.

Documentation
-------------

See the `Github pages <http://hbldh.github.io/pyefd>`_.

References
----------

\[1\] `Frank P Kuhl, Charles R Giardina, Elliptic Fourier features of a closed contour, 
Computer Graphics and Image Processing, Volume 18, Issue 3, 1982, Pages 236-258, 
ISSN 0146-664X, http://dx.doi.org/10.1016/0146-664X(82)90034-X. <http://www.sci.utah.edu/~gerig/CS7960-S2010/handouts/Kuhl-Giardina-CGIP1982.pdf>`_


\[2\] `LeCun et al. (1999): The MNIST Dataset Of Handwritten Digits <http://yann.lecun.com/exdb/mnist/>`_


v0.1.1 (2016-02-17)
===================
- Fixed MANIFEST
- Added LICENSE file that was missing.

v0.1.0 (2016-02-09)
===================
- Initial release


