“闭合轮廓椭圆傅里叶特征”的python实现

pyefd的Python项目详细描述


Pyefd

Build StatusimageDocumentation Statusimageimageimage

一种用傅立叶级数逼近轮廓的方法的Python/NoMPY实现,如〔1〕中所述。

安装

pip install pyefd

用法

给定形状的闭合轮廓,由例如scikit-imageOpenCV,这个包可以容纳 {a9}逼近轮廓的形状。

一般用法示例

本节介绍pyefd的一般使用模式。

frompyefdimportelliptic_fourier_descriptorscoeffs=elliptic_fourier_descriptors(contour,order=10)

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

默认情况下,返回的系数是标准化的,因此它们是旋转和大小不变的。 这可以通过调用来覆盖:

frompyefdimportelliptic_fourier_descriptorscoeffs=elliptic_fourier_descriptors(contour,order=10,normalize=False)

之后也可以进行标准化:

frompyefdimportnormalize_efdcoeffs=normalize_efd(coeffs)

opencv示例

如果使用OpenCV生成等高线,则此示例演示如何 连接到pyefd

importcv2importnumpyfrompyefdimportelliptic_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=[]forcntincontours:# Find the coefficients of all contourscoeffs.append(elliptic_fourier_descriptors(numpy.squeeze(cnt),order=10))

使用efd作为功能

要使用这些功能,可以编写一个小包装函数:

frompyefdimportelliptic_fourier_descriptorsdefefd_feature(contour):coeffs=elliptic_fourier_descriptors(contour,order=10,normalize=True)returncoeffs.flatten()[3:]

如果系数是标准化的,那么coeffs[0, 0] = 1.0coeffs[0, 1] = 0.0coeffs[0, 2] = 0.0,因此当使用椭圆傅立叶描述子作为特征时可以忽略它们。

更多技术细节见[1]。

测试

使用Pytest

运行测试
py.test tests.py

测试包括来自mnist手写数字数据集([2])的单个图像作为用于测试的轮廓。

文档

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

v1.40(2019-07-27)

  • 合并pr 4:矢量化轮廓重建功能

v1.3.0(2019-06-18)

  • 合并pr 2:numpy矢量化efd
  • 从travis ci移动到azure管道
  • 将rst替换为markdown

v1.2.0(2018-06-14)

  • 已更新setup.py
  • 更新的numpy要求
  • 添加了pipfile
  • 代码为黑色
  • 3.6测试

v1.1.0(2018-06-13)

  • opencv的新示例
  • 更新的文档

v1.0(2016-04-19)

  • 对于1.0版的发行版来说,它已经足够稳定了
  • 创建文档。

V0.1.2(2016-02-29)

  • 用皮试而不是鼻试进行测试。
  • 增加了工作服的使用。

V0.1.1(2016-02-17)

  • 固定清单
  • 添加了丢失的许可证文件。

v0.1.0(2016-02-09)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
orm如何在Java中实现规范化映射?   java以编程方式修改Xtext生成的Mwe2工作流   java正在覆盖外部文件中的现有数据,如何停止?   java在ANTLR BNF语法符号中epsilon的等价物是什么?   java如何使用Hibernate@Anyrelated注释?   代码生成生成java类并在运行时加载它   java Maven无法在本地jar文件中收集依赖项   java NetBeans IDE 8.2不显示错误消息   java Selenium web驱动程序找不到元素   java如何修复“拒绝访问属性”invoke“”的权限?   JavaApacheJClouds,从比日期更早的blob中删除blob的最佳方法   java如何比较和排序树集中的项目?   使用JavaSpring和无头/解耦CMS   java使用swagercodegen在不同的类中生成端点   Java外部Keylistener没有响应