跳转到主要内容

Python实现“封闭轮廓的椭圆傅里叶特征”

项目描述

PyEFD

Build and Test Documentation Status image image image

PyEFD是Python/NumPy实现的一种方法,用于通过傅里叶级数逼近轮廓,如[1]中所述。

安装

pip install pyefd

使用方法

给定一个形状的封闭轮廓,例如由scikit-imageOpenCV生成,此包可以拟合一个逼近轮廓形状的傅里叶级数

通用使用示例

本节描述了pyefd的通用使用模式。

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

返回的系数是以下形状傅里叶级数表示中的a_nb_nc_nd_n

返回的系数默认已归一化,以便它们是旋转和尺寸不变的。这可以通过调用

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

归一化也可以在之后进行

from pyefd import normalize_efd
coeffs = normalize_efd(coeffs)

OpenCV示例

如果您使用OpenCV生成轮廓,此示例显示了如何将其连接到pyefd

import cv2 
import numpy
from pyefd import elliptic_fourier_descriptors

# Find the contours of a binary image using OpenCV.
contours, hierarchy = cv2.findContours(
    im, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# Iterate through all contours found and store each contour's 
# elliptical Fourier descriptor's coefficients.
coeffs = []
for cnt in contours:
    # Find the coefficients of all contours
    coeffs.append(elliptic_fourier_descriptors(
        numpy.squeeze(cnt), order=10))

使用EFD作为特征

要使用这些作为特征,可以编写一个小的包装函数

from pyefd import elliptic_fourier_descriptors

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

如果系数已归一化,则coeffs[0, 0] = 1.0coeffs[0, 1] = 0.0coeffs[0, 2] = 0.0,因此在使用椭圆傅里叶描述符作为特征时可以忽略它们。

参阅[1]获取更多技术细节。

测试

使用Pytest运行测试

py.test tests.py

测试包括MNIST手写数字数据集的单个图像作为测试使用的轮廓。

文档

参阅ReadTheDocs

参考文献

[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.

[2]: LeCun et al. (1999): The MNIST Dataset Of Handwritten Digits

变更日志

此项目中所有显著变更都将在此文件中记录。

格式基于Keep a Changelog,本项目遵循语义化版本控制

1.6.0 (2021-12-09)

新增

  • 新增具有圆柱对称性的3D表面演示。(examples/example1.py

修复

  • 修复未调用imshow时错误绘制的曲线。
  • 修复丑陋的系数计算代码。

1.5.1 (2021-01-22)

新增

  • elliptic_fourier_descriptors方法上的return_transformation关键字。合并#11。修复#5。

修复

  • 文档修正。合并#12。

移除

  • 删除损坏的示例脚本scikit_image.py

1.4.1 (2020-09-28)

新增

  • 新增CHANGELOG.md

变更

  • 将CI从Azure Devops更改为Github Actions

1.4.0 (2019-07-27)

变更

  • 合并PR #4:矢量化轮廓重建函数

1.3.0 (2019-06-18)

变更

  • 合并PR #2:Numpy矢量化efd
  • 从Travis CI迁移到Azure Pipelines
  • 将rst替换为markdown

1.2.0 (2018-06-14)

变更

  • 更新setup.py
  • 更新numpy要求

新增

  • 添加Pipfile
  • 在代码上运行Black
  • 在3.6上测试

1.1.0 (2018-06-13)

新增

  • 新增OpenCV示例
  • 更新文档

1.0.0 (2016-04-19)

变更

  • 认为足够稳定,可以发布版本1.0

新增

  • 创建文档。

0.1.2 (2016-02-29)

变更

  • 使用pytest代替nosetests进行测试。

新增

  • 添加Coveralls使用。

0.1.1 (2016-02-17)

修复

  • 修复MANIFEST

新增

  • 添加缺失的LICENSE文件。

0.1.0 (2016-02-09)

新增

  • 初始发布

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

pyefd-1.6.0.tar.gz (11.0 kB 查看哈希)

上传时间

构建分布

pyefd-1.6.0-py2.py3-none-any.whl (7.7 kB 查看哈希)

上传时间 Python 2 Python 3

支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面