一、实验目的与要求

  1. 了解频域变换过程,掌握频域变换特点
  2. 熟练掌握频域滤波中常用的平滑和锐化滤波器,能够对不同要求的图像进行滤波处理,体会并正确评价滤波效果,了解不同滤波方式的使用场合,能够从理论上作出合理的解释。

二、实验内容

  1. 图像频域平滑(去噪):使用自生成图像(包含白色区域,黑色区域,并且部分区域添加椒盐噪声),然后进行傅里叶变换,并且分别使用理想低通滤波器、巴特沃斯低通滤波器、指数低通滤波器和梯形低通滤波器(至少使用两种低通滤波器),显示滤波前后的频域能量分布图,空间图像。分析不同滤波器对噪声、边缘的处理效果及其优缺点。
  2. 图像频域平滑(锐化):选择一幅图像,例如rice.png,分别使用理想高通滤波器、巴特沃斯高通滤波器、指数高通滤波器和梯形高通滤波器(至少使用两种高通滤波器),显示滤波前后的频域能量分布图,空间图像。分析不同滤波器处理效果及其优缺点。

三、实验图像

四、实验代码

1.图像频域平滑(去噪):使用自生成图像(包含白色区域,黑色区域,并且部分区域添加椒盐噪声),然后进行傅里叶变换,并且分别使用理想低通滤波器、巴特沃斯低通滤波器、指数低通滤波器和梯形低通滤波器(至少使用两种低通滤波器),显示滤波前后的频域能量分布图,空间图像。分析不同滤波器对噪声、边缘的处理效果及其优缺点。

