6.2 频率域滤波之高通滤波

数字图像处理第四章频率域滤波(低通滤波器、高通滤波器、拉普拉斯滤波、同态滤波器) 本章节的主要内容具体包括:傅里叶变换的概念及处理的相关知识、频率域卷积概念、三种低通滤波器的原理及代码实现、三种高通滤波器的原理及代码实现、频率域拉普拉斯算法原理及实现、同态滤波器原理及代码实现。 4.1傅里叶变换原理 1、傅里叶变换 概念: 法国数学家傅里叶指出:任何周期函数都可以表示为不同频率的正弦和或余弦和的形式,每个正弦和或者余弦和乘以不同的系数(这个正弦和或余弦和就是傅里叶级数)。 非周期函数也可以用正弦或者余弦乘以加权函数的积分来表示。这种情况下就是傅里叶变换。。DFT指的是单变量的离散傅里叶变 阅读详情

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

上一章我们讲到频率低通滤波,简而言之就是让图像的低频信号通过,过滤或者衰减高频信号。频率高通滤波刚好相反,让图像的高频信号通过,过滤或者衰减低频信号。


1. 理论基础

由于频率域低通滤波域高通滤波的原理一样,知识滤波器不同,因此原理部分此处不做讲解,各位可以查看上一章的内容
在这里插入图片描述
从上图可以看出频率域高通滤波器的传递函数都是基于对应的低通滤波器传递函数推导出来的。各位可以对下面的两幅图片进行对比分析:

频率域低通滤波器
频率域高通滤波器

2. 示例分析

2.1 示例代码

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


