🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

📊 核心概念对比:空间域 vs 频率域

🔬 傅里叶变换:从空间到频率的桥梁

核心思想

关键输出:频谱图

在图像处理中的计算步骤

🎛️ 频率域滤波:修改图像的“配方”

1. 低通滤波

2. 高通滤波

3. 带通与带阻滤波

🛠️ 频率域滤波 vs 空间域滤波

💻 实践示例:使用Python进行频率域滤波

🎯 典型应用场景

💡 关键要点与注意事项


img

好的,这是一个非常核心的图像处理概念。简单来说,傅里叶变换是将图像从“空间域”(我们看到的样子)转换到“频率域”的数学工具,而频率域滤波则是在这个频率域中,通过增强或抑制特定频率成分来修改图像特性的技术。

下面我将为你详细解析这两个概念及其应用。

📊 核心概念对比:空间域 vs 频率域

维度

空间域

频率域

视角

像素的排列和灰度值

图像中不同频率“波”的组成和强度

横坐标

像素位置 (x, y)

频率 (u, v)

纵坐标

像素的灰度/颜色强度

该频率成分的幅度和相位

操作

直接对像素值进行卷积等运算

修改频率成分(滤波)后,再转换回空间域

直观理解

我们看到图像本身

图像的“配方”或“组成成分表”

🔬 傅里叶变换:从空间到频率的桥梁

核心思想

任何复杂的图像(信号)都可以分解为一系列不同频率幅度相位的正弦波(或余弦波)的叠加。

  • 低频成分:对应图像中灰度变化缓慢的区域,如大面积的天空、墙面,决定了图像的整体轮廓和背景。

  • 高频成分:对应图像中灰度剧烈变化的区域,如边缘、纹理、细节、噪声。

关键输出:频谱图

对图像进行二维傅里叶变换后,会得到一个复数数组。我们通常将其可视化为一幅频谱图

  • 中心:代表最低频率(DC分量,即图像的平均亮度)。

  • 远离中心:代表越高频率的成分。

  • 亮度:该频率成分的幅度(强度)。

频谱图示例

空间域图像(如一个矩形) → 傅里叶变换 → 频率域频谱(十字形亮线)

在图像处理中的计算步骤

  1. 将图像转换为浮点类型。

  2. 应用傅里叶变换(如 np.fft.fft2)。

  3. 将零频率分量移到频谱中心(np.fft.fftshift)。

  4. 计算幅度谱(np.abs)并进行对数缩放以便显示。

  5. 进行滤波操作(在频率域乘法)。

  6. 将零频率分量移回角落,并进行逆傅里叶变换(np.fft.ifft2)。

  7. 取实部并转换回图像格式。

🎛️ 频率域滤波:修改图像的“配方”

滤波的核心是在频率域,用一个滤波器函数 H(u, v)​ 乘以图像的傅里叶变换 F(u, v),即 G(u, v) = H(u, v) × F(u, v),然后再变回空间域。

1. 低通滤波

目的:允许低频通过,抑制高频。用于平滑图像、去噪、模糊

效果:图像变模糊,细节和边缘被削弱。

常见滤波器

  • 理想低通滤波器:在频率域画一个圆,圆内通过(1),圆外截止(0)。会产生“振铃效应”。

  • 巴特沃斯低通滤波器:过渡平滑,无振铃效应,更常用。其公式为:H(u, v) = 1 / [1 + (D(u, v)/D0)^(2n)],其中 D0是截止频率,n是阶数。

  • 高斯低通滤波器:具有高斯分布形状,过渡最平滑。公式为:H(u, v) = e^(-D^2(u, v) / (2 * D0^2))

2. 高通滤波

目的:允许高频通过,抑制低频。用于锐化图像、增强边缘

效果:突出边缘和细节,但背景(低频)变暗。

常见滤波器

  • 理想高通滤波器:与理想低通相反。

  • 巴特沃斯高通滤波器H(u, v) = 1 / [1 + (D0/D(u, v))^(2n)]

  • 高斯高通滤波器H(u, v) = 1 - e^(-D^2(u, v) / (2 * D0^2))

3. 带通与带阻滤波

  • 带通滤波:只允许特定频率范围内的成分通过。可用于提取特定纹理

  • 带阻滤波:阻止特定频率范围内的成分通过。最典型的应用是去除周期性噪声(如扫描图像中的摩尔纹、传感器噪声)。

🛠️ 频率域滤波 vs 空间域滤波

特性

频率域滤波

空间域滤波(卷积)

原理

修改频率成分

邻域像素加权平均

计算效率

对于大核滤波器更高效(FFT算法)

对于小核滤波器更直接、快速

直观性

从全局频率角度理解操作

从局部像素角度理解操作

设计灵活性

易于设计任意形状的滤波器

核的设计受限于小尺寸

典型应用

去除周期性噪声、精确频率选择

日常模糊、锐化、边缘检测

重要关系:根据卷积定理,空间域的卷积运算等价于频率域的乘法运算。这意味着一个大的空间卷积核(如 50x50 的高斯模糊)在频率域中执行会快得多。

