OpenCV C++(十)----傅里叶变换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV C++(十)----傅里叶变换相关的知识,希望对你有一定的参考价值。
参考技术A二维离散的傅里叶变换可以分解为一维离散的傅里叶变换:
图像傅里叶(逆)变换的步骤:
从傅里叶变换的步骤可以看出, 傅里叶变换理论上需要O((MN) 2) 次运算, 这 是非常耗时的, 并极大地降低了傅里叶变换在图像处理中的应用。 幸运的是, 当M=2 m和N=2 n时, 或者对于任意的M 和N, 傅里叶变换通过O(MN log (MN) ) 次运算就 可以完成, 这通常称为傅里叶变换的快速算法, 简称“快速傅里叶变换”。
在OpenCV中实现的傅里叶变换的快速算法是针对行数和列数均满足可以分解为2p ×3q ×5r的情况的, 所以在计算二维矩阵的快速傅里叶变换时需要先对原矩阵进行扩充, 在矩阵的右侧和下侧补0, 以满足该规则, 对于补多少行多少列的0, 可以使用函数:
幅度谱(Amplitude Spectrum) , 又称傅里叶谱, 通过以下公式计算:
相位谱(Phase SpectruM)
显然, 复数矩阵F 可以由幅度谱和相位谱表示:
其中.*代表矩阵的点乘, 即对应位置相乘.
注:因为幅度谱的最大值在(0, 0) 处, 即左上角, 通常为了便于观察, 需要将其移动 到幅度谱的中心, 那么需要在进行傅里叶变换前, 将图像矩阵乘以(-1) r+c。
OpenCV提供的计算相位谱的函数:
视觉显著性检测可以看作抽取信息中最具差异的部分或者最感兴趣或首先关注的部分, 赋予对图像分析的选择性能力, 对提高图像的处理效率是极为重要的。
算法步骤:
利用傅里叶变换计算卷积, 主要步骤概括为, 首先计算两个傅里叶变换的点乘, 然后进行傅里叶逆变换, 并只取逆变换的实部。
卷积定理是针对full卷积的, 而same卷积是full 卷积的一部分。 利用快速傅里叶变换, 根据卷积定理, 计算same卷积,步骤如下。
注:只有当卷积核较大时, 利用傅里叶变换的快速算法计算卷积才会表现出明显的优势。
以上是关于OpenCV C++(十)----傅里叶变换的主要内容,如果未能解决你的问题,请参考以下文章