我是靠谱客的博主 悦耳小懒猪,最近开发中收集的这篇文章主要介绍OpenCV DFT,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

二维图像的DFT

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

频域在图像处理中,就我所知的用途主要在两方面:图像压缩和图像去噪。关于这两点将在下面给出图片DFT的变换结果后说明。

有关DFT的更多性质请参考胡广书教授的《数字信号处理》教材。

       提到图像频域变换的用途:压缩和去噪。压缩的原理就是在频域中,大部分频域的值为0(或接近0,可以进行有损压缩,如jpeg图像),只要压缩频域中的少数非0值即可达到图片压缩的目的。去噪则是通过频域的滤波实现,因为噪声大部分情况下体现为高频信号,使用低通滤波器即可滤除高频噪声(当然,也会带来损失,那就是边缘会变得模糊(之前说过,边缘也是高频信号))。

计算幅值:magnitude()函数

void cv::magnitude(InputArray x,InputArray y,OutputArray magnitude)

参数说明:

x : 实部,矢量的浮点类型

y : 虚部,矢量的浮点类型

magnitude : 目标图像

将实部和虚部转换为幅值 Transform the real and complex values to magnitude

一个复数有实部(Real - Re)和虚部 (imaginary - Im) 。DFT的结果是复数。幅值用下面公式计算:

截取并重新组合图像 Crop and rearrange

        将幅度图像转换为偶数。并且重新组合图像象限,让原点(0,0)位于图像中心。

// 重新排列变换结果,让原点处于图像中心。rearrange the quadrants of Fourier image  so that the origin is at the image center
// 变换结果图像中四个角到中心是低频到高频,为了符合坐标系,将其分为四份重新排列,让四个角处于中心位置
int cx = magI.cols / 2;
int cy = magI.rows / 2;

Mat q0(magI, Rect(0, 0, cx, cy));   //左上角区域 Top-Left - Create a ROI per quadrant
Mat q1(magI, Rect(cx, 0, cx, cy));  //右上角 Top-Right
Mat q2(magI, Rect(0, cy, cx, cy));  //左下角 Bottom-Left
Mat q3(magI, Rect(cx, cy, cx, cy)); //右下角 Bottom-Right

Mat tmp;                           // 交换左上角和右下角swap quadrants (Top-Left with Bottom-Right)
q0.copyTo(tmp);
q3.copyTo(q0);
tmp.copyTo(q3);

q1.copyTo(tmp);                    // 交换右上角和左下角swap quadrant (Top-Right with Bottom-Left)
q2.copyTo(q1);
tmp.copyTo(q2);

       为了便于频域的滤波和频谱的分析,常在变换后进行频谱的中心化,即对掉频谱的四个象限,如下图所示:

       在经过频谱居中后的频谱中,中间最亮的点是最低频率,属于直流分量,越往外,频率越高,如下所示: 

  频域滤波

高通滤波

图像在经过傅里叶变换后,经频谱中心化后,从中间到外面,频率上依次是从低频到高频的。那么我们假设把中间规定一小部分去掉,是不是相对于把低频信号去掉了呢?这也就是相当于进行了高通滤波。滤波模板如下图所示:

上图中高通滤波器有利于提取图像的轮廓,图像的轮廓或者边缘或者一些噪声处,灰度变化剧烈,那么在把它们经过傅里叶变换后。就会变成高频信号(高频是捕捉细节的),所以在把图像低频信号滤掉以后剩下的自然就是轮廓了。

 低通滤波

构造一个低通滤波器很简单,只要把上述模板中的1改为0,0改为1即可。

从结果中可看到低通滤波后图像轮廓变模糊了,图像的大部分信息基本上都保持了。图像的主要信息都集中在低频上,所以低通滤波器的效果是这样也是能够理解的。

带通滤波器

我们把高通和低通的一部分结合在模板中就形成了带通滤波器,它容许一定频率范围信号通过, 但减弱(或减少)频率低于於下限截止频率和高于上限截止频率的信号的通过,如下图所示:

  这就是带通的效果,它既能保留一部分低频,也能保留一部分高频。

带阻滤波器

带阻滤波器减弱(或减少)一定频率范围信号, 但容许频率低于於下限截止频率和高于上限截止频率的信号的通过,如下示:

        带阻滤波器保持了原图像的大部分信息,图像的主要信息都集中在低频上,而边缘轮廓信息都在高频位置。带阻滤波器滤除了中频信息,保留了低频和高频信息,所以对图像的信息破坏是比较小的。 

频谱中白色、亮的是低频,黑色的、暗的是高频

学习数字图像处理中傅里叶变换一节时出现了这样的疑问,为什么低频是白色的,高频是黑色的?

       傅立叶变换以前,图像是由对在连续空间(现实空间)上的采样得到一系列点的集合,我们习惯用一个二维矩阵表示空间上各点,则图像可由z=f(x,y)来表示。实际上对图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图,当然频谱图上的各点与原图像上各点并不存在一一对应的关系,即使在不移频的情况下也是没有。傅立叶频谱图上我们看到的明暗不一的亮点,实际上图像上某一点(像素灰度值)与它的邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分梯度大的点)

  • 在空间域图像中,线性的地物为高频成分,大块面状的地物为低频成分。图像经过傅立叶变换后产生频率域图像,这些空间频率信息被突出出
  • 图像灰度变化缓慢的部分,对应变换后的低频分量部分,图像的细节和轮廓边缘都是灰度突变区域,它们是变换后的高频分量.
  • 频域图像的每一点都来自于整个原图像

结论:傅里叶变换移频过后,低频部分到了中心位置,结合上述PPT知道,通常图像的低频占据了大部分信息,所以是白色的。 

网址

最后

以上就是悦耳小懒猪为你收集整理的OpenCV DFT的全部内容,希望文章能够帮你解决OpenCV DFT所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部