Python实现“封闭轮廓的椭圆傅里叶特征”
项目描述
PyEFD
PyEFD是Python/NumPy实现的一种方法,用于通过傅里叶级数逼近轮廓,如[1]中所述。
安装
pip install pyefd
使用方法
给定一个形状的封闭轮廓,例如由scikit-image或OpenCV生成,此包可以拟合一个逼近轮廓形状的傅里叶级数。
通用使用示例
本节描述了pyefd
的通用使用模式。
from pyefd import elliptic_fourier_descriptors
coeffs = elliptic_fourier_descriptors(contour, order=10)
返回的系数是以下形状傅里叶级数表示中的a_n
、b_n
、c_n
和d_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.0
、coeffs[0, 1] = 0.0
和coeffs[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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 628f50f395d41c82db9625834674975584fa8f829fc60cfc127937dec8f22980 |
|
MD5 | d69a00269fbc33b68b877e758a66c265 |
|
BLAKE2b-256 | 7ffcd62c68520252715b1b06bfebf45dbbb696f06535bab9210259eb6987f9fc |
pyefd-1.6.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3c0bff21bdd00a8f1da69618ed61ea5b8a38d94c7ff5556073716aae0f66c8a2 |
|
MD5 | 4a5d736221941453242a97c4eaabd295 |
|
BLAKE2b-256 | d26cabb8f9b6b30fa4e69addd8e6e3c384fd4ce4ad23e38bb79e6a82cd3e74a9 |