频率域滤波

频率滤波(Frequency filtering) 傅立叶变换是一种将和分解为一堆正弦曲线(Sinusoids)的方法。 阅读详情
最近有个朋友创业,找我实现个算法,用到离散傅里叶变换。实现后,正好把以前相关的笔记整理完。

频域滤波

空间域和频率域为我们提供了不同的视角。在空域中,数字图像f(x,y)为一个定义在二维空间中的矩形区域上的离散函数;换一个角度,,如果将f(x,y)视为幅值变化的二维信号,则可以通过某些变换手段(如傅里叶变换、离散余弦变换、沃尔什变换和小波变换等)在频域下对它进行分析。离散傅里叶变化情况下,相位谱决定图像结构,幅度谱反映了图像整体各个方向的频率分量的相对强度。

在多数情况下,频率域滤波和空间域滤波可以视为同一个图像增强问题的殊途同归的两种解决方式。傅里叶变换提供了一种变换到频率域的手段。关于傅里叶变换,这里就不累赘介绍了。最早我是从本科接触傅里叶变换,先是《信号与系统》,后来是《数字信号处理》。

为了得到合适的空间域滤波器,我们可以首先设计频域滤波器H(u, v),然后根据卷积定理,将H(u, v)反变换到空间域得到空间域中滤波使用的卷积模板h(x,y)。

频率滤波的基本步骤

  1. 计算原图像f(x,y)的DFT,得到F(u,v)。
  2. 将频谱F(u,v)的零频点移到中心位置。
  3. 计算滤波器函数H(u,v)与F(u,v)的乘积G(u, v)。
  4. 将频谱G(u, v)的零频点移回频谱图的左上角位置。
  5. 计算上步计算结果的IDFT,得到g(x,y)。
  6. 取g(x,y)的实部作为最终滤波后的结果图像。

示例演示

我们按照上面的基本步骤实现一个高斯低通滤波来去噪。高斯低通滤波如下
在这里插入图片描述
代码实现如下

