“闭合轮廓椭圆傅里叶特征”的python实现
pyefd的Python项目详细描述
Pyefd
一种用傅立叶级数逼近轮廓的方法的Python/NoMPY实现,如〔1〕中所述。
安装
pip install pyefd
用法
给定形状的闭合轮廓,由例如scikit-image或 OpenCV,这个包可以容纳 {a9}逼近轮廓的形状。
一般用法示例
本节介绍pyefd
的一般使用模式。
frompyefdimportelliptic_fourier_descriptorscoeffs=elliptic_fourier_descriptors(contour,order=10)
返回的系数是下列傅里叶级数的a_n
、b_n
、c_n
和d_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.0
,coeffs[0, 1] = 0.0
和
coeffs[0, 2] = 0.0
,因此当使用椭圆傅立叶描述子作为特征时可以忽略它们。
更多技术细节见[1]。
测试
使用Pytest:
运行测试py.test tests.py
测试包括来自mnist手写数字数据集([2])的单个图像作为用于测试的轮廓。
文档
参考文献
[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)
- 初始版本