当前位置:   article > 正文

学习笔记——使用python进行图像的频域处理_python图片低频提取怎么弄

python图片低频提取怎么弄

作业要求:

一、任选两幅频率不同的图像(包括一副自备图像),计算其频谱图,并显示

理解什么图像的高频分量多,什么是图片的低频分量多。观察空域图象和频域频谱的对应关系。

二、任选一个低通滤波器对图片采用频率域滤波的基本步骤进行滤波观察分析空域图象和频谱分布的变化。自选图片,采用一个高通滤波器对图片进行处理,进行滤波观察分析空域图象和频谱分布的变化。

  1. import cv2 as cv
  2. import numpy as np
  3. from matplotlib import pyplot as plt
  4. import skimage
  5. def spectrum_show(img): # 定义一个用于计算灰度图的频谱图并显示的函数
  6. f = np.fft.fft2(img) # 快速傅里叶变换算法得到频率分布
  7. fshift = np.fft.fftshift(f) # 将图像中的低频部分移动到图像的中心,默认是在左上角
  8. fimg = np.log(np.abs(fshift)) # fft结果是复数, 其绝对值结果是振幅,取对数的目的是将数据变换到0~255
  9. # 展示结果
  10. plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Fourier')
  11. plt.axis('off')
  12. plt.subplot(122), plt.imshow(fimg, 'gray'), plt.title('Fourier Fourier')
  13. plt.axis('off')
  14. plt.show()
  15. def ButterworthPassFilter(image, d, n): # 定义一个Butterworth低通滤波器
  16. f = np.fft.fft2(image) # 快速傅里叶变换算法得到频率分布
  17. fshift = np.fft.fftshift(f) # 将图像中的低频部分移动到图像的中心,默认是在左上角
  18. # fft结果是复数, 其绝对值结果是振幅;取对数的目的是将数据变换到0~255
  19. fimg = np.log(np.abs(fshift))
  20. # Butterworth低通滤波器的实现函数的定义
  21. def make_transform_matrix(d):
  22. # 创建一个与输入图像同大小的全0矩阵,用于存储变化后的图像
  23. transform_matrix = np.zeros(image.shape)
  24. # 中心点值的计算,元组形式
  25. center_point = tuple(map(lambda x: (x - 1) / 2, fimg.shape))
  26. for i in range(transform_matrix.shape[0]): # 行遍历
  27. for j in range(transform_matrix.shape[1]): # 列遍历
  28. def cal_distance(pa, pb): # 欧拉距离计算函数的定义
  29. from math import sqrt
  30. dis = sqrt((pa[0] - pb[0]) ** 2 + (pa[1] - pb[1]) ** 2)
  31. return dis
  32. dis = cal_distance(center_point, (i, j)) # 求出每个点与中心点的距离
  33. # 巴特沃斯低通滤波的数学公式实现
  34. transform_matrix[i, j] = 1 / (1 + (dis / d) ** (2 * n))
  35. return transform_matrix
  36. d_matrix = make_transform_matrix(d) # 调用自定义函数
  37. new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift * d_matrix))) # 生成新图
  38. return new_img
  39. def highPassFilter(image,d): # 定义一个高通滤波器
  40. f = np.fft.fft2(image) # 快速傅里叶变换算法得到频率分布
  41. fshift = np.fft.fftshift(f) # 将图像中的低频部分移动到图像的中心,默认是在左上角
  42. # fft结果是复数, 其绝对值结果是振幅;取对数的目的是将数据变换到0~255
  43. fimg = np.log(np.abs(fshift))
  44. # 高通滤波器的实现函数的定义
  45. def make_transform_matrix(d):
  46. # 创建一个与输入图像同大小的全0矩阵,用于存储变化后的图像
  47. transfor_matrix = np.zeros(image.shape)
  48. center_point = tuple(map(lambda x:(x-1)/2,fimg.shape)) # 中心点值的计算,元组形式
  49. for i in range(transfor_matrix.shape[0]): # 行遍历
  50. for j in range(transfor_matrix.shape[1]): # 列遍历
  51. def cal_distance(pa,pb): # 欧拉距离计算函数的定义
  52. from math import sqrt
  53. dis = sqrt((pa[0]-pb[0])**2+(pa[1]-pb[1])**2)
  54. return dis
  55. dis = cal_distance(center_point,(i,j)) # 求出每个点与中心点的距离
  56. # 以下这部分和Butterworth低通滤波器不同
  57. if dis <= d:
  58. transfor_matrix[i,j]=0
  59. else:
  60. transfor_matrix[i,j]=1
  61. # 以上这部分和Butterworth低通滤波器不同
  62. return transfor_matrix
  63. d_matrix = make_transform_matrix(d) # 调用自定义函数
  64. new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*d_matrix))) # 生成新图
  65. return new_img
  66. if __name__ == '__main__':
  67. # 作业要求1:任选两幅频率不同的图像(包括一副自备图像),计算其频谱图,并显示
  68. img1 = cv.imread('girl.tif', 0) # 读取自备图像的图像的灰度图形式
  69. img2 = cv.imread('p1-07.tif', 0) # 读取所给图像的图像的灰度图形式
  70. spectrum_show(img1)
  71. spectrum_show(img2)
  72. """
  73. 理解什么图像的高频分量多,什么是图片的低频分量多。观察空域图象和频域频谱的对应关系:
  74. 空域图中空域快速变化部分对应频域的高频分量;高频的多的频谱图偏暗
  75. 空域图中空域平缓变化部分对应频域的低频分量;低频的多的频谱图偏亮
  76. """
  77. # 作业要求2-1
  78. # 任选一个低通滤波器对图片采用频率域滤波的基本步骤进行滤波观察分析空域图象和频谱分布的变化。
  79. img = cv.imread('p3-02.bmp', 0) # 直接读为灰度图像
  80. img = skimage.util.random_noise(img, mode='gaussian', seed=None, clip=True)
  81. spectrum_show(img) # 原图及其频谱图的显示
  82. butter_25_5 = ButterworthPassFilter(img,25, 5) # Butterworth低通滤波处理
  83. spectrum_show( butter_25_5) # 显示低通滤波后的图及其频谱图
  84. # 作业要求2-2
  85. # 自选图片,采用一个高通滤波器对图片进行处理,进行滤波观察分析空域图象和频谱分布的变化。
  86. img = cv.imread('girl.tif', 0) # 直接读为灰度图像
  87. spectrum_show(img) # 原图及其频谱图的显示
  88. highPassFilter= highPassFilter(img, 18) # Butterworth低通滤波处理
  89. spectrum_show(highPassFilter) # 显示低通滤波后的图及其频谱图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/78340
推荐阅读
相关标签
  

闽ICP备14008679号