void MainWindow::gaussianBlur(const cv::Mat &image)
{
    Mat input;
    image.convertTo(input, CV_32F);
    std::vector<cv::Mat> channels;
    split(image, channels);  //分离图像的RGB通道, OpenCV:BGR
    for(auto& splitedimage : channels){
        //第一步
        int w = getOptimalDFTSize(splitedimage.cols);
        int h = getOptimalDFTSize(splitedimage.rows);
        Mat padded;
        copyMakeBorder(splitedimage, padded, 0, h - splitedimage.rows, 0, w - splitedimage.cols, BORDER_CONSTANT, Scalar::all(0));
        //imshow("padded", padded);
        Mat plane[] = {cv::Mat_<float>(padded), Mat::zeros(padded.size(),CV_32F)};
        Mat compleximage;
        merge(plane, 2, compleximage);
        dft(compleximage, compleximage);
        //第二步
        split(compleximage, plane);//以下的操作是移动图像  (零频移到中心)
        int cx = plane[0].cols / 2;
        int cy = plane[0].rows / 2;
        Mat part1r(plane[0],Rect(0,0,cx,cy));  //元素坐标表示为(cx,cy)
        Mat part2r(plane[0],Rect(cx,0,cx,cy));
        Mat part3r(plane[0],Rect(0,cy,cx,cy));
        Mat part4r(plane[0],Rect(cx,cy,cx,cy));
        Mat temp;
        part1r.copyTo(temp);  //左上与右下交换位置(实部)
        part4r.copyTo(part1r);
        temp.copyTo(part4r);
        part2r.copyTo(temp);  //右上与左下交换位置(实部)
        part3r.copyTo(part2r);
        temp.copyTo(part3r);
        Mat part1i(plane[1],Rect(0,0,cx,cy));  //元素坐标(cx,cy)
        Mat part2i(plane[1],Rect(cx,0,cx,cy));
        Mat part3i(plane[1],Rect(0,cy,cx,cy));
        Mat part4i(plane[1],Rect(cx,cy,cx,cy));
        part1i.copyTo(temp);  //左上与右下交换位置(虚部)
        part4i.copyTo(part1i);
        temp.copyTo(part4i);
        part2i.copyTo(temp);  //右上与左下交换位置(虚部)
        part3i.copyTo(part2i);
        temp.copyTo(part3i);
        //第三步
        Mat gaussianblur(padded.size(), CV_32FC1);
        float sigma = 45.0;
        float d0 = 2* sigma* sigma;
        for(int i = 0;i < padded.rows; i++ ) {
            for(int j = 0; j < padded.cols; j++ ) {
              float d = pow(float(i - padded.rows / 2), 2) + pow(float(j - padded.cols / 2 ), 2);//分子,计算pow必须为float型
              gaussianblur.at<float>(i,j) = expf(-d / d0);//expf为以e为底求幂(必须为float型)
            }
        }
        imshow("GausianBlur", gaussianblur);
        multiply(plane[0], gaussianblur, plane[0]); //滤波(实部与滤波器模板对应元素相乘)
        multiply(plane[1], gaussianblur, plane[1]);//滤波(虚部与滤波器模板对应元素相乘)
        //第四步
        //以下的操作是移动图像  (零频移到左上角)
        Mat rpart1r(plane[0],Rect(0,0,cx,cy));  //元素坐标表示为(cx,cy)
        Mat rpart2r(plane[0],Rect(cx,0,cx,cy));
        Mat rpart3r(plane[0],Rect(0,cy,cx,cy));
        Mat rpart4r(plane[0],Rect(cx,cy,cx,cy));
        rpart1r.copyTo(temp);  //左上与右下交换位置(实部)
        rpart4r.copyTo(rpart1r);
        temp.copyTo(rpart4r);
        rpart2r.copyTo(temp);  //右上与左下交换位置(实部)
        rpart3r.copyTo(rpart2r);
        temp.copyTo(rpart3r);
        Mat rparti(plane[1],Rect(0,0,cx,cy));  //元素坐标(cx,cy)
        Mat rpart2i(plane[1],Rect(cx,0,cx,cy));
        Mat rpart3i(plane[1],Rect(0,cy,cx,cy));
        Mat rpart4i(plane[1],Rect(cx,cy,cx,cy));
        rparti.copyTo(temp);  //左上与右下交换位置(虚部)
        rpart4i.copyTo(rparti);
        temp.copyTo(rpart4i);
        rpart2i.copyTo(temp);  //右上与左下交换位置(虚部)
        rpart3i.copyTo(rpart2i);
        temp.copyTo(rpart3i);
        Mat blur_result;
        merge(plane, 2, blur_result);//实部与虚部合并
        //第五步
        idft(blur_result, blur_result);	//idft结果也为复数
        //第六步
        split(blur_result, plane);//分离通道,主要获取通道
        magnitude(plane[0],plane[1], plane[0]);  //求幅值(模)
        normalize(plane[0],plane[0], 1,0, CV_MINMAX);  //归一化便于显示
        plane[0].copyTo(splitedimage);
    }
    Mat reuslut;
    merge(channels, reuslut);
    imshow("Result", reuslut);
}

运行结果

在这里插入图片描述

在这里插入图片描述

数字图像处理-频率域滤波原理 频率域滤波,傅立叶变换 阅读详情

相关推荐

频率域滤波步骤小结

频率域滤波步骤小结 1、给定一幅大小为M*N的输入图像f(x,y), 由P &gt;= 2M-1,Q &gt;= 2N-1;得到填充参数P,Q,典型的我们选择,P=2M,Q=2N; 如果滤波的目的仅是粗糙的视觉分析,可以跳过此步骤; 2、对f(x,y) 添加必要数量的0,形成大小为P*Q的图像 fp(x,y); 3、用乘以fp(x,y)移到其变换中心; 4、计算来自步骤3图像的DFT,...

cyf15238622067的博客 8307

傅里叶变换去噪

