您当前的位置: 首页 >  opencv

wendy_ya

暂无认证

  • 2浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

OpenCV之傅里叶描述子特征构建(Fourier Descriptor)

wendy_ya 发布时间:2021-03-01 16:00:11 ,浏览量:2

目录
    • 1、傅里叶描述子介绍
    • 2、归一化的傅里叶描述子
    • 3、算法描述
    • 4、代码示例

1、傅里叶描述子介绍

傅里叶描述子是一种图像特征,用来描述轮廓的特征参数。

傅里叶描述子的基本思想是:首先我们设定物体的形状轮廓是一条闭合的曲线,一个点沿边界曲线运动,假设这个点为p(l),它的复数形式的坐标为x(l)+jy(l),它的周期是这个闭合曲线的周长,这也表明属于一个周期函数。该以曲线周长作为周期的函数能够通过傅里叶级数表示。在傅里叶级数里面的多个系数z(k)与闭合边界曲线的形状有着直接关系,将其定义为傅里叶描述子。当取到足够阶次的系数项z(k)时,傅里叶描述子能够完全提取形状信息,并恢复物体的形状。 也就是说,傅里叶描述子用一个向量表示轮廓,将轮廓数字化,从而能更好的区分不同的轮廓,达到识别物体的目的。傅里叶描述子的特点是简单并且非常高效,是识别物体形状的重要方法之一。

简单来说,傅里叶描述子就是用一个向量代表一个轮廓,将轮廓数字化,从而能更好地区分不同的轮廓,进而达到识别物体的目的。

如上图所示,少数的傅里叶描述子就可以用于捕获边界的大体特征。这一性质很有用,因为这些系数携带有形状信息。

2、归一化的傅里叶描述子

事物轮廓曲线的初始点、 尺寸及方向会影响傅里叶描述子的大小。 当识别事 物存在尺度改变、 旋转等运动时, 要通过归一化的方法处理描述子,进而使傅里叶描述子具有旋转、平移和尺度变换不变性的特性,这就是归一化的傅里叶描述子。 在这里插入图片描述

总结:傅立叶描述子可以很好地描述物体的轮廓特征,并且只需少量的描述子(即向量中的数不需要太多)即可大致代表整个轮廓。其次,对傅立叶描述子进行简单的归一化操作后,即可使描述子具有平移、旋转、尺度不变性,即不受轮廓在图像中的位置、角度及轮廓的缩放等影响,是一个鲁棒性较好的图像特征。

3、算法描述

【注意】:一般情况下,我们在计算傅里叶描述子前,首先需要进行图像去噪、二值化、形态学处理等若干步骤,以尽可能减小噪声。经过一系列处理后,可以利用findContours和drawContours函数进行轮廓提取与绘制,

在这里插入图片描述 如上图所示, 空间域描述该轮廓: s ( k ) = [ x ( k ) , y ( k ) ] , k = 0 , 1 , 2 , . . . , K − 1 s(k)=[x(k),y(k)], k=0,1,2,...,K-1 s(k)=[x(k),y(k)],k=0,1,2,...,K−1 如果把空间平面转换到复平面,轮廓点描述为: s ( k ) = x ( k ) + j y ( k ) , k = 0 , 1 , 2 , . . . , K − 1 s(k)=x(k)+jy(k), k=0,1,2,...,K-1 s(k)=x(k)+jy(k),k=0,1,2,...,K−1,也就是说x轴为复数序列的实轴,y轴为复数序列的虚轴。复数域下,二维问题简化为一维问题,但边界本质未变。

对图像轮廓点 s ( k ) = x ( k ) + j y ( k ) s(k)=x(k)+jy(k) s(k)=x(k)+jy(k),其离散傅里叶变换(DFT)为 a ( u ) = ∑ k = 0 K − 1 s ( k ) e − j 2 π u k / K , u = 0 , 1 , 2 , . . . , K − 1 a(u)=\sum_{k=0}^{K-1}s(k)e^{-j2πuk/K}, u=0,1,2,...,K-1 a(u)=∑k=0K−1​s(k)e−j2πuk/K,u=0,1,2,...,K−1 其中的复系数a(u)称为边界的傅里叶描绘子。

这些系数的反傅里叶变换可恢复s(k)。也就是说, s ( k ) = 1 K ∑ u = 0 P − 1 a ( u ) e j 2 π u k / P , k = 0 , 1 , 2 , . . . , K − 1 s(k)=\frac{1}{K}\sum_{u=0}^{P-1}a(u)e^{j2πuk/P}, k=0,1,2,...,K-1 s(k)=K1​∑u=0P−1​a(u)ej2πuk/P,k=0,1,2,...,K−1

【注意】:图像中的细节对应高频,平缓区域由低频决定。

而轮廓全局由低频决定,轮廓细节由高频决定。物体分类用轮廓全局就可以了,即只需要s(k)的低频部分(即u的取值从0到P-1): s ^ ( k ) = 1 K ∑ u = 0 P − 1 a ( u ) e j 2 π u k / P , k = 0 , 1 , 2 , . . . , K − 1 \hat{s}(k)=\frac{1}{K}\sum_{u=0}^{P-1}a(u)e^{j2πuk/P}, k=0,1,2,...,K-1 s^(k)=K1​∑u=0P−1​a(u)ej2πuk/P,k=0,1,2,...,K−1

注意,其中近似恢复的轮廓点 s ^ ( k ) \hat{s}(k) s^(k)的点数和原轮廓点的数量一样都是K个。只有近似的轮廓只是对元轮廓进行大致“描绘”,且描述子只有P(P

关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.0411s