aihot  2017-05-16 11:36:43  OpenCV |   查看评论   

 OpenCV代码提取:dft函数的实现

傅立叶变换将图像分解为其窦道和余弦分量。换句话说,它会将图像从其空间域转换到其频域。这个想法是任何函数可以用无限窦和余弦函数的和来精确地近似。

DFT的性能取决于图像大小。对于数字二,三和五的倍数,图像尺寸趋向于最快。因此,为了获得最大的性能,通常最好将边框值填充到图像以获得具有这种特征的大小。

傅立叶变换用于分析各种滤波器的频率特性。对于图像,使用2D离散傅里叶变换(DFT)找到频域。称为快速傅里叶变换(FFT)的快速算法用于计算DFT。

对于正弦信号,如果振幅在短时间内变化如此之快,可以说它是高频信号。如果缓慢变化,则是低频信号。您可以将相同的想法扩展到图像。在边缘点或噪声方面,我们可以说,边缘和噪声是图像中的高频内容。如果振幅没有太大的变化,则是低频分量。

对于某些阵列大小,DFT计算的性能更好。当数组大小为2时,速度最快。尺寸为2,3和5的乘积的阵列也被非常有效地处理。因此,如果您担心的性能,可以在找到DFT之前将数组的大小修改为任何最佳大小(通过填充零)。

傅里叶变换是用于从时间(例如1维的音频信号)或空间(例如,2维)中的频域到频域的转换的线性变换。

傅立叶变换将图像分解为其窦道和余弦分量。换句话说,它会将图像从其空间域转换到其频域。变换的结果是复数。通过实际图像和复杂图像或通过幅度和相位图像显示这一点。然而,在整个图像处理算法中,只有幅面图像很有趣,因为它包含了我们所需要的关于图像几何结构的所有信息。

DFT的性能取决于图像大小。对于数字二,三和五的倍数,图像尺寸趋向于最快。因此,为了获得最大的性能,通常最好将边框值填充到图像以获得具有这种特征的大小。

傅立叶系数的动态范围太大,不能显示在屏幕上。为了使用灰度值进行可视化,我们可以将我们的线性尺度变换为对数的。

在频域中进行滤波的原因通常是因为在图像(空间)域中执行两个2D傅里叶变换和滤波器的乘积比在卷积上执行的计算速度更快。

一维离散傅里叶变换公式如下:

OpenCV代码提取:dft函数的实现(1)


二维离散傅里叶变换公式如下:

OpenCV代码提取:dft函数的实现(1)

离散傅立叶变换的运行速度与图片的尺寸息息相关。当图像的尺寸是2,3,5的整数倍时,计算速度最快。因此,为了达到快速计算的目的,经常通过添凑新的边缘像素的方法获取最佳图像尺寸。傅立叶变换的结果是复数,这就是说对于每个原图像值,结果是两个图像值。此外,频域值范围远远超过空间值范围,因此至少要将频域储存在float格式中。

DFT要分计算实部和虚部,把要处理的图像作为输入的实部,一个全零的图像作为输入的虚部。一般都会用幅度图像来表示图像傅里叶的变换结果谱)。

图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。图像的边缘部分是突变部分,变化较快,因此反应在频域上是高频分量;图像的噪声大部分情况下是高频部分;图像大部分平缓的灰度变化部分则为低频分量。也就是说,傅立叶变换提供另外一个角度来观察图像,可以将图像从灰度分布转化到频率分布上来观察图像的特征。

由DFT的性质知,输入为实信号(图像)的时候,频域输出为复数,因此将频域信息分为幅值和相位。频域的幅值高的代表高频分量,幅值低的地方代表低频分量

以上内容整理自网络。

目前fbc_cv库中支持float类型,经,与OpenCV3.1结果完全一致。

实现代码dft.hpp:

 

[cpp]  
 
 
  1.  1/83    1 2 3 4 5 6 下一页 尾页
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV代码提取:dft函数的实现

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]