在计算机中用这个公式更好处理一点 n和N是在一个正弦周期内采样N个点,采样间隔为2pi\N,n用来步进,一次步进2pi\N,最后进行累加求和,就得出了X(k)最后 离散傅里叶变换完整代码 1,从文件读取8000个音频数据,由于现实中的音频没有虚部,所以只设置实部。 2,离散傅里叶变换关键处 temp的re就是对应上图公式的cos,同理im就是对应上图的sin,每个X[k]进行累加求和 for (int k = 0; k < N; k++) { X[k].re = 0;

cauchy8389的专栏 3343

MATLAB中实现图像的空间域滤波和频率域滤波

一)空间域滤波与频率域滤波  1)空间域滤波       空间域滤波是指在图像空间中借助模板对图像领域进行操作,处理图像每一个像素值。主要分为线性滤波和非线性滤波两类,根据功能可分为平滑滤波器和锐化滤波器。平滑可通过低通来实现,平滑的目的有两类,一是模糊,目的是在提取较大的目标前去除太小的细节或将目标内的小尖端连接起来;二是去噪。锐化则可用高通滤波来实现,锐化的目的是为了增强被模糊的细节。

Zoe的技术博客 3万+

小白学冈萨雷斯数字图像处理——第四章:频域处理

4.1 二维离散傅里叶变换 定义与一维DFT相同,此处不再赘述。 在计算二维傅里叶变换之前,可将f(x,y)*(-1)^(x+y)次,可将原点的变换值移到频谱中心。 4.2 在MATLAB中计算并可视化二维DFT 下列函数返回M*N的傅里叶变换;数据原点在左上角,而两个四分之一周期交汇于频率矩形的中心。 F = fft2(f) 若需要进行0填充: F = fft2(f,P,Q) 生成的矩阵大小为P*Q,多余的用0填充。 我们可以使用fftshift函数将变换的原点移到频率矩形的中心,也可用ifftsh

weixin_44487378的博客 1899

OpenCV C++频率域滤波 高斯低通

l 频率域滤波的基本步骤 思想:通过滤波器函数以某种方式来修改图像 变换,然后通过取结果的反变换来获得处理后 的输出图像 低通滤波器: 使低频通过而使高频衰减的滤波 器 被低通滤波的图像比原始图像少尖锐的细节部分而 突出平滑过渡部分 对比空间域滤波的平滑处理,如均值滤波器 高通滤波器: ...

cyf15238622067的博客 4660

从空间滤波器获得频率域滤波器

文章目录一、概念二、空间滤波和频率域滤波的比较 一、概念 本节讨论的主题: (1) 如何将空间滤波器转换为等同的频率域滤波器 (2) 如何使用函数 imfilter 进行空间滤波和使用前一节所述方法进行频率域滤波的结果 由于imfilter使用了相关,且认为滤波器的原点在中心处,因此需要一些预处理来使这两种方法等同,即需要借助函数freqz2 函数 freqz2:H = freqz2(h,R,C)...

南淮北安的博客 3443

理想低通滤波器、Butterworth滤波器和高斯滤波器(matlab)

一、简介我们知道,在一幅图像中,其低频成分对应者图像变化缓慢的部分,对应着图像大致的相貌和轮廓。而其高频成分则对应着图像变化剧烈的部分,对应着图像的细节(图像的噪声也属于高频成分)。低频滤波器,顾名思义,就是过滤掉或者大幅度衰减图像的高频成分,让图像的低频成分通过。低频滤波器可以平滑图像,虑去图像的噪声。而与此相反的高频滤波器,则是过滤低频成分,通过高频成分,可以达到锐化图像的目的。理想低通滤波器...

执剑者罗辑的博客 9万+

傅里叶变换降噪

对信号进行傅里叶变换,然后选择宽度为10,30,50的滤波器对信号进行滤波,对滤波效果进行比较

[音频处理]傅里叶变换去噪

写在前面 不是科研狗,基础理论薄弱,写的比较匆忙,有理解有误的地方还请理解和指正。 网上大佬们写的傅里叶公式推导,证明已经很多了(瑟瑟发抖),我这里主要是讲傅里叶的应用,不涉及公式证明,而是直接拿起公式使用。 由于自己获取知识也是看大佬们博文理解学习得来的,所以图片中多少有一些是别人的图,不过我附上了别人的链接。 看完这篇你能收获到: 1 傅里叶变换的原理 2 傅里叶变换在音频的应用 3 离散傅里叶变换处理音频的C语言代码及讲解 背景 最近接触音视频处理比较多,就遇到了采集的音频数据有噪音的情况。可不可以