import random
import numpy as np
import matplotlib.pyplot as pltdef sp_noise(image, prob):"""添加椒盐噪声prob:噪声比例"""output = np.zeros(image.shape, np.uint8)thres = 1 - probfor i in range(image.shape[0]):for j in range(image.shape[1]):rdn = random.random()if rdn < prob:output[i][j] = 0elif rdn > thres:output[i][j] = 255else:output[i][j] = image[i][j]return outputdef ideal_low_filter(img, D0):"""生成一个理想低通滤波器(并返回)"""h, w = img.shape[:2]filter_img = np.ones((h, w))u = np.fix(h / 2)v = np.fix(w / 2)for i in range(h):for j in range(w):d = np.sqrt((i - u) ** 2 + (j - v) ** 2)filter_img[i, j] = 0 if d > D0 else 1return filter_imgdef butterworth_low_filter(img, D0, rank):"""生成一个Butterworth低通滤波器(并返回)"""h, w = img.shape[:2]filter_img = np.zeros((h, w))u = np.fix(h / 2)v = np.fix(w / 2)for i in range(h):for j in range(w):d = np.sqrt((i - u) ** 2 + (j - v) ** 2)filter_img[i, j] = 1 / (1 + 0.414 * (d / D0) ** (2 * rank))return filter_imgdef exp_low_filter(img, D0, rank):"""生成一个指数低通滤波器(并返回)"""h, w = img.shape[:2]filter_img = np.zeros((h, w))u = np.fix(h / 2)v = np.fix(w / 2)for i in range(h):for j in range(w):d = np.sqrt((i - u) ** 2 + (j - v) ** 2)filter_img[i, j] = np.exp(np.log(1 / np.sqrt(2)) * (d / D0) ** (2 * rank))return filter_imgdef filter_use(img, filter):"""将图像img与滤波器filter结合,生成对应的滤波图像"""# 首先进行傅里叶变换f = np.fft.fft2(img)f_center = np.fft.fftshift(f)# 应用滤波器进行反变换S = np.multiply(f_center, filter)  # 频率相乘——l(u,v)*H(u,v)f_origin = np.fft.ifftshift(S)  # 将低频移动到原来的位置f_origin = np.fft.ifft2(f_origin)  # 使用ifft2进行傅里叶的逆变换f_origin = np.abs(f_origin)  # 设置区间return f_origindef DFT_show(img):"""对传入的图像进行傅里叶变换,生成频域图像"""f = np.fft.fft2(img)  # 使用numpy进行傅里叶变换fshift = np.fft.fftshift(f)  # 把零频率分量移到中间result = np.log(1 + abs(fshift))return result# %%自生成实验图像,并添加椒盐噪声
src = np.zeros((300, 300), dtype=np.uint8)
salt_area1 = np.ones((130, 130), dtype=np.uint8)
salt_area1 = sp_noise(salt_area1, 0.04)
salt_area2 = np.zeros((130, 130), dtype=np.uint8)
salt_area2 = sp_noise(salt_area2, 0.04)
for i in range(10, 140):for j in range(10, 140):src[i, j + 75] = 255src[i + 150, j] = salt_area1[i - 10, j - 10] * 255src[i + 150, j + 150] = salt_area2[i - 10, j - 10]
my_img = src.copy()# %%——1.理想低通滤波——
ideal_filter = ideal_low_filter(my_img, D0=40)  # 生成理想低通滤波器
ideal_img = filter_use(my_img, ideal_filter)  # 将滤波器应用到图像,生成理想低通滤波图像
fre_img = DFT_show(my_img)  # 原图的频域图像
fre_ideal_img = DFT_show(ideal_img)  # 理想低通滤波图像的频域图像
plt.figure(dpi=300)
plt.subplot(221)
plt.title('原图')
plt.imshow(my_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(222)
plt.title("理想低通滤波图像")
plt.imshow(ideal_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(223)
plt.title('原图频域图')
plt.imshow(fre_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(224)
plt.title("理想低通滤波图像的频域图")
plt.imshow(fre_ideal_img, cmap=plt.cm.gray)
plt.axis("off")
plt.show()# %% ——2.巴特沃斯低通滤波器——
my_img = src.copy()
butterworth_filter = butterworth_low_filter(my_img, D0=10, rank=2)  # 生成Butterworth低通滤波器
butterworth_img = filter_use(my_img, butterworth_filter)  # 将滤波器应用到图像,生成Butterworth低通滤波图像
fre_butterworth_img = DFT_show(butterworth_img)  # Butterworth低通滤波图像的频域图像
plt.figure(dpi=300)
plt.subplot(221)
plt.title('原图')
plt.imshow(my_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(222)
plt.title("Butterworth低通滤波图像")
plt.imshow(butterworth_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(223)
plt.title('原图频域图')
plt.imshow(fre_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(224)
plt.title("Butterworth低通滤波图像的频域图")
plt.imshow(fre_butterworth_img, cmap=plt.cm.gray)
plt.axis("off")
plt.show()# %% ——3.指数低通滤波器——
my_img = src.copy()
exp_filter = exp_low_filter(my_img, D0=20, rank=2)  # 生成指数低通滤波器
exp_img = filter_use(my_img, exp_filter)  # 将滤波器应用到图像,生成指数低通滤波图像
fre_exp_img = DFT_show(exp_img)  # 指数低通滤波图像的频域图像
plt.figure(dpi=300)
plt.subplot(221)
plt.title('原图')
plt.imshow(my_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(222)
plt.title("指数低通滤波图像")
plt.imshow(exp_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(223)
plt.title('原图频域图')
plt.imshow(fre_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(224)
plt.title("指数低通滤波图像的频域图")
plt.imshow(fre_exp_img, cmap=plt.cm.gray)
plt.axis("off")
plt.show()

2.图像频域平滑(锐化):选择一幅图像,例如rice.png,分别使用理想高通滤波器、巴特沃斯高通滤波器、指数高通滤波器和梯形高通滤波器(至少使用两种高通滤波器),显示滤波前后的频域能量分布图,空间图像。分析不同滤波器处理效果及其优缺点。

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cvdef ideal_high_filter(img, D0):"""生成一个理想高通滤波器(并返回)"""h, w = img.shape[:2]filter_img = np.zeros((h, w))u = np.fix(h / 2)v = np.fix(w / 2)for i in range(h):for j in range(w):d = np.sqrt((i - u) ** 2 + (j - v) ** 2)filter_img[i, j] = 0 if d < D0 else 1return filter_imgdef butterworth_high_filter(img, D0, rank):"""生成一个Butterworth高通滤波器(并返回)"""h, w = img.shape[:2]filter_img = np.zeros((h, w))u = np.fix(h / 2)v = np.fix(w / 2)for i in range(h):for j in range(w):d = np.sqrt((i - u) ** 2 + (j - v) ** 2)filter_img[i, j] = 1 / (1 + (D0 / d) ** (2 * rank))return filter_imgdef exp_high_filter(img, D0, rank):"""生成一个指数高通滤波器(并返回)"""h, w = img.shape[:2]filter_img = np.zeros((h, w))u = np.fix(h / 2)v = np.fix(w / 2)for i in range(h):for j in range(w):d = np.sqrt((i - u) ** 2 + (j - v) ** 2)filter_img[i, j] = np.exp((-1) * (D0 / d) ** rank)return filter_imgdef filter_use(img, filter):"""将图像img与滤波器filter结合,生成对应的滤波图像"""# 首先进行傅里叶变换f = np.fft.fft2(img)f_center = np.fft.fftshift(f)# 应用滤波器进行反变换S = np.multiply(f_center, filter)  # 频率相乘——l(u,v)*H(u,v)f_origin = np.fft.ifftshift(S)  # 将低频移动到原来的位置f_origin = np.fft.ifft2(f_origin)  # 使用ifft2进行傅里叶的逆变换f_origin = np.abs(f_origin)  # 设置区间f_origin = f_origin / np.max(f_origin.all())return f_origindef DFT_show(img):"""对传入的图像进行傅里叶变换,生成频域图像"""f = np.fft.fft2(img)  # 使用numpy进行傅里叶变换fshift = np.fft.fftshift(f)  # 把零频率分量移到中间result = np.log(1 + abs(fshift))return resultsrc = cv.imread("wire.bmp", 0)
my_img = src.copy()# %%——1.理想高通滤波——
ideal_filter = ideal_high_filter(my_img, D0=40)  # 生成理想高通滤波器
ideal_img = filter_use(my_img, ideal_filter)  # 将滤波器应用到图像,生成理想高通滤波图像
fre_img = DFT_show(my_img)  # 原图的频域图像
fre_ideal_img = DFT_show(ideal_img)  # 理想高通滤波图像的频域图像
plt.figure(dpi=300)
plt.subplot(221)
plt.title('原图')
plt.imshow(my_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(222)
plt.title("理想高通滤波图像")
plt.imshow(ideal_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(223)
plt.title('原图频域图')
plt.imshow(fre_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(224)
plt.title("理想高通滤波图像的频域图")
plt.imshow(fre_ideal_img, cmap=plt.cm.gray)
plt.axis("off")
plt.show()# %% ——2.巴特沃斯高通滤波器——
my_img = src.copy()
butterworth_filter = butterworth_high_filter(my_img, D0=40, rank=2)  # 生成Butterworth高通滤波器
butterworth_img = filter_use(my_img, butterworth_filter)  # 将滤波器应用到图像,生成Butterworth高通滤波图像
fre_butterworth_img = DFT_show(butterworth_img)  # Butterworth高通滤波图像的频域图像
plt.figure(dpi=300)
plt.subplot(221)
plt.title('原图')
plt.imshow(my_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(222)
plt.title("Butterworth高通滤波图像")
plt.imshow(butterworth_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(223)
plt.title('原图频域图')
plt.imshow(fre_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(224)
plt.title("Butterworth高通滤波图像的频域图")
plt.imshow(fre_butterworth_img, cmap=plt.cm.gray)
plt.axis("off")
plt.show()# %% ——3.指数高通滤波器——
my_img = src.copy()
exp_filter = exp_high_filter(my_img, D0=40, rank=2)  # 生成指数高通滤波器
exp_img = filter_use(my_img, exp_filter)  # 将滤波器应用到图像,生成指数高通滤波图像
fre_exp_img = DFT_show(exp_img)  # 指数高通滤波图像的频域图像
plt.figure(dpi=300)
plt.subplot(221)
plt.title('原图')
plt.imshow(my_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(222)
plt.title("指数高通滤波图像")
plt.imshow(exp_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(223)
plt.title('原图频域图')
plt.imshow(fre_img, cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(224)
plt.title("指数高通滤波图像的频域图")
plt.imshow(fre_exp_img, cmap=plt.cm.gray)
plt.axis("off")
plt.show()

实验四 图像频域平滑与锐化(Python实现)相关推荐

  1. 【Python CUDA版】河北工业大学计算机图像处理实验四:频域平滑与锐化

    一.实验目的与要求 1.了解频域变换过程,掌握频域变换特点 2.熟练掌握频域滤波中常用的平滑和锐化滤波器,能够对不同要求的图像进行滤波处理,体会并正确评价滤波效果,了解不同滤波方式的使用场合,能够从理 ...

  2. 数字图像处理实验四图像频域增强

    一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学的图像增强的理论知识和相关算法. (2)熟练掌握低通.高通.带通.同态滤波器的使用方法,明确不同性质的滤波器对图像的影响 ...

  3. 计算机图像处理实验三 图像空间域平滑与锐化

    一.实验目的与要求 1.加深对图像增强及边缘检测技术的感性认识,应用MATLAB工具箱自带的处理函数或自己编程完成相关的工作,分析处理结果,巩固所学理论知识. 2.熟练掌握空域滤波中常用的平滑和锐化滤 ...

  4. 图像的平滑与锐化代码matlab_【图像处理】轻松搞懂图像锐化

    图像锐化的目的是使模糊图像变清晰,方法可以大致分为两类:微分法.高频加重滤波法.其中微分法可以分为梯度法.Sobel算子法.Laplace算子法. 在做图像锐化时要注意,处理的图像必须有较高的信噪比, ...

  5. 实验四,字符串的基本操作(Python,头歌)

    第1关:字符串的拼接:名字的组成 任务描述 本关任务是将两个不同的字符串,拼接形成一个字符串,并将新字符串输出来.字符串或串(String)是由数字.字母.下划线组成的一串字符.在 Python 中, ...

  6. matlab系统频率特性分析实验报告,实验四 线性系统频率特性的测试

    实验四 线性系统频域特性的测试 一.实验目的 1.学会用MATLAB 求取系统频率特性的方法. 2.掌握利用频率特性分析系统性能方法. 二.实验内容 1.绘制出典型二阶系统6=n ω,1.0=ξ, 0 ...

  7. python程序设计报告-20192416 实验四《Python程序设计》综合实践报告

    20192416 实验四 <Python程序设计> 综合实践报告 课程:<Python程序设计> 班级:1924 姓名:不愿透露姓名的はんたくさん 学号:20192416 实验 ...

  8. python实验过程心得体会_20192416 实验四《Python程序设计》综合实践报告

    20192416 实验四 <Python程序设计> 综合实践报告 课程:<Python程序设计> 班级:1924 姓名:不愿透露姓名的はんたくさん 学号:20192416 实验 ...

  9. 【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图像增强处理,包括图像普通平滑.高斯 ...

最新文章

  1. U盘文件名称变成乱码的解决方法
  2. How to resolve error message CRM_PRODUCT_SALES-E016 during product download
  3. 微课与计算机技术的论文,微课在高校计算机教学的运用论文
  4. 怎么删除已经安装的mysql_怎么样删除已经安装的mysql | wdlinux致力于Linux服务器架构,性能优化.免费CDN加速系统,免费智能DNS解析,负载均衡,集群分流...
  5. 电子之嵌入式主流芯片浏览
  6. maven中常用jar包插件
  7. 操作系统 进程(上)
  8. IMDB 2003 07 12 最新排名
  9. froala editor导出html,Froala editor 使用
  10. RHEL 7 修改网卡的ip地址
  11. 开源电子书项目FBReader初探(二)
  12. 戴尔linux改win7教程视频,戴尔台式机预装win10改win7及bios设置详细教程
  13. 雅虎首席产品官Blake Irving:打造个性化产品的“架子鼓手”
  14. vue form表单数据提交
  15. Samba文件服务器
  16. wxpy实现微信机器人
  17. 会员管理系统与微信连接能实现哪些功能?
  18. matlab三大重要数组之胞元数组
  19. Dependency ‘taglibs:standard:1.1.2‘ not found
  20. 在招股书中编概念、讲故事,将通过内核审批的申报文件大幅删减后报送

热门文章

  1. FusionCompute CNA及VRM安装
  2. 解决使用代理时 Win10 UWP 应用无法联网问题
  3. C++里面,什么时候使用std::wstring
  4. kafka 安装及相关操作
  5. React脚手架的搭建
  6. 王兴:美团不爱打仗 ,要成为一个使命驱动的公司
  7. Windows server防止暴力破解
  8. webpack打包优化之外部扩展(Externals)配置
  9. scrapy python3教程_python3安装scrapy教程_安装Scrapy教程
  10. 图论——邻接矩阵之无向网