展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 图像处理 > 编程开发 > Python图像处理:频域滤波的噪声降低和图像增强技术

Python图像处理:频域滤波的噪声降低和图像增强技术

图像处理已经成为我们日常生活中不可或缺的一部分,涉及到社交媒体和医学成像等各个领域。通过数码相机或卫星照片和医学扫描等其他来源获得的图像可能需要预处理以消除或增强噪声。频域滤波是一种可行的解决方案,它可以在增强图像锐化的同时消除噪声。快速傅里叶变换(FFT)是一种将图像从空间域变换到频率域的数学技术,是图像处理中进行频率变换的关键工具。通过利用图像的频域表示,我们可以根据图像的频率内容有效地分析图像,从而简化滤波程序的应用以消除噪声。本文将讨论图像从FFT到逆FFT的频率变换所涉及的各个阶段,并结合FFT

本文目录

    图像处理已经成为我们日常生活中不可或缺的一部分,涉及到社交媒体和医学成像等各个领域。通过数码相机或卫星照片和医学扫描等其他来源获得的图像可能需要预处理以消除或增强噪声。频域滤波是一种可行的解决方案,它可以在增强图像锐化的同时消除噪声。

    快速傅里叶变换(FFT)是一种将图像从空间域变换到频率域的数学技术,是图像处理中进行频率变换的关键工具。通过利用图像的频域表示,我们可以根据图像的频率内容有效地分析图像,从而简化滤波程序的应用以消除噪声。本文将讨论图像从FFT到逆FFT的频率变换所涉及的各个阶段,并结合FFT位移和逆FFT位移的使用。

    本文使用了三个Python库,即openCV、Numpy和Matplotlib。

    import cv2
     import numpy as np
     from matplotlib import pyplot as plt
     img = cv2.imread('sample.png',0) # Using 0 to read image in grayscale mode
     plt.imshow(img, cmap='gray')#cmap is used to specify imshow that the image is in greyscale
     plt.xticks([]), plt.yticks([])# remove tick marks
     plt.show()

    Python图像处理:频域滤波的噪声降低和图像增强技术

    1、快速傅里叶变换(FFT)

    快速傅里叶变换(FFT)是一种广泛应用的数学技术,它允许图像从空间域转换到频率域,是频率变换的基本组成部分。利用FFT分析,可以得到图像的周期性,并将其划分为不同的频率分量,生成图像频谱,显示每个图像各自频率成分的振幅和相位。

    f = np.fft.fft2(img)#the image 'img' is passed to np.fft.fft2() to compute its 2D Discrete Fourier transform f
     mag = 20*np.log(np.abs(f))
     plt.imshow(mag, cmap = 'gray') #cmap='gray' parameter to indicate that the image should be displayed in grayscale.
     plt.title('Magnitude Spectrum')
     plt.xticks([]), plt.yticks([])
     plt.show()

    Python图像处理:频域滤波的噪声降低和图像增强技术

    上面代码使用np.abs()计算傅里叶变换f的幅度,np.log()转换为对数刻度,然后乘以20得到以分贝为单位的幅度。这样做是为了使幅度谱更容易可视化和解释。

    2、FFT位移

    为了使滤波算法应用于图像,利用FFT移位将图像的零频率分量被移动到频谱的中心

    fshift = np.fft.fftshift(f)
     mag = 20*np.log(np.abs(fshift))
     plt.imshow(mag, cmap = 'gray')
     plt.title('Centered Spectrum'), plt.xticks([]), plt.yticks([])
     plt.show()

    Python图像处理:频域滤波的噪声降低和图像增强技术

    3、过滤

    频率变换的的一个目的是使用各种滤波算法来降低噪声和提高图像质量。两种最常用的图像锐化滤波器是Ideal high-pass filter 和Gaussian high-pass filter。这些滤波器都是使用的通过快速傅里叶变换(FFT)方法获得的图像的频域表示。

    Ideal high-pass filter(理想滤波器) 是一种无限长的、具有无限频带宽和理想通带和阻带响应的滤波器。其通带内所有频率的信号都被完全传递,而阻带内所有频率的信号则完全被抑制。

    在频域上,理想滤波器的幅频响应为:

    • 在通带内,幅频响应为 1
    • 在阻带内,幅频响应为 0

    在时域上,理想滤波器的冲激响应为:

    • 在通带内,冲激响应为一个无限长的单位冲激函数序列
    • 在阻带内,冲激响应为零

    由于理想滤波器在频域上具有无限带宽,因此它无法在实际应用中实现。实际中使用的数字滤波器通常是基于理想滤波器的逼近,所以才被成为只是一个Ideal。

    高斯高通滤波器(Gaussian high-pass filter)是一种在数字图像处理中常用的滤波器。它的作用是在图像中保留高频细节信息,并抑制低频信号。该滤波器基于高斯函数,具有光滑的频率响应,可以适应各种图像细节。

    高斯高通滤波器的频率响应可以表示为:

    H(u,v) = 1 - L(u,v)

    其中,L(u,v)是一个低通滤波器,它可以用高斯函数表示。通过将低通滤波器的响应从1中减去,可以得到一个高通滤波器的响应。在实际中,通常使用不同的参数设置来调整高斯函数,以达到不同的滤波效果。

    圆形掩膜(disk-shaped images)是用于定义在图像中进行傅里叶变换时要保留或抑制的频率分量。在这种情况下,理想滤波器通常是指理想的低通或高通滤波器,可以在频域上选择保留或抑制特定频率范围内的信号。将这个理想滤波器应用于图像的傅里叶变换后,再进行逆变换,可以得到经过滤波器处理后的图像。

    具体的细节我们就不介绍了,直接来看代码:

    下面函数是生成理想高通和低通滤波器的圆形掩膜

    import math
     def distance(point1,point2):
     return math.sqrt((point1[0]-point2[0])**2 + (point1[1]-point2[1])**2)
     
     def idealFilterLP(D0,imgShape):
     base = np.zeros(imgShape[:2])
     rows, cols = imgShape[:2]
     center = (rows/2,cols/2)
     for x in range(cols):
     for y in range(rows):
     if distance((y,x),center) < D0:
     base[y,x] = 1
     return base
     
     def idealFilterHP(D0,imgShape):
     base = np.ones(imgShape[:2])
     rows, cols = imgShape[:2]
     center = (rows/2,cols/2)
     for x in range(cols):
     for y in range(rows):
     if distance((y,x),center) < D0:
     base[y,x] = 0
     return base

    下面函数生成一个高斯高、低通滤波器与所需的圆形掩膜

    import math
     def distance(point1,point2):
     return math.sqrt((point1[0]-point2[0])**2 + (point1[1]-point2[1])**2)
     
     def gaussianLP(D0,imgShape):
     base = np.zeros(imgShape[:2])
     rows, cols = imgShape[:2]
     center = (rows/2,cols/2)
     for x in range(cols):
     for y in range(rows):
     base[y,x] = math.exp(((-distance((y,x),center)**2)/(2*(D0**2))))
     return base
     
     def gaussianHP(D0,imgShape):
     base = np.zeros(imgShape[:2])
     rows, cols = imgShape[:2]
     center = (rows/2,cols/2)
     for x in range(cols):
     for y in range(rows):
     base[y,x] = 1 - math.exp(((-distance((y,x),center)**2)/(2*(D0**2))))
     return base

    过滤示例

    fig, ax = plt.subplots(2, 2) # create a 2x2 grid of subplots
     fig.suptitle('Filters') # set the title for the entire figure
     
     # plot the first image in the top-left subplot
     im1 = ax[0, 0].imshow(np.abs(idealFilterLP(50, img.shape)), cmap='gray')
     ax[0, 0].set_title('Low Pass Filter of Diameter 50 px')
     ax[0, 0].set_xticks([])
     ax[0, 0].set_yticks([])
     
     # plot the second image in the top-right subplot
     im2 = ax[0, 1].imshow(np.abs(idealFilterHP(50, img.shape)), cmap='gray')
     ax[0, 1].set_title('High Pass Filter of Diameter 50 px')
     ax[0, 1].set_xticks([])
     ax[0, 1].set_yticks([])
     
     # plot the third image in the bottom-left subplot
     im3 = ax[1, 0].imshow(np.abs(gaussianLP(50 ,img.shape)), cmap='gray')
     ax[1, 0].set_title('Gaussian Filter of Diameter 50 px')
     ax[1, 0].set_xticks([])
     ax[1, 0].set_yticks([])
     
     # plot the fourth image in the bottom-right subplot
     im4 = ax[1, 1].imshow(np.abs(gaussianHP(50 ,img.shape)), cmap='gray')
     ax[1, 1].set_title('Gaussian Filter of Diameter 50 px')
     ax[1, 1].set_xticks([])
     ax[1, 1].set_yticks([])
     
     # adjust the spacing between subplots
     fig.subplots_adjust(wspace=0.5, hspace=0.5)
     
     # save the figure to a file
     fig.savefig('filters.png', bbox_inches='tight')

    Python图像处理:频域滤波的噪声降低和图像增强技术

    相乘过滤器和移位的图像得到过滤图像

    为了获得具有所需频率响应的最终滤波图像,关键是在频域中对移位后的图像与滤波器进行逐点乘法。

    这个过程将两个图像元素的对应像素相乘。例如,当应用低通滤波器时,我们将对移位的傅里叶变换图像与低通滤波器逐点相乘。

    此操作抑制高频并保留低频,对于高通滤波器反之亦然。这个乘法过程对于去除不需要的频率和增强所需的频率是必不可少的,从而产生更清晰和更清晰的图像。

    它使我们能够获得期望的频率响应,并在频域获得最终滤波图像。

    4、乘法滤波器(Multiplying Filter)和平移后的图像(Shifted Image)

    乘法滤波器是一种以像素值为权重的滤波器,它通过将滤波器的权重与图像的像素值相乘,来获得滤波后的像素值。具体地,假设乘法滤波器的权重为h(i,j),图像的像素值为f(m,n),那么滤波后的像素值g(x,y)可以表示为:

    g(x,y) = ∑∑ f(m,n)h(x-m,y-n)

    其中,∑∑表示对所有的(m,n)进行求和。

    平移后的图像是指将图像进行平移操作后的结果。平移操作通常是指将图像的像素沿着x轴和y轴方向进行平移。平移后的图像与原始图像具有相同的大小和分辨率,但它们的像素位置发生了变化。在滤波操作中,平移后的图像可以用于与滤波器进行卷积运算,以实现滤波操作。

    此操作抑制高频并保留低频,对于高通滤波器反之亦然。这个乘法过程对于去除不需要的频率和增强所需的频率是必不可少的,从而产生更清晰和更清晰的图像。

    它使我们能够获得期望的频率响应,并在频域获得最终滤波图像。

    fig, ax = plt.subplots()
     im = ax.imshow(np.log(1+np.abs(fftshifted_image * idealFilterLP(50,img.shape))), cmap='gray')
     ax.set_title('Filtered Image in Frequency Domain')
     ax.set_xticks([])
     ax.set_yticks([])
     
     fig.savefig('filtered image in freq domain.png', bbox_inches='tight')

    Python图像处理:频域滤波的噪声降低和图像增强技术

    在可视化傅里叶频谱时,使用np.log(1+np.abs(x))和20*np.log(np.abs(x))之间的选择是个人喜好的问题,可以取决于具体的应用程序。

    一般情况下会使用Np.log (1+np.abs(x)),因为它通过压缩数据的动态范围来帮助更清晰地可视化频谱。这是通过取数据绝对值的对数来实现的,并加上1以避免取零的对数。

    而20*np.log(np.abs(x))将数据按20倍缩放,并对数据的绝对值取对数,这可以更容易地看到不同频率之间较小的幅度差异。但是它不会像np.log(1+np.abs(x))那样压缩数据的动态范围。

    这两种方法都有各自的优点和缺点,最终取决于具体的应用程序和个人偏好。

    5、逆FFT位移

    在频域滤波后,我们需要将图像移回原始位置,然后应用逆FFT。为了实现这一点,需要使用逆FFT移位,它反转了前面执行的移位过程。

    fig, ax = plt.subplots()
     im = ax.imshow(np.log(1+np.abs(np.fft.ifftshift(fftshifted_image * idealFilterLP(50,img.shape)))), cmap='gray')
     ax.set_title('Filtered Image inverse fft shifted')
     ax.set_xticks([])
     ax.set_yticks([])
     
     fig.savefig('filtered image inverse fft shifted.png', bbox_inches='tight')

    Python图像处理:频域滤波的噪声降低和图像增强技术

    6、快速傅里叶逆变换(IFFT)

    快速傅里叶逆变换(IFFT)是图像频率变换的最后一步。它用于将图像从频域传输回空间域。这一步的结果是在空间域中与原始图像相比,图像减少了噪声并提高了清晰度。

    fig, ax = plt.subplots()
     im = ax.imshow(np.log(1+np.abs(np.fft.ifft2(np.fft.ifftshift(fftshifted_image * idealFilterLP(50,img.shape))))), cmap='gray')
     ax.set_title('Final Filtered Image In Spatial Domain')
     ax.set_xticks([])
     ax.set_yticks([])
     
     fig.savefig('final filtered image.png', bbox_inches='tight')

    Python图像处理:频域滤波的噪声降低和图像增强技术

    总结

    我们再把所有的操作串在一起显示,

    函数绘制所有图像

    def Freq_Trans(image, filter_used):
     img_in_freq_domain = np.fft.fft2(image)
     
     # Shift the zero-frequency component to the center of the frequency spectrum
     centered = np.fft.fftshift(img_in_freq_domain)
     
     # Multiply the filter with the centered spectrum
     filtered_image_in_freq_domain = centered * filter_used
     
     # Shift the zero-frequency component back to the top-left corner of the frequency spectrum
     inverse_fftshift_on_filtered_image = np.fft.ifftshift(filtered_image_in_freq_domain)
     
     # Apply the inverse Fourier transform to obtain the final filtered image
     final_filtered_image = np.fft.ifft2(inverse_fftshift_on_filtered_image)
     
     return img_in_freq_domain,centered,filter_used,filtered_image_in_freq_domain,inverse_fftshift_on_filtered_image,final_filtered_image

    使用高通、低通理想滤波器和高斯滤波器的直径分别为50、100和150像素,展示它们对增强图像清晰度的影响。

    fig, axs = plt.subplots(12, 7, figsize=(30, 60))
     
     filters = [(f, d) for f in [idealFilterLP, idealFilterHP, gaussianLP, gaussianHP] for d in [50, 100, 150]]
     
     for row, (filter_name, filter_diameter) in enumerate(filters):
     # Plot each filter output on a separate subplot
     result = Freq_Trans(img, filter_name(filter_diameter, img.shape))
     
     for col, title, img_array in zip(range(7),
    ["Original Image", "Spectrum", "Centered Spectrum", f"{filter_name.__name__} of Diameter {filter_diameter} px",
     f"Centered Spectrum multiplied by {filter_name.__name__}", "Decentralize", "Processed Image"],
    [img, np.log(1+np.abs(result[0])), np.log(1+np.abs(result[1])), np.abs(result[2]), np.log(1+np.abs(result[3])),
    np.log(1+np.abs(result[4])), np.abs(result[5])]):
     
     axs[row, col].imshow(img_array, cmap='gray')
     axs[row, col].set_title(title)
     
     plt.tight_layout()
     plt.savefig('all_processess.png', bbox_inches='tight')
     plt.show()

    Python图像处理:频域滤波的噪声降低和图像增强技术

    可以看到,当改变圆形掩膜的直径时,对图像清晰度的影响会有所不同。随着直径的增加,更多的频率被抑制,从而产生更平滑的图像和更少的细节。减小直径允许更多的频率通过,从而产生更清晰的图像和更多的细节。为了达到理想的效果,选择合适的直径是很重要的,因为使用太小的直径会导致过滤器不够有效,而使用太大的直径会导致丢失太多的细节。

    一般来说,高斯滤波器由于其平滑性和鲁棒性,更常用于图像处理任务。在某些应用中,需要更尖锐的截止,理想滤波器可能更适合。

    利用FFT修改图像频率是一种有效的降低噪声和提高图像锐度的方法。这包括使用FFT将图像转换到频域,使用适当的技术过滤噪声,并使用反FFT将修改后的图像转换回空间域。通过理解和实现这些技术,我们可以提高各种应用程序的图像质量。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    图像处理 编程开发 Python
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。