💻 实践示例:使用Python进行频率域滤波

import cv2
import numpy as np
import matplotlib.pyplot as plt

def frequency_domain_filtering(image_path, filter_type='lowpass', D0=30, n=2):
    # 1. 读取图像并转换为灰度图
    img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
    
    # 2. 傅里叶变换并移到中心
    dft = np.fft.fft2(img)
    dft_shift = np.fft.fftshift(dft)
    magnitude_spectrum = 20 * np.log(np.abs(dft_shift) + 1) # 幅度谱(用于显示)
    
    # 3. 创建滤波器
    rows, cols = img.shape
    crow, ccol = rows // 2, cols // 2
    u, v = np.meshgrid(np.arange(cols) - ccol, np.arange(rows) - crow)
    D = np.sqrt(u**2 + v**2)  # 到中心的距离
    
    if filter_type == 'lowpass':
        # 巴特沃斯低通滤波器
        H = 1 / (1 + (D / D0)**(2*n))
    elif filter_type == 'highpass':
        # 巴特沃斯高通滤波器
        H = 1 / (1 + (D0 / D)**(2*n))
    elif filter_type == 'bandstop':
        # 带阻滤波器(去除特定频率环)
        W = 10  # 带宽
        H = 1 / (1 + ((D*W) / (D**2 - D0**2 + 1e-6))**(2*n))
    else:
        H = np.ones((rows, cols))
    
    # 4. 应用滤波器
    filtered_dft_shift = dft_shift * H
    
    # 5. 逆变换回空间域
    filtered_dft = np.fft.ifftshift(filtered_dft_shift)
    img_back = np.fft.ifft2(filtered_dft)
    img_back = np.abs(img_back).astype(np.uint8)
    
    # 6. 显示结果
    plt.figure(figsize=(12, 8))
    plt.subplot(2, 3, 1), plt.imshow(img, cmap='gray'), plt.title('原始图像')
    plt.subplot(2, 3, 2), plt.imshow(magnitude_spectrum, cmap='gray'), plt.title('幅度谱')
    plt.subplot(2, 3, 3), plt.imshow(H, cmap='gray'), plt.title('滤波器 (频率域)')
    plt.subplot(2, 3, 4), plt.imshow(img_back, cmap='gray'), plt.title('滤波后图像')
    
    # 显示滤波后的频谱
    filtered_magnitude = 20 * np.log(np.abs(filtered_dft_shift) + 1)
    plt.subplot(2, 3, 5), plt.imshow(filtered_magnitude, cmap='gray'), plt.title('滤波后频谱')
    
    plt.tight_layout()
    plt.show()
    
    return img_back

# 使用示例
# filtered_image = frequency_domain_filtering('input.jpg', filter_type='lowpass', D0=30)

🎯 典型应用场景

  1. 图像去噪

    • 高斯/周期噪声:使用低通滤波器非常有效。

    • 周期性条纹噪声:使用带阻滤波器,在频谱图上找到对应的亮线(噪声频率)并将其抑制。

  2. 图像锐化与边缘增强

    • 使用高通滤波器突出边缘。但注意,单纯高通滤波会使背景变暗,常与原始图像叠加(高频增强滤波)。

  3. 纹理分析与分割

    • 不同纹理具有不同的频率特征。通过带通滤波器可以分离出特定纹理区域。

  4. 图像压缩(如JPEG)

    • JPEG压缩的核心是将图像分块后进行离散余弦变换(DCT,一种实数的傅里叶变换),然后舍弃高频系数(人眼不敏感)来实现压缩。

  5. 图像融合与混合

    • 将两幅图像的低频部分和高频部分分别融合,可以得到自然过渡的混合效果。

💡 关键要点与注意事项

  1. 为什么选择频率域?

    • 全局性操作:可以一次性处理整个图像的特定频率成分。

    • 物理意义明确:噪声、边缘、纹理往往对应特定的频率范围。

    • 计算优势:对于大尺寸滤波器,通过FFT计算比空间卷积更快。

  2. 振铃效应

    • 使用“理想”滤波器(锐利截止)会在空间域产生振铃伪影(图像边缘出现波纹)。

    • 解决方案:使用过渡平滑的滤波器(如巴特沃斯、高斯型)。

  3. 相位的重要性

    • 图像的傅里叶变换包含幅度谱相位谱

    • 幅度谱决定图像中有哪些频率成分。

    • 相位谱决定这些频率成分在空间中的位置。相位信息对图像结构至关重要,丢弃相位信息会导致图像无法识别。

  4. 边界效应

    • 傅里叶变换默认图像是周期性的。图像左右/上下边界的不连续会在频谱中引入额外的高频分量。

    • 解决方法:在变换前对图像进行窗函数处理(如汉宁窗)或镜像填充

总结:傅里叶变换为我们提供了观察和处理图像的另一个强大维度——频率域。频率域滤波让我们能够从“成分”的角度精准地操控图像,无论是平滑、锐化,还是去除特定噪声,都变得直观而高效。它是现代图像处理、压缩、分析不可或缺的基石工具。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