1、图像的高频信息往往是细节+噪声;中频信息一般是图像的框架信息;低频信息数量最多,是图形的主体
2、所以,高通滤波器,只通过高频信息,所以留下来的图像只有边缘等细节信息,看起来像简笔画。低通滤波器同理。
3、本次练习的【高通滤波】和 【低通滤波】,都是【频率域】中的概念,而之前做的练习:【直方图】啊、【平滑滤波器】都是作用在【空间域】的算法。
4、我在最后,会对频率域算法和空间域算法进行对比总结。
另一个实验——同态滤波器的效果、总结在此:
https://blog.csdn.net/qq_30154571/article/details/109138478
https://blog.csdn.net/qq_30154571/article/details/109065550
import numpy as np
import matplotlib.pyplot as plt
import cv2
###################################################################
############### 进行频率域处理 #############
###################################################################
img = cv2.imread("pic/6.png",0)#读图
dft = cv2.dft(np.float64(img),flags = cv2.DFT_COMPLEX_OUTPUT)#设置输入格式为float32
dft_shift = np.fft.fftshift(dft)#低频分量中心化处理,方便观察
#设置振幅大小
magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))
#打印输入图像
plt.subplot(141), plt.imshow(img, cmap='gray')
plt.title('Input'), plt.xticks([]), plt.yticks([])
#获取频谱图
plt.subplot(142), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('PinLvYu'), plt.xticks([]), plt.yticks([])
###################################################################
############### 进行低通滤波 #############
###################################################################
#设置低通滤波器
rows, cols = img.shape
crow,ccol = int(rows/2), int(cols/2) #中心位置
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1#设置矩形窗口遮罩,设为1,过滤高频
#掩膜图像和频谱图像乘积
f = dft_shift * mask
#傅里叶逆变换
ishift = np.fft.ifftshift(f)
iimg = cv2.idft(ishift)
res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])
#显示低通滤波处理图像
plt.subplot(143), plt.imshow(res, 'gray'), plt.title('DiTong')
plt.axis('off')
########################################################################
################### 进行高通滤波 ######################
########################################################################
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
#设置高通滤波器
rows, cols = img.shape
crow,ccol = int(rows/2), int(cols/2)
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0#设置矩形窗口遮罩,设为0,过滤低频
#傅里叶逆变换
ishift = np.fft.ifftshift(fshift)
himg = np.fft.ifft2(ishift)
himg = np.abs(himg)
#显示高通滤波处理图像
plt.subplot(144), plt.imshow(himg, 'gray'), plt.title('GaoTong')
plt.axis('off')
plt.show()
参考:https://www.jianshu.com/p/01ae3df005d0
在比较二者之前,先做一下简单的知识回顾和梳理:
将第一次作业习中所用到的模板(就是那个各种3X3的矩阵),处理图像后,再进行频率域化+中心化处理,效果如下图:
有图可得知:第一次作业用到的空间域的【拉布拉斯算子处理】和【梯度算子处理】,在功能上近似于高通滤波器,二者和本次练习中的频率域高通、低通都能达到基本相同的功能;均值滤波、中值滤波在功能上也基本属于低通滤波器。
图像的空间域处理,主要是对像素灰度值的改变,其元素本身位置不变。
频率域是以频谱表示信息分布特征,原图像上的灰度突变部位、图像结构复杂的区域、图像细节及干扰噪声等信息集中在高频区,而原图像上灰度变化平缓部位的信息集中在低频区。
在频率域,一些特性比较突出,容易处理。比如在空间图像里不好找出噪声的模式,如果变换到频率域,则比较好找出噪声的模式,并能更容易的处理。
补充:傅立叶变换能把遥感图像从空间域变换到只包含不同频率信息的频率域。也就是说,傅里叶变换是连接二者的桥梁。
空间域与空间频率域可互相转换。在空间频率域中可以引用已经很成熟的频率域技术,处理的一般步骤为:
总结,空间域的图像处理,在数学上,在逻辑上,相比于频率域更加简单直观,而频域更适合做分析,因为有一些细节在图像域展现的不明显。二者各有各的用途,分析和工程,都是重要的应用。