zz460833359的博客 4539

ESP32-S3开发环境避坑指南:VS Code+ESP-IDF离线安装全流程(附国内镜像加速)

本文提供了一份详细的ESP32-S3开发环境离线安装指南,重点解决网络依赖问题。通过整合国内镜像加速,手把手教你完成VS Code、ESP-IDF框架、工具链及Python依赖的本地化部署,实现稳定、可重复的开发环境搭建,大幅提升IoT开发效率。

peach的博客 962

Python多版本共存指南:用CMD命令一键切换3.6和3.8解释器(含pip使用技巧)

本文详细介绍了在Windows CMD环境下实现Python多版本(如3.6和3.8)共存与一键切换的完整方案。通过文件重命名策略、环境变量优化和自定义脚本,开发者可快速切换Python解释器版本,并管理各版本独立的pip依赖库,确保项目环境隔离与兼容性。

weixin_29035405的博客 423

6.1 频率域滤波之低通滤波

fxy→傅里叶变换DFTFuv→滤波HuvFuvHuv→傅里叶逆变换IDFTgxyf(x,y)\xrightarrow[傅里叶变换]{DFT} F(u,v)\xrightarrow[滤波]{H(u,v)}F(u,v)H(u,v)\xrightarrow[傅里叶逆变换]{IDFT}g(x,y)fxyDFT傅里叶变换​FuvHuv滤波​FuvHuvIDFT傅里叶逆变换​gxy。

专注图形图像处理 2162

C# 进程间 双内存共享 高帧率图像传输

演示了两个进程之间通过 双内存共享 的方式, 来实时处理图像,并以高帧率(40~60FPS)传输的基本示例。 进程间内存共享的优点:高性能、低延迟、资源效率高、简单可靠。 适用场景:实时图像处理、大数据传输、多进程协作、实时监控系统,等等。

qianqiansd 1996

图像处理(13)–频率域滤波

文章结构1. 频率域的滤波器1.1 频率域滤波公式1.2 滤波步骤1.3 低通滤波器与高通滤波器2. 低通滤波器2.1 理想低通滤波器 图像处理系列笔记: https://blog.youkuaiyun.com/qq_33208851/article/details/95335809 【前言】 为了消除图像噪声,可以使用在空间域的滤波的方法,还可以使用在频率域的滤波器。本文将介绍在频率域的滤波方法。 频率域...

ShaneHolmes 1万+

手把手教你用scRNA-seq和scTCR-seq分析CD8⁺ T细胞在免疫治疗中的动态变化

本文详细介绍了如何整合单细胞RNA测序(scRNA-seq)与单细胞TCR测序(scTCR-seq)技术,深入解析CD8⁺ T细胞在癌症免疫治疗中的动态变化。通过从数据预处理、细胞亚群鉴定到TCR克隆追踪的完整分析流程,揭示了T细胞的功能状态转变与克隆演化规律,为理解免疫应答机制和开发精准治疗策略提供了关键方法学指导。

p8q9r0的博客 567

【部署】Ubuntu 24.04.4虚拟机下部署OpenClaw

OpenClaw是一款基于AI的智能助手工具,本文详细介绍了在Ubuntu 24.04.4系统上的三种安装方法。推荐使用一键安装脚本(curl -fsSL https://openclaw.ai/install.sh | bash),自动完成Node.js检测、CLI安装和引导配置。对于开发者,提供了从源码构建的详细步骤,包括环境准备、依赖安装和构建流程。文章还包含常见问题解决方案(如sharp构建错误处理)以及后续维护建议(更新、配置检查和日志查看)。安装完成后,用户可通过终端TUI或Web UI进行初始

海兰 1万+

空间滤波 & 频率域滤波

图像滤波包括:空间阈滤波 和 频率域滤波 。 使用空间模板进行的图像处理,被称为空间滤波。模板本身被称为空间滤波器。 注:此滤波器w是一唯滤波器,因此扩展在其两侧扩展。 相关就是操作完再翻转 卷积就是先翻转再操作卷积的基本特性是某个函数与某个单位冲激卷积,得到一个在该冲激处的这个函数的拷贝。(相关操作也是得到一个函数的拷贝,但该拷贝旋转了180°)相关与此不同的是: ①相关是滤波器位移的函数。相关的第一个值(c)对应于滤波器的零位移,第二个值(d)对应于一

m0_61899108的博客 2644

基于Python的电商平台商品价格监控与历史价格查询系统

随着电子商务的快速发展,消费者对商品价格透明度的需求日益增长。本文设计并实现了一个基于Python的电商平台商品价格监控与历史价格查询系统,能够自动抓取京东和淘宝商品信息,存储历史价格数据,并通过可视化界面展示价格走势。系统采用最新的异步爬虫技术、反爬虫绕过策略和现代Web框架,实现了高效稳定的数据采集与展示功能。关键词:Python爬虫、价格监控、历史价格、数据可视化、异步爬虫、电商平台实现了京东和淘宝商品信息的异步爬取,采用多种反爬虫策略提高爬取成功率;

2201_76125261的博客 682

图像频率域滤波详解

本文系统介绍了频率域图像滤波的原理与应用。通过傅里叶变换将图像转换到频率域后,可以直观地分析其频率成分并实现高效的滤波操作。重点阐述了低通滤波(模糊)和高通滤波(锐化)的数学原理与实现方法,特别是高斯滤波器的双重特性及其参数调节技巧。文章提供了完整的Python实现代码,并对比了不同滤波器的效果差异,最后总结了频率域滤波的最佳实践和适用场景。频率域视角为图像处理提供了强大的分析工具,使模糊、锐化等操作变得直观高效。

Dfreedom.的博客 987

基于STM32设计的智能门锁(微信小程序+手机APP等多种方式开锁)(188)

当前智能门锁项目是基于STM32微控制器、ESP8266-WIFI模块、OLED显示屏、指纹模块、蓝牙模块、门禁刷卡模块、烟雾检测模块、火光检测模块、温湿度检测模块等硬件设备开发的一种智能门锁系统

1万+

基于深度学习 YOLOv11 的快递包裹检测系统(Python + PySide6 界面 + 训练代码)

成为亟需优化的重要环节。随着电子商务的快速发展,物流行业面临着越来越大的压力,为了解决这些问题,我们提出了一种。目标检测算法,实现快递包裹的。的界面,供用户进行实时监控。本项目的主要目标是利用。

斌擎科技 763

《数字图像处理》第四章 频率域滤波简要学习笔记以及频率域滤波与空间域滤波的区别

频率域滤波基于傅里叶变换,将图像从空间域(像素位置)转换到频率域(频率分量)。在频率域中,低频分量对应图像中灰度变化缓慢的区域(如背景),高频分量对应灰度剧烈变化的区域(如边缘和噪声)。这种转换使得滤波操作可以通过调整不同频率分量的幅值来实现,例如抑制噪声(高频)或模糊图像(低频)。

懒人的技术笔记 2914

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

平滑的频率域滤波器

文章目录4.3 平滑的频率域滤波器理想低通滤波器巴特沃思低通滤波器高斯低通滤波器4.4 频率域锐化滤波器 4.3 平滑的频率域滤波器 边缘和其他尖锐变化(如噪声)在图像的灰度级中主要处于傅立叶变换的高频部分。因此,平滑(模糊)可以通过衰减指定图像傅立叶变换中高频成分的范围来实现。 G(u,v)=H(u,v)F(u,v)G(u,v) = H(u,v)F(u,v)G(u,v)=H(u,v)F(u,v...

圣托里尼的日落啊~的博客 957

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

有关于图像频率域和滤波的总结

前段时间看了很多的概念和知识,发现因为是走马观花的过了一遍,所以看得稀里糊涂的,然后许多地方混淆了概念,特别是关于图像频率域的部分的理解(包括图像频率域滤波之类的),所以下面总结一下这段时间重新看《数字图像处理》(电子工业出版社,Matlab本科教学版)第三章重新收获的关于频率域的理解。 首先,我们要明确的概念是空间域和频率域,我们通过imread函数得到的一幅图像(基本上也是我们平时说的图像)

CODE and POEM 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 图像傅里叶变换(二维离散傅里叶变换)
下一篇: 算法设计模式之动态规划
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值