傅里叶描述子
来自本人笔记: https://github.com/masterAllen/LearnOpenCV/blob/main/docs/傅里叶描述子
傅里叶描述子,在 ximgproc 中有实现。网上一篇具体介绍的文章:https://www.cnblogs.com/edie0902/p/3658174.html
我知道的一种应用是用来做形状匹配,ximgproc 对应章节也有调用的函数实现。个人的实验代码在 test_shape.ipynb 最后的 block 中,以下是复制:
import math
img1 = cv2.imread('./image/shape/13.png', -1)
contours1, _ = cv2.findContours(img1, cv2.RETR_TREE, method=cv2.CHAIN_APPROX_NONE)
img2 = cv2.imread('./image/shape/14.png', -1)
contours2, _ = cv2.findContours(img2, cv2.RETR_TREE, method=cv2.CHAIN_APPROX_NONE)
# 计算傅里叶描述子,这个在之后没用到,只是单纯演示;返回 CV64F2
descriptors = cv.ximgproc.fourierDescriptor(contours1[0], nbElt=-1, nbFD=-1)
# sampling contour we want 256 points
fit = cv2.ximgproc.createContourFitting(1024,16)
fit.setFDSize(16)
cs1 = cv2.ximgproc.contourSampling(contours1[0].reshape((-1, 1, 2)), 256)
cs2 = cv2.ximgproc.contourSampling(contours2[0].reshape((-1, 1, 2)), 256)
alphaPhiST, _ = fit.estimateTransformation(cs1, cs2)
out_shape = cv2.ximgproc.transformFD(cs1, alphaPhiST, fdContour=False)
show_images([
('img1', draw_points(img1, contours1[0])),
('img2', draw_points(img2, contours2[0])),
('Use Fourier', draw_points(img2, out_shape)),
])
其他的应用,以下是 AI 的回答:
傅里叶描述子(Fourier Descriptors)是一种用于描述信号形状特征的方法,它基于傅里叶级数和傅里叶变换的理论。傅里叶描述子广泛应用于多个领域,包括但不限于图像处理、模式识别、音频分析和生物医学信号处理。以下是傅里叶描述子的一些主要作用和应用:
1\. **形状分析**:
- 傅里叶描述子可以用来分析和比较不同形状的特征。通过将形状的边界表示为傅里叶级数,可以提取形状的特征,如凸性、凹性和对称性。
2\. **特征提取**:
- 在图像处理中,傅里叶描述子可以用来提取图像的特征,这些特征可以用于图像识别、分类和匹配。
3\. **信号分析**:
- 在信号处理中,傅里叶描述子可以用来分析周期性信号的频率成分,以及非周期性信号的频谱特性。
4\. **数据压缩**:
- 通过保留主要的傅里叶系数,可以对信号进行压缩,从而减少所需的存储空间或传输带宽。
5\. **图像和信号重建**:
- 利用傅里叶描述子,可以从其傅里叶系数重建原始信号或图像,这在图像去噪和信号恢复中非常有用。
6\. **模式匹配**:
- 在模式识别领域,傅里叶描述子可以用来匹配和识别不同的模式,如指纹匹配、面部识别等。
7\. **动态系统分析**:
- 在系统辨识和控制理论中,傅里叶描述子可以用来分析系统的动态响应。
8\. **音频处理**:
- 在音频处理中,傅里叶描述子可以用来分析音频信号的频率成分,实现音效处理、语音识别等功能。
9\. **生物医学信号分析**:
- 在生物医学领域,傅里叶描述子可以用来分析心电图(ECG)、脑电图(EEG)等生物医学信号,帮助诊断和监测疾病。
10\. **纹理分析**:
- 在计算机视觉中,傅里叶描述子可以用来分析图像的纹理特征,用于纹理分类和识别。
傅里叶描述子的主要优势在于它们能够提供信号或形状的紧凑表示,这有助于简化复杂的数据分析和处理任务。然而,它们也有局限性,比如对噪声的敏感性和在处理非周期性或非平稳信号时的局限性。