def genIdealHighpassFilters(D0, shape):
    """
    Generate an ideal high pass filter
    Those inside the circle are marked 1 and those outside are marker 0.
    :param D0: The radius of the circle.
    :param shape: The shape of the mask (the mask is also an image)
    :return:
    """
    mask = np.ones(shape, np.uint8)

    center = np.array([shape[0] // 2, shape[1] // 2])
    for i in range(shape[0]):
        for j in range(shape[1]):
            point = np.array([i, j])
            distance = np.linalg.norm(point - center)
            if distance <= D0:
                # print(distance, radius)
                mask[i][j] = 0

    return mask


def genGaussianHighpassFilters(sigma, shape):
    """
    Generate a gaussian high pass filter
    :param sigma: The standard deviation of the gaussian filter.
    :param shape: The shape of the mask (the mask is also an image)
    :return: Returns a gaussian high pass filter.
    """

    mask = np.ones(shape, np.float32)
    rows, cols = shape[0], shape[1]
    center_x, center_y = rows // 2, cols // 2
    for i in range(rows):
        for j in range(cols):
            distance = (i - center_x) ** 2 + (j - center_y) ** 2
            mask[i][j] = 1 - np.exp(-distance / (2 * sigma ** 2))
    return mask


def genButterworthHighpassFilters(n, D0, shape):
    """
    Generate a butterworth high pass filter
    :param n: The param of the transfer function
    :param D0: The cut-off frequency of the low pass filter
    :param shape: image shape
    :return: A butterworth high pass filter
    """
    mask = np.ones(shape, np.float32)
    rows, cols = shape[0], shape[1]
    center_x, center_y = rows // 2, cols // 2
    epsilon = 1e-5  # 添加一个小值以避免除以零
    for i in range(rows):
        for j in range(cols):
            distance = np.sqrt((i - center_x) ** 2 + (j - center_y) ** 2) + epsilon
            # mask[i, j] = 1 / (1 + (distance / D0) ** (2 * n))  This is low pass
            mask[i, j] = 1 / (1 + (D0 / distance) ** (2 * n))
    return mask


def imageSmoothing(image, mask):
    """
     Image smoothing in the frequency domain using low pass filters.
    :param image: raw image
    :param mask: the high pass filters.
    :return: smoothed image
    """

    # 对原图像进行傅里叶变换,生成频谱图
    dft = cv.dft(np.float32(image), flags=cv.DFT_COMPLEX_OUTPUT)

    # 将频谱图上的低频移至中心
    f_shift = np.fft.fftshift(dft)

    # 将滤波器与傅里叶变化后的图像相乘,保留四周部分,即保留低频部分
    f = f_shift * mask

    # 将低频从中心移回原处
    i_shift = np.fft.ifftshift(f)

    # 进行计算傅里叶逆变换,将频谱图还原回空间域图像
    dst = cv.idft(i_shift)

    # 计算还原图像的幅度,并进行归一化处理
    dst = cv.magnitude(dst[:, :, 0], dst[:, :, 1])

    return dst


if __name__ == '__main__':
    img = cv.imread('Image/Fig0601.tif', 0)

    # 生成低频滤波器
    D0_1 = 60
    D0_2 = 160

    mask1 = genIdealHighpassFilters(D0_1, (img.shape[0], img.shape[1], 2))
    img1 = imageSmoothing(img, mask1)

    mask2 = genGaussianHighpassFilters(D0_1, (img.shape[0], img.shape[1], 2))
    img2 = imageSmoothing(img, mask2)

    mask3 = genButterworthHighpassFilters(1, D0_1, (img.shape[0], img.shape[1], 2))
    img3 = imageSmoothing(img, mask3)

    mask4 = genIdealHighpassFilters(D0_2, (img.shape[0], img.shape[1], 2))
    img4 = imageSmoothing(img, mask4)

    mask5 = genGaussianHighpassFilters(D0_2, (img.shape[0], img.shape[1], 2))
    img5 = imageSmoothing(img, mask5)

    mask6 = genButterworthHighpassFilters(1, D0_2, (img.shape[0], img.shape[1], 2))
    img6 = imageSmoothing(img, mask6)

    # 图像显示
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['font.size'] = 30
    plt.figure(figsize=(30, 20))
    imagesLst = [img1, img2, img3, img4, img5, img6]
    labelLst = ["Ideal D0 = 60", "Gaussian D0 = 60", "Butterworth D0 = 60"
        , "Ideal D0 = 160", "Gaussian D0 = 160", "Butterworth D0 = 160"]

    for i in range(6):
        plt.subplot(2, 3, i + 1), plt.title(labelLst[i]), plt.axis('off')
        plt.imshow(imagesLst[i], cmap='gray')
    plt.tight_layout()
    plt.savefig("Image/tmp.png")
    plt.show()

2.2 示例效果分析

在这里插入图片描述
分析上图可得:

  • 如上图中的(图1)所示:理想高通滤波器产生了严重的失真,这些失真是由振铃效应导致的,相比之下(图2)和(图3)都没有这样的失真。
  • 当 D 0 = 60 D_0=60 D0​=60 时(第一行),滤波器去除或衰减了约 95 % 95\% 95% 的图像能量,留下的 5 % 5\% 5% 大部分都是边缘信息和其它急剧过度。
  • 当 D 0 = 160 D_0=160 D0​=160时(第二行),图像剩余的能量仅为第一行的一般,约 2.5 % 2.5\% 2.5% 然而细节上的差别却非常惊人,例如字母 a a a 的边界非常干净,特别是 G H P F GHPF GHPF 和 B H P F BHPF BHPF滤波。
图像处理之高通滤波及低通滤波 本文需要用到傅里叶变换的知识,如果还不了解,请点击这里 频域滤波的基本过程 如果想对图像进行滤波的话,基本的步骤如下: 使用(−1)x+y(-1)^{x+y}(−1)x+y乘以原来的图像,其中x、yx、yx、y是原图像的像素点的坐标。 对第一步得到的数据的进行离散傅里叶变换F(u,v)F(u,v)F(u,v) 使用某个滤波器H(u,v)乘以第三步得到的F(u,v)F(u,v)F(u,v) 对第三... 阅读详情

相关推荐

数字图像处理-频率域滤波原理

频率域滤波,傅立叶变换

forrest02的博客 1万+

OpenCV 笔记(36):频域高通滤波——理想高通滤波器

1. 频域高通滤波频域高通滤波是一种数字图像处理技术,通过在频域中对图像进行处理增强图像的高频成分,从而达到锐化图像边缘和细节的目的。高频成分: 图像中的高频成分对应着图像的边缘、纹理等细节信息。低频成分: 图像中的低频成分对应着图像的平滑区域。1.1 频域高通滤波和空域高通滤波频域高通滤波和空域高通滤波都是为了增强图像的边缘和细节,但它们在工作原理、实现方式、滤波效果等很多地方有所不同。处理域...

Java与Android技术栈 2136

数字图像处理学习笔记5:频率域滤波1(傅里叶频谱图,低通滤波-平滑,高通滤波-锐化)

文章目录前言一、傅里叶变换:傅里叶频谱图二、使用步骤1.引入库2.读入数据总结 前言 频率域滤波步骤: 一、傅里叶变换:傅里叶频谱图 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings('ignore') import ssl ssl._c.

刘燚的博客 1万+

MATLAB实现高通滤波(附完整代码)

MATLAB实现高通滤波(附完整代码)

corn1949的博客 1万+

【数字图像处理2.1 】频率域中的 高通滤波 和 低通滤波 Python+Opencv+Numpy

前言 1、图像的高频信息往往是细节+噪声 2、中频信息一般是图像的框架信息 3、低频信息数量最多,是图形的主体 所以,高通滤波器,只通过高频信息,所以留下来的图像只有边缘等细节信息,看起来像简笔画。 低通滤波器同理。 效果图 代码 import numpy as np import matplotlib.pyplot as plt import cv2 ################################################################### #########

火火的博客 4600

频率域滤波

之前介绍了关于空间域滤波的一些操作,主要目的是减少噪声和平滑图像,空间域的处理方法都是在已知噪声数据类型基础上进行噪声过滤的,而在某些噪声图像类别上上述方法就显得十分渺小了,频率域的引入就是来寻找噪声的类型,并进行空间过滤的。其中频率是单位时间变化期间,一个周期函数重复相同值序列的次数。频率域滤波(即波数)为图像像元的灰度值随着位置变化的空间频率,以频谱表示信息分布特征,可以将一幅图像像元值在空间...

shushi6969的博客 6711

高通滤波代码

%高通滤波 I=imread('lv.jpg'); I=rgb2gray(I); [f1,f2]=freqspace(size(I),'meshgrid');  %分割频率空间 Hd=ones(size(I)); r=sqrt(f1.^2+f2.^2);   %计算到原点的r Hd(r Y=fft2(I); Y=fftshift(Y); Ya=Y.*Hd; Ya=ifftshi

jialeheyeshu的博客 1918

Python3+OpenCV(八):频率域滤波增强

1、频率域平滑滤波器(1) 理想低通滤波器(ILPF)(2) Butterworth低通滤波器(BLPF)(3) 高斯低通滤波器(GLPF)(常用)2、频率域锐化滤波器(1) 理想高通滤波器(IHPF)(2) Butterworth高通滤波器(BHPF)(3) 高斯高通滤波器(GHPF)3、Python实现 频域滤波增强的一般方法 1.对原始原图像f(x,y)进行傅里叶变换得到F(u,v) 2.将F(u,v)与滤波函数H(u,v)进行卷积运算得到G(u,v) 3.将G(u,v)进行傅里叶逆变换得到增强..

Seven_WWW的博客 4708

OpenCV —— 频率域滤波(傅里叶变换,低通和高通滤波,带通和带阻滤波,同态滤波)

频率域滤波基本概念傅里叶变换二维离散的傅里叶变换快速傅里叶变换傅里叶幅度谱与相位谱谱残差显著性检测卷积与傅里叶变换的频率域滤波低通滤波和高通滤波带通和带阻滤波同态滤波 基本概念 频率域滤波 —— 百度百科 频率域滤波是对图像进行傅里叶变换,将图像由图像空间转换到频域空间,然后在频率域中对图像的频谱作分析处理,以改变图像的频率特征。 滤波: 狭义地说,滤波是指改变信号中各个频率分量的相对大小、或者分离出来加以抑制、甚至全部滤除某些频率分量的过程。广义地说,滤波是把某种信号处理成为另一种信号的过程。空间域滤波

学无止境 1万+

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

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

cyf15238622067的博客 4659

频率域滤波步骤小结

频率域滤波步骤小结 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

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

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

ShaneHolmes 1万+

图像算法四:【图像增强--频率域】傅里叶变换、快速傅里叶变换、频域滤波、频域低通滤波、频域高通滤波

        频率域滤波与空间域滤波殊途同归,空间域图像增强与频率域图像增强是两种截然不同的技术,实际上在相当程度上说它们是在不同的领域做相同的事情,只是有些滤波更适合在空间域完成,而有些则更适合在频率域中完成。 本章的知识点快速查看: 傅里叶变换; 快速傅里叶变换; 频域滤波; 频域低通滤波; 频域高通滤波; 傅里叶变换     一说到傅里叶,这可是贯穿我们从高中数学1到大...

发现问题,解决问题。 3710

【OpenCV 例程200篇】85. 频率域高通滤波器的应用

图像边缘化其它灰度的急剧变化与高频分量有关,因此可以在频率域通过高通滤波实现图像锐化。高通滤波衰减傅里叶变换中的低频分量而不干扰高频信息。 简单地,在频率域中用 1 减去低通滤波器的传递函数,就可以得到相应的高通滤波器传递函数。 例程 8.24 频率域高通滤波器的应用

youcans的博客 3238

(数字图像处理MATLAB+Python)第七章图像锐化-第四节:频域高通滤波与综合案例

尽可能地使皮肤变得平滑、白皙。采用所学基础处理方法实现题目要求。:将双边滤波后的图像提取肤色区域,原图提取背景区域,两图融合。:p采用拉普拉斯算子锐化,锐化力度降为1/3。

快乐江湖的博客 4617

机器人手眼标定快速精度验证方法

机器人手眼标定快速精度验证方法

laoli_的博客 1万+

第四章:频率域滤波

任何周期函数都可以表示为不同频率的正弦和或余弦和的形式,每个正弦和/或余弦和乘以不同的系数(现在称这个和为傅里叶级数)。非周期的函数(曲线是有限的情况)也可以用正弦/或余弦乘以加权函数的积分来表示。在这种情况下的公式就是傅里叶变换。单变量连续函数fx)的傅里叶变换F(u)定义为等式:反变换定义为单变量离散函数f(r)(其中x=0,1,2...,m-1)的傅里叶变换由以下等式给出:同样。给出F(u),能用反DFT来获得。

qq_63029071的博客 1183

【WILEY】wiley期刊投稿详解:从revision到Accepted全流程实例讲解

注意:包括没标注修改位置的word文件和标注了修改位置的word文件。

Everyday try to become better -Kobe Bryant 1万+

【图像处理:频率域平滑与锐化】理想滤波器,巴特沃思滤波器,高斯滤波器

理想滤波器、巴特沃斯滤波器、高斯滤波器

weixin_48846514的博客 9009

开发者的避坑指南:在Apple Silicon Mac上构建RocketMQ Python客户端的完整心路历程

本文详细记录了在Apple Silicon Mac上构建RocketMQ Python客户端的完整过程,重点解决了架构兼容性问题。通过源码编译rocketmq-client-cpp库,修复构建脚本和CMake配置,最终成功在M2芯片MacBook Pro上部署RocketMQ Python客户端,为开发者提供了实用的避坑指南。

Pepper的专栏 696

VM与欧姆龙PLC通讯设置实战:Fins TCP/UDP协议详解

本文详细解析了VM(VisionMaster)与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战设置。内容涵盖网络配置、协议选择(TCP可靠性与UDP实时性)、VM端地址映射与数据点添加、以及数据接收解析流程,并提供了常见错误排查与高级调试技巧,帮助视觉与自动化工程师快速实现稳定可靠的工业通讯集成。

weixin_29172963的博客 326

数字图像处理——第四章 频率域滤波

本章主要学习了空间域与频率域的概念、傅里叶级数、二维傅里叶变换的正反变换等核心内容。进一步探讨了频域滤波中的低通滤波与高通滤波方法,并结合图像锐化处理,深入理解图像的平滑、去噪、锐化与边缘增强等操作。通过本章的学习,为后续图像处理技术的掌握奠定了坚实的理论基础。

2501_92757786的博客 2497

基于STM32、HAL库、I2C接口的姿态传感器/陀螺仪之ICM-42670-P驱动 C语言程序设计

/ 设置加速度计和陀螺仪的工作模式。// 读取加速度计和陀螺仪数据。

corlin6688的博客 1179
上一篇: 6.1 频率域滤波之低通滤波
下一篇: 7.1 图像复原之图像的噪声
Four o'clock
博客等级 码龄8年 305粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值