《精通Matlab数字图像处理与识别》一6.4 频域滤波基础

简介:

本节书摘来自异步社区《精通Matlab数字图像处理与识别》一书中的第6章,第6.4节,作者 张铮 , 倪红霞 , 苑春苗 , 杨立红,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.4 频域滤波基础

精通Matlab数字图像处理与识别

6.4.1 频域滤波与空域滤波的关系

傅立叶变换可以将图像从空域变换到频域,而傅立叶反变换则可以将图像的频谱逆变换为空域图像,即人可以直接识别的图像。这样一来,我们可以利用空域图像与频谱之间的对应关系,尝试将空域卷积滤波变换为频域滤波,而后再将频域滤波处理后的图像反变换回空间域,从而达到图像增强的目的。这样做的一个最主要的吸引力在于频域滤波的直观性特点,关于这一点稍后将进行详细的阐述。

根据著名的卷积定理:两个二维连续函数在空间域中的卷积可由其相应的两个傅立叶变换乘积的反变换而得到;反之,在频域中的卷积可由在空间域中乘积的傅立叶变换而得到,即

image

其中,F(u, v)和H(u, v)分别表示f(x, y)和h(x, y)的傅立叶变换,而符号<==>表示傅立叶变换对,即左侧的表达式可通过傅立叶正变换得到右侧的表达式,而右侧的表达式可通过傅立叶反变换得到左侧的表达式。

式(6-47)构成了整个频域滤波的基础,卷积的概念我们曾在第5章空间域滤波中讨论过,而式中的乘积实际上就是两个二维矩阵F(u, v)和H(u, v)对应元素之间的乘积。

6.4.2 频域滤波的基本步骤

根据式(6-47)进行频域滤波通常应遵循以下步骤。

(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)计算第(4)步计算结果的傅立叶反变换g(x, y)。

(6)取g(x, y)的实部作为最终滤波后的结果图像。

由上面的叙述易知,滤波能否取得理想结果的关键取决于频域滤波函数H(u, v)。我们常常称之为滤波器,或滤波器传递函数,因为它在滤波中抑制或滤除了频谱中某些频率的分量,而保留其他的一些频率不受影响。本书中我们只关心其值为实数的滤波器,这样滤波过程中H的每一个实数元素分别乘以F中对于位置的复数元素,从而使F中元素的实部和虚部等比例的变化,不会改变F的相位谱,这种滤波器也因此被称为“零相移”滤波器。这样,最终反变换回空域得到的滤波结果图像g(x, y)理论上也应当为实函数。然而由于计算舍入误差等原因,可能会带有非常小的虚部,通常将虚部直接忽略。

为了更为直观地理解频域滤波与空域滤波之间的对应关系,让我们先来看一个简单的例子。6.2节中曾指出了原点处的傅立叶变换F(0, 0)实际上是图像中全部像素的灰度之和。那么如果我们要从原图像f(x, y)得到一幅像素灰度和为0的空域图像g(x, y),就可以先将f(x, y)变换到频域F(u, v),而后令F(0, 0) = 0(在原点移动到中心的频谱中为F(M/2, N/2)),再反变换回去。这个滤波过程相当于计算F(u, v)和如下的H(u, v)之间的乘积。
image

上式中的H(u, v)对应于平移过的频谱,其原点位于(M/2, N/2)。显然,这里H(u, v)的作用就是将点F(M/2, N/2)置零,而其他位置的F(u, v)保持不变。有兴趣的读者可以自己尝试这个简单的频域滤波过程,反变换之后验证g(x, y)的所有像素灰度之和是否为0。我们将在6.4.2小节详细地探讨一些具有更高实用性的频域滤波器。

6.4.3 频域滤波的Matlab实现

为方便读者在Matlab中进行频域滤波,我们编写了imfreqfilt函数,其用法同空域滤波时使用的imfilter函数类似,调用时需要提供原始图像和与原图像等大的频域滤波器作为参数,函数的输出为经过滤波处理又反变换回空域之后的图像。

注意

通常使用fftshift函数将频谱原点移至图像中心,因此需要构造对应的原点在中心的滤波器,并在滤波之后使用ifftshift函数将原点移回以进行反变换。
频域滤波算法imfreqfilt的完整实现如下,该算法被封装在金羽图书论坛(http://bbs.book95.com)的“金羽图书与答疑”板块与本书同名的主题帖子附件的“chapter6/code”目录下的imfreqfilt.m文件中。

function out = imfreqfilt(I, ff)
% imfreqfilt函数        对灰度图像进行频域滤波
% 参数I                输入的空域图像
% 参数ff                应用的与原图像等大的频域滤镜

if (ndims(I)==3) && (size(I,3)==3)   % RGB图像
    I = rgb2gray(I);
end

if (size(I) ~= size(ff))
    msg1 = sprintf('%s: 滤镜与原图像不等大,检查输入', mfilename);
    msg2 = sprintf('%s: 滤波操作已经取消', mfilename);
    eid = sprintf('Images:%s:ImageSizeNotEqual',mfilename);
    error(eid,'%s %s',msg1,msg2);
end

% 快速傅立叶变换
f = fft2(double(I));

% 移动原点
s = fftshift(f);

% 应用滤镜及反变换
out = s .* ff; %对应元素相乘实现频域滤波
out = ifftshift(out);
out = ifft2(out);

% 求模值
out = abs(out);

% 归一化以便显示
out = out/max(out(:));
相关文章
|
4月前
|
机器学习/深度学习 数据采集 监控
基于CNN卷积神经网络的步态识别matlab仿真,数据库采用CASIA库
**核心程序**: 完整版代码附中文注释,确保清晰理解。 **理论概述**: 利用CNN从视频中学习步态时空特征。 **系统框架**: 1. 数据预处理 2. CNN特征提取 3. 构建CNN模型 4. 训练与优化 5. 识别测试 **CNN原理**: 卷积、池化、激活功能强大特征学习。 **CASIA数据库**: 高质量数据集促进模型鲁棒性。 **结论**: CNN驱动的步态识别展现高精度,潜力巨大,适用于监控和安全领域。
|
4月前
|
算法
基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
本文介绍了一种使用卡尔曼滤波(Kalman Filter)对无人飞行器(UAV)在三维空间中的运动轨迹进行预测和估计的方法。该方法通过状态预测和观测更新两个关键步骤,实时估计UAV的位置和速度,进而生成三维轨迹。在MATLAB 2022a环境下验证了算法的有效性(参见附图)。核心程序实现了状态估计和误差协方差矩阵的更新,并通过调整参数优化滤波效果。该算法有助于提高轨迹跟踪精度和稳定性,适用于多种应用场景,例如航拍和物流运输等领域。
177 12
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于CNN卷积神经网络的MQAM调制识别matlab仿真
**理论**: 利用CNN自动识别MQAM调制信号,通过学习星座图特征区分16QAM, 64QAM等。CNN从原始数据提取高级特征,优于传统方法。 - **CNN结构**: 自动特征学习机制,适配多种MQAM类型。 - **优化**: 损失函数指导网络参数调整,提升识别准确度。 - **流程**: 大量样本训练+独立测试评估,确保模型泛化能力。 - **展望**: CNN强化无线通信信号处理,未来应用前景广阔。
|
4月前
|
机器学习/深度学习 算法 BI
基于深度学习网络的USB摄像头实时视频采集与手势检测识别matlab仿真
**摘要:** 本文介绍了使用MATLAB2022a实现的基于GoogLeNet的USB摄像头手势识别系统。系统通过摄像头捕获视频,利用深度学习的卷积神经网络进行手势检测与识别。GoogLeNet网络的Inception模块优化了计算效率,避免过拟合。手势检测涉及RPN生成候选框,送入网络进行分类。系统架构包括视频采集、手势检测与识别、以及决策反馈。通过GPU加速和模型优化保证实时性能,应用于智能家居等场景。
基于高通滤波器的ECG信号滤波及心率统计matlab仿真
**摘要:** 使用MATLAB2022a,实施高通滤波对ECG信号预处理,消除基线漂移,随后分析心率。系统仿真展示效果,核心代码涉及IIR HPF设计,如二阶滤波器的差分方程。通过滤波后的信号,检测R波计算RR间期,从而得到心率。滤波与R波检测是心电生理研究的关键步骤,平衡滤波性能与计算资源是设计挑战。
|
5月前
|
机器学习/深度学习 算法 数据可视化
基于googlenet深度学习网络的睁眼闭眼识别算法matlab仿真
**算法预览图展示睁眼闭眼识别效果;使用Matlab2022a,基于GoogLeNet的CNN模型,对图像进行分类预测并可视化。核心代码包括图像分类及随机样本显示。理论概述中,GoogLeNet以高效Inception模块实现眼部状态的深度学习识别,确保准确性与计算效率。附带三张相关图像。**
|
6月前
|
机器学习/深度学习 算法 数据可视化
基于深度学习网络的鞋子种类识别matlab仿真
使用GoogLeNet深度学习模型在matlab2022a中进行鞋子种类识别,利用Inception模块捕捉多尺度特征,提升分类精度。程序加载预训练模型`gnet.mat`,计算验证集的准确性并随机显示32个样本的预测结果及置信度。
|
6月前
|
算法 数据安全/隐私保护
matlab程序,傅里叶变换,频域数据,补零与不补零傅里叶变换
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
6月前
|
数据安全/隐私保护
matlab 曲线光滑,去毛刺,去离群值,数据滤波,高通滤波,低通滤波,带通滤波,带阻滤波
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
6月前
|
数据安全/隐私保护
时域与频域数据互相转换,傅里叶变换与逆傅里叶变换,matlab程序,时域转频域
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度

热门文章

最新文章