频域图像处理,高通低通滤波python

时间: 2023-07-19 14:44:30 浏览: 42
好的,我可以为您介绍一下频域图像处理、高通滤波和低通滤波的基本概念和Python实现。 频域图像处理是指将图像从空间域(即像素的位置和灰度值)转换到频率域(即图像的频谱和幅度谱)进行处理的方法。频域图像处理基于傅里叶变换(FFT)和傅里叶反变换(IFFT)实现。在频域中,可以使用不同类型的滤波器对图像进行处理,包括高通滤波和低通滤波。高通滤波器可以用来增强图像的边缘和细节,而低通滤波器则可以用来平滑图像并消除噪声。 在Python中,可以使用NumPy和OpenCV库来实现频域图像处理和滤波。以下是高通滤波和低通滤波的Python代码示例: 高通滤波: ``` python import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg', 0) rows, cols = img.shape # 构建高通滤波器 kernel = np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]]) # 傅里叶变换 f = np.fft.fft2(img) fshift = np.fft.fftshift(f) # 滤波 filtered = fshift * kernel f_ishift = np.fft.ifftshift(filtered) img_back = np.fft.ifft2(f_ishift) img_back = np.abs(img_back) # 显示图像 cv2.imshow('Original Image', img) cv2.imshow('High Pass Filtered Image', img_back) cv2.waitKey() cv2.destroyAllWindows() ``` 低通滤波: ``` python import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg', 0) rows, cols = img.shape # 构建低通滤波器 kernel = np.ones((5,5),np.float32)/25 # 傅里叶变换 f = np.fft.fft2(img) fshift = np.fft.fftshift(f) # 滤波 filtered = fshift * kernel f_ishift = np.fft.ifftshift(filtered) img_back = np.fft.ifft2(f_ishift) img_back = np.abs(img_back) # 显示图像 cv2.imshow('Original Image', img) cv2.imshow('Low Pass Filtered Image', img_back) cv2.waitKey() cv2.destroyAllWindows() ``` 在这些代码中,我们首先读取输入图像,然后使用NumPy库进行傅里叶变换。然后,我们构建了一个高通或低通滤波器,将其应用于频率域的图像,然后使用反傅里叶变换将图像转换回空间域,并显示结果。

相关推荐

低通滤波是一种图像处理技术,用于保留图像中较低频率的信息并抑制高频率的细节。在Python中,可以使用OpenCV库来实现低通滤波。引用中的文章提到了低通滤波的构造原理和方法。 首先,通过傅里叶变换将图像从空间域转换到频域。然后,根据需要选择一个合适的滤波器来滤除高频部分,只保留低频部分。常见的低通滤波器有理想滤波器、巴特沃斯滤波器和指数滤波器。 理想滤波器是最简单的一种低通滤波器。它的滤波模板是一个以原点为圆心、半径为D0的圆,圆内通过所有的频率,圆外截断所有的频率。但理想滤波器会引入一些不可避免的伪影,因为其过渡边界不连续。巴特沃斯滤波器是一种改进的低通滤波器,可以调整滤波器的阶数来控制过渡区域的宽度。当阶数较高时,巴特沃斯滤波器接近于理想低通滤波器,而阶数较低时则接近于高斯低通滤波器。 在Python中,可以使用OpenCV的函数cv2.filter2D()来应用低通滤波器。首先,需要将图像进行傅里叶变换,然后创建一个滤波器模板。最后,使用filter2D函数将滤波器应用到傅里叶变换后的图像上,然后再进行逆变换。 下面是一个简单的示例代码,演示如何使用低通滤波器对图像进行处理: python import cv2 import numpy as np # 读取图像 image = cv2.imread('image.jpg', 0) # 进行傅里叶变换 f = np.fft.fft2(image) fshift = np.fft.fftshift(f) # 创建低通滤波器 rows, cols = image.shape crow, ccol = int(rows/2), int(cols/2) mask = np.zeros((rows, cols), np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30 = 1 # 应用滤波器 fshift = fshift * mask #### 引用[.reference_title] - *1* [《OpenCv视觉之眼》Python图像处理七 :Opencv图像处理之高通滤波和低通滤波原理及构造](https://blog.csdn.net/qq_42451251/article/details/107855336)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [3.2 Python图像的频域图像增强-高通和低通滤波器](https://blog.csdn.net/qq_38463737/article/details/118682500)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
同态滤波是一种图像处理技术,用于增强图像的对比度并减少光照不均匀的影响。在同态滤波中,可以使用高通滤波和低通滤波来实现。根据引用中的关系,高通滤波器可以通过对低通滤波器取补得到。因此,可以使用创建的低通滤波器来生成高通滤波器。 在Python中,可以使用scipy库中的signal模块来实现频率域的滤波操作。具体步骤如下: 1. 导入必要的库:import numpy as np 和 from scipy import signal 2. 创建低通滤波器:使用signal.butter函数可以创建一个布特沃斯低通滤波器,可以根据需要设置阶数和截止频率。 3. 创建高通滤波器:通过对低通滤波器取补得到高通滤波器,即 hpFilter = 1 - lpFilter。 4. 对图像进行傅里叶变换:使用numpy库中的fft2函数对输入图像进行傅里叶变换。 5. 将滤波器与频域图像相乘:将傅里叶变换后的图像与所需的滤波器进行逐元素相乘。 6. 对结果进行反傅里叶变换:使用numpy库中的ifft2函数对滤波后的频域图像进行反傅里叶变换,得到滤波后的图像。 需要注意的是,具体的代码实现可能根据实际需求和库的使用方法有所差异,因此可以参考相关文档和示例代码来进行具体操作。同时,还可以使用其他库如OpenCV来实现同态滤波的高通和低通滤波操作。123 #### 引用[.reference_title] - *1* *2* *3* [OpenCV —— 频率域滤波(傅里叶变换,低通和高通滤波,带通和带阻滤波,同态滤波)](https://blog.csdn.net/m0_38007695/article/details/114270387)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
在数字图像处理中,高通滤波器用于增强图像中的高频细节,如边缘和纹理。Python提供了多种库和方法来实现高通滤波。下面是一些常用的高通滤波器及其实现示例: 1. 理想高通滤波器(Ideal Highpass Filter): python import numpy as np import cv2 from matplotlib import pyplot as plt # 读取图像并进行灰度化处理 image = cv2.imread('image.jpg', 0) # 进行二维傅里叶变换 f = np.fft.fft2(image) fshift = np.fft.fftshift(f) # 构建理想高通滤波器 rows, cols = image.shape crow, ccol = rows // 2, cols // 2 D = 30 # 截止频率 mask = np.ones((rows, cols), np.uint8) mask[crow - D:crow + D, ccol - D:ccol + D] = 0 # 将滤波器应用于频域图像 fshift_filtered = fshift * mask # 将滤波后的频域图像转回原始图像域 f_ishift = np.fft.ifftshift(fshift_filtered) image_filtered = np.fft.ifft2(f_ishift) image_filtered = np.abs(image_filtered) # 显示原始图像和滤波后的图像 plt.subplot(121), plt.imshow(image, cmap='gray') plt.title('Original Image') plt.xticks([]), plt.yticks([]) plt.subplot(122), plt.imshow(image_filtered, cmap='gray') plt.title('Filtered Image') plt.xticks([]), plt.yticks([]) plt.show() 2. 巴特沃斯高通滤波器(Butterworth Highpass Filter): python import numpy as np import cv2 from matplotlib import pyplot as plt from scipy.ndimage import filters # 读取图像并进行灰度化处理 image = cv2.imread('image.jpg', 0) # 进行巴特沃斯高通滤波 D = 30 # 截止频率 n = 2 # 阶数 filtered_image = filters.gaussian_high_pass(image, D, n) # 显示原始图像和滤波后的图像 plt.subplot(121), plt.imshow(image, cmap='gray') plt.title('Original Image') plt.xticks([]), plt.yticks([]) plt.subplot(122), plt.imshow(filtered_image, cmap='gray') plt.title('Filtered Image') plt.xticks([]), plt.yticks([]) plt.show() 这里我们使用了SciPy库中的filters.gaussian_high_pass函数来实现巴特沃斯高通滤波。 这些示例演示了如何使用理想高通滤波器和巴特沃斯高通滤波器对图像进行处理。你可以根据需要调整截止频率和其他参数,以达到不同的滤波效果。 希望这些示例对你有帮助!如果还有其他问题,请随时提问。
高频强调滤波是一种用于增强图像中高频细节的滤波方法。在Python中,可以使用以下步骤来实现高频强调滤波: 1. 导入所需的库: python import numpy as np import cv2 from matplotlib import pyplot as plt 2. 读取图像并进行灰度化处理: python image = cv2.imread('image.jpg', 0) 3. 对图像进行二维傅里叶变换: python f = np.fft.fft2(image) 4. 将零频率成分移到频谱中心: python fshift = np.fft.fftshift(f) 5. 构建高通滤波器,例如巴特沃斯高通滤波器: python rows, cols = image.shape crow, ccol = rows // 2, cols // 2 # 创建一个巴特沃斯高通滤波器 D = 30 # 截止频率 n = 2 # 阶数 # 计算距离中心频率的距离 dist = np.zeros((rows, cols)) for i in range(rows): for j in range(cols): dist[i, j] = np.sqrt((i - crow) ** 2 + (j - ccol) ** 2) # 构建滤波器 H = 1 - 1 / (1 + (dist / D) ** (2 * n)) 这里的示例是一个巴特沃斯高通滤波器,通过计算距离中心频率的距离,并根据阶数和截止频率构建滤波器。 6. 将滤波器应用于频域图像: python fshift_filtered = fshift * H 7. 将滤波后的频域图像转回原始图像域: python f_ishift = np.fft.ifftshift(fshift_filtered) image_filtered = np.fft.ifft2(f_ishift) image_filtered = np.abs(image_filtered) 8. 显示原始图像和滤波后的图像: python plt.subplot(121), plt.imshow(image, cmap='gray') plt.title('Original Image') plt.xticks([]), plt.yticks([]) plt.subplot(122), plt.imshow(image_filtered, cmap='gray') plt.title('Filtered Image') plt.xticks([]), plt.yticks([]) plt.show() 这样就完成了高频强调滤波的过程。你可以根据具体的需求调整截止频率和阶数来控制滤波效果。 希望这个示例对你有帮助!如果还有其他问题,请随时提问。
Python中可以使用numpy和opencv库进行图像频域滤波。 1.使用numpy库实现图像频域滤波 频域滤波的步骤是: (1)读入图像 (2)将图像转换为灰度图 (3)进行傅里叶变换,得到频域图像 (4)设计滤波器 (5)对频域图像进行滤波操作 (6)进行傅里叶逆变换,得到滤波后的图像 代码示例: python import cv2 import numpy as np # 读入图像 img = cv2.imread('img.jpg') # 将图像转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 进行傅里叶变换,得到频域图像 f = np.fft.fft2(gray) fshift = np.fft.fftshift(f) # 构建高通滤波器 rows, cols = gray.shape crow, ccol = rows // 2, cols // 2 mask = np.ones((rows, cols), np.uint8) mask[crow - 30: crow + 30, ccol - 30: ccol + 30] = 0 # 对频域图像进行滤波操作 fshift = fshift * mask # 进行傅里叶逆变换,得到滤波后的图像 ishift = np.fft.ifftshift(fshift) i = np.fft.ifft2(ishift) result = np.abs(i) # 显示原图和滤波后的图像 cv2.imshow('Original', gray) cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows() 2.使用opencv库实现图像频域滤波 OpenCV提供了cv2.dft()和cv2.idft()函数,可以方便地实现图像的傅里叶变换和逆变换。与numpy库相比,opencv库的实现更加简单。频域滤波的步骤与上面的步骤相同。 代码示例: python import cv2 import numpy as np # 读入图像 img = cv2.imread('img.jpg') # 将图像转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 进行傅里叶变换,得到频域图像 dft = cv2.dft(np.float32(gray), flags=cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) # 构建高通滤波器 rows, cols = gray.shape crow, ccol = rows // 2, cols // 2 mask = np.ones((rows, cols, 2), np.uint8) mask[crow - 30: crow + 30, ccol - 30: ccol + 30] = 0 # 对频域图像进行滤波操作 fshift = dft_shift * mask # 进行傅里叶逆变换,得到滤波后的图像 ishift = np.fft.ifftshift(fshift) i = cv2.idft(ishift) result = cv2.magnitude(i[:, :, 0], i[:, :, 1]) # 显示原图和滤波后的图像 cv2.imshow('Original', gray) cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows()
Python可以使用NumPy和OpenCV库对图像进行频域滤波。 在NumPy中,可以使用FFT(快速傅里叶变换)和IFFT(逆快速傅里叶变换)函数进行频域滤波。首先,读取图像并将其转化为灰度图像: python import cv2 import numpy as np img = cv.imread('image.jpg', 0) 然后,计算图像的傅里叶变换: python f = np.fft.fft2(img) fshift = np.fft.fftshift(f) 进行滤波操作,例如使用高通滤波器: python rows, cols = img.shape crow, ccol = rows/2, cols/2 # 生成高通滤波器 mask = np.ones((rows, cols), np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30] = 0 # 应用高通滤波器 fshift *= mask # 进行逆傅里叶变换 f_ishift = np.fft.ifftshift(fshift) img_back = np.fft.ifft2(f_ishift) img_back = np.abs(img_back) 最后,将滤波后的图像保存: python cv2.imwrite('filtered_image.jpg', img_back) 在OpenCV中,可以使用cv2.dft()和cv2.idft()函数进行傅里叶变换和逆傅里叶变换: python img = cv2.imread('image.jpg', 0) dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) # 生成高通滤波器 rows, cols = img.shape crow, ccol = rows/2, cols/2 mask = np.ones((rows, cols, 2), np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30] = 0 # 应用高通滤波器 fshift = dft_shift*mask f_ishift = np.fft.ifftshift(fshift) img_back = cv2.idft(f_ishift) img_back = cv2.magnitude(img_back[:,:,0], img_back[:,:,1]) cv2.imwrite('filtered_image.jpg', img_back) 以上代码只是一个示例,具体的滤波器和操作方式需要根据实际需求进行选择和调整。
在Python中进行频域滤波可以使用傅里叶变换来实现。首先,通过使用正向傅里叶变换将原始图像从空间域转换到频域。这可以通过NumPy库中的fft函数来实现。接下来,使用频域滤波器对频率进行过滤,保留或去除某些特定频率。常用的频域滤波器包括低通滤波器、高通滤波器和带通滤波器等。最后,使用傅里叶逆变换将滤波后的频域图像重新转换到空间域,得到处理后的图像。 以下是一个使用Python进行频域滤波的示例代码: python import numpy as np from scipy.fft import fft, ifft # 假设原始图像为img img = ... # 进行正向傅里叶变换 img_freq = fft(img) # 定义频域滤波器,这里以低通滤波器为例 # 可根据需要选择其他滤波器 filter = ... # 对频域图像进行滤波 filtered_img_freq = img_freq * filter # 进行傅里叶逆变换,得到处理后的图像 filtered_img = ifft(filtered_img_freq) # 处理后的图像即为filtered_img 在上述代码中,首先使用fft函数对原始图像进行正向傅里叶变换得到频域图像。然后,定义一个频域滤波器,可以根据需要选择不同的滤波器类型。通过将频域图像与滤波器进行乘法运算,可以对频域进行滤波。最后,使用ifft函数进行傅里叶逆变换,将滤波后的频域图像转换回空间域,得到处理后的图像。 请注意,示例代码中的滤波器部分需要根据具体需求进行定义和实现。可以根据实际应用的场景选择不同的滤波器类型和参数。123 #### 引用[.reference_title] - *1* *2* *3* [数字图像处理与Python实现笔记之频域滤波](https://blog.csdn.net/qq_40507857/article/details/107609844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
Python中的DCT(离散余弦变换)频域滤波是一种基于频域的图像滤波方法。它将图像转换为频域,然后使用滤波器对频域图像进行滤波,最后将滤波后的频域图像转换回空域。这种方法可以有效地去除图像中的噪声和其他干扰,同时保留图像的主要特征。在Python中,可以使用NumPy库中的fft2和ifft2函数来实现DCT频域滤波。具体步骤如下: 1. 将图像转换为灰度图像。 2. 对灰度图像进行DCT变换。 3. 构造一个滤波器,可以使用带通滤波器,低通滤波器或高通滤波器。 4. 将滤波器应用于DCT变换后的图像。 5. 对滤波后的图像进行IDCT(离散余弦逆变换)以获得空域图像。 下面是一个简单的Python代码示例,演示如何使用DCT频域滤波器对图像进行滤波: import cv2 import numpy as np # 读取图像并转换为灰度图像 img = cv2.imread('image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 对灰度图像进行DCT变换 dct = cv2.dct(np.float32(gray)) # 构造一个低通滤波器 rows, cols = gray.shape crow, ccol = int(rows/2), int(cols/2) mask = np.zeros((rows, cols), np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30] = 1 # 将滤波器应用于DCT变换后的图像 dct_filtered = dct * mask # 对滤波后的图像进行IDCT以获得空域图像 idct = cv2.idct(dct_filtered) # 显示原始图像和滤波后的图像 cv2.imshow('Original Image', img) cv2.imshow('Filtered Image', idct) cv2.waitKey(0) cv2.destroyAllWindows()
FFT 滤波(Fast Fourier Transform Filtering)是一种基于频域的图像滤波方法,可以通过对图像进行 Fourier 变换,然后在频域上进行滤波,最后再进行反 Fourier 变换得到处理后的图像。在 Python 中可以使用 OpenCV 库提供的函数 cv2.dft() 和 cv2.idft() 来实现 FFT 滤波。 函数原型如下: python cv2.dft(src[, dst[, flags[, nonzeroRows]]]) → dst cv2.idft(src[, dst[, flags[, nonzeroRows]]]) → dst 其中,参数含义如下: - src:输入图像,必须为浮点型; - dst:输出数组,与输入数组具有相同的大小和类型; - flags:变换的标志,可以是以下值之一: - cv2.DFT_COMPLEX_OUTPUT:输出为双通道复数数组; - cv2.DFT_REAL_OUTPUT:输出为单通道实数数组; - cv2.DFT_INVERSE:进行反 Fourier 变换; - cv2.DFT_SCALE:对结果进行缩放; - cv2.DFT_ROWS:对每一行独立进行变换; - cv2.DFT_COMPLEX_INPUT:输入为双通道复数数组; - cv2.DFT_COMPLEX_OUTPUT:输出为双通道复数数组; - cv2.DFT_REAL_INPUT:输入为单通道实数数组; - cv2.DFT_INVERSE_SCALE:对结果进行反缩放; - nonzeroRows:当输入数组的行数大于零时,可以指定需要变换的行数。 下面是一个简单的例子,使用 FFT 滤波对图像进行高通滤波: python import cv2 import numpy as np img = cv2.imread('image.jpg', 0) rows, cols = img.shape crow, ccol = rows // 2, cols // 2 # 创建一个掩膜,中心为 0,其余为 1 mask = np.ones((rows, cols), np.uint8) mask[crow - 30: crow + 30, ccol - 30: ccol + 30] = 0 # 进行 Fourier 变换,得到频域图像 dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) # 对频域图像进行滤波 dft_shift *= mask # 进行反 Fourier 变换,得到处理后的图像 idft_shift = np.fft.ifftshift(dft_shift) idft = cv2.idft(idft_shift) img_filtered = cv2.magnitude(idft[:, :, 0], idft[:, :, 1]) cv2.imshow('Original Image', img) cv2.imshow('Filtered Image', img_filtered) cv2.waitKey(0) 其中,image.jpg 是待处理的图像文件名,首先创建一个掩膜,中心为 0,其余为 1,然后对输入图像进行 Fourier 变换,得到频域图像。对频域图像进行滤波后,再进行反 Fourier 变换,得到处理后的图像。 运行代码后,会弹出一个名为 Original Image 的窗口,显示原始图像,和一个名为 Filtered Image 的窗口,显示处理后的图像。
频域滤波是一种数字图像处理技术,可以在频域中对图像进行滤波。在频域滤波中,我们将图像转换为频域,然后使用滤波器对频域进行操作,最后将结果转换回空域。频域滤波可以分为高通滤波和低通滤波。 在OpenCV中,我们可以使用dft()函数将图像转换为频域,并使用idft()函数将频域图像转换回空域。对于高通滤波,我们可以使用一个高通滤波器来强调图像中的高频信息。 以下是Python OpenCV中实现高通滤波的代码示例: python import cv2 import numpy as np # Load the image img = cv2.imread('image.jpg', 0) # Convert the image to float32 img_float32 = np.float32(img) # Apply dft dft = cv2.dft(img_float32, flags=cv2.DFT_COMPLEX_OUTPUT) # Shift the zero-frequency component to the center of the spectrum dft_shift = np.fft.fftshift(dft) # Define the high-pass filter rows, cols = img.shape crow, ccol = int(rows/2), int(cols/2) mask = np.ones((rows, cols, 2), np.uint8) r = 80 center = [crow, ccol] x, y = np.ogrid[:rows, :cols] mask_area = (x - center[0])**2 + (y - center[1])**2 <= r*r mask[mask_area] = 0 # Apply the filter fshift = dft_shift*mask f_ishift = np.fft.ifftshift(fshift) # Apply idft img_back = cv2.idft(f_ishift) img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1]) # Display the image cv2.imshow('Input Image', img) cv2.imshow('High-pass Filtered Image', img_back) cv2.waitKey(0) cv2.destroyAllWindows() 在此示例中,我们首先加载图像并将其转换为float32格式。然后,我们使用dft()函数将图像转换为频域。接下来,我们将零频率分量移动到频谱的中心,使用高通滤波器来强调高频信息,然后使用idft()函数将频域图像转换回空域。最后,我们显示原始图像和高通滤波后的图像。
下面是Python实现的图像滤波代码,包括低通滤波、高通滤波、带通滤波、带阻滤波和同态滤波。 python import cv2 import numpy as np from matplotlib import pyplot as plt # 读取图像 img = cv2.imread('image.jpg', 0) # 傅里叶变换 f = np.fft.fft2(img) fshift = np.fft.fftshift(f) # 低通滤波 rows, cols = img.shape crow, ccol = int(rows/2), int(cols/2) mask = np.zeros((rows, cols), np.uint8) r = 60 cv2.circle(mask, (ccol, crow), r, 255, -1) fshift = fshift * mask f_ishift = np.fft.ifftshift(fshift) img_back = np.fft.ifft2(f_ishift) img_back = np.abs(img_back) plt.subplot(2, 3, 1), plt.imshow(img, cmap='gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(2, 3, 2), plt.imshow(mask, cmap='gray') plt.title('Low Pass Filter'), plt.xticks([]), plt.yticks([]) plt.subplot(2, 3, 3), plt.imshow(img_back, cmap='gray') plt.title('Low Pass Filter Result'), plt.xticks([]), plt.yticks([]) # 高通滤波 rows, cols = img.shape crow, ccol = int(rows/2), int(cols/2) mask = np.ones((rows, cols), np.uint8) r = 30 cv2.circle(mask, (ccol, crow), r, 0, -1) fshift = fshift * mask f_ishift = np.fft.ifftshift(fshift) img_back = np.fft.ifft2(f_ishift) img_back = np.abs(img_back) plt.subplot(2, 3, 4), plt.imshow(mask, cmap='gray') plt.title('High Pass Filter'), plt.xticks([]), plt.yticks([]) plt.subplot(2, 3, 5), plt.imshow(img_back, cmap='gray') plt.title('High Pass Filter Result'), plt.xticks([]), plt.yticks([]) # 带通滤波 rows, cols = img.shape crow, ccol = int(rows/2), int(cols/2) mask = np.zeros((rows, cols), np.uint8) r_out = 60 r_in = 30 cv2.circle(mask, (ccol, crow), r_out, 255, -1) cv2.circle(mask, (ccol, crow), r_in, 0, -1) fshift = fshift * mask f_ishift = np.fft.ifftshift(fshift) img_back = np.fft.ifft2(f_ishift) img_back = np.abs(img_back) plt.subplot(2, 3, 6), plt.imshow(img_back, cmap='gray') plt.title('Band Pass Filter Result'), plt.xticks([]), plt.yticks([]) # 带阻滤波 rows, cols = img.shape crow, ccol = int(rows/2), int(cols/2) mask = np.ones((rows, cols), np.uint8) r_out = 60 r_in = 30 cv2.circle(mask, (ccol, crow), r_out, 0, -1) cv2.circle(mask, (ccol, crow), r_in, 255, -1) fshift = fshift * mask f_ishift = np.fft.ifftshift(fshift) img_back = np.fft.ifft2(f_ishift) img_back = np.abs(img_back) plt.figure() plt.subplot(1, 2, 1), plt.imshow(img, cmap='gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(1, 2, 2), plt.imshow(img_back, cmap='gray') plt.title('Band Reject Filter Result'), plt.xticks([]), plt.yticks([]) # 同态滤波 img = cv2.imread('image.jpg') img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) rows, cols = img.shape crow, ccol = int(rows/2), int(cols/2) # 频域中心化 img_float32 = np.float32(img) dft = cv2.dft(img_float32, flags=cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) # 构建同态滤波器 a, b = 0.5, 2.0 gamma_l, gamma_h = 0.5, 1.5 H = np.zeros((rows, cols), dtype=complex) for u in range(rows): for v in range(cols): d = np.sqrt((u - crow)**2 + (v - ccol)**2) H[u, v] = (b - a) * (1 - np.exp(-gamma_h * d**2)) + a * np.exp(-gamma_l * d**2) H[u, v] = 1 / H[u, v] # 滤波 F = H * dft_shift f_ishift = np.fft.ifftshift(F) img_back = cv2.idft(f_ishift) img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1]) plt.figure() plt.subplot(1, 2, 1), plt.imshow(img, cmap='gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(1, 2, 2), plt.imshow(img_back, cmap='gray') plt.title('Homomorphic Filter Result'), plt.xticks([]), plt.yticks([]) plt.show() 上述代码实现了以下五种滤波: - 低通滤波:保留低频成分,去除高频成分。结果图像模糊化,细节丢失。 - 高通滤波:保留高频成分,去除低频成分。结果图像增强了边缘和细节。 - 带通滤波:保留某个频率范围内的成分,去除其他频率成分。结果图像只保留某些特定的细节或纹理。 - 带阻滤波:去除某个频率范围内的成分,保留其他频率成分。结果图像去除了某些特定的细节或纹理。 - 同态滤波:去除图像的低频和高频成分,增强中频成分。结果图像亮度和对比度得到了调整,同时也去除了噪声。 需要注意的是,上述代码中使用的是傅里叶变换进行频域滤波。实际上,还有其他的频域滤波方法,如小波变换等。选择何种方法取决于具体应用场景和需求。

最新推荐

基于单片机温度控制系统设计--大学毕业论文.doc

基于单片机温度控制系统设计--大学毕业论文.doc

ROSE: 亚马逊产品搜索的强大缓存

89→ROSE:用于亚马逊产品搜索的强大缓存Chen Luo,Vihan Lakshman,Anshumali Shrivastava,Tianyu Cao,Sreyashi Nag,Rahul Goutam,Hanqing Lu,Yiwei Song,Bing Yin亚马逊搜索美国加利福尼亚州帕洛阿尔托摘要像Amazon Search这样的产品搜索引擎通常使用缓存来改善客户用户体验;缓存可以改善系统的延迟和搜索质量。但是,随着搜索流量的增加,高速缓存不断增长的大小可能会降低整体系统性能。此外,在现实世界的产品搜索查询中广泛存在的拼写错误、拼写错误和冗余会导致不必要的缓存未命中,从而降低缓存 在本文中,我们介绍了ROSE,一个RO布S t缓存E,一个系统,是宽容的拼写错误和错别字,同时保留传统的缓存查找成本。ROSE的核心组件是一个随机的客户查询ROSE查询重写大多数交通很少流量30X倍玫瑰深度学习模型客户查询ROSE缩短响应时间散列模式,使ROSE能够索引和检

如何使用Promise.all()方法?

Promise.all()方法可以将多个Promise实例包装成一个新的Promise实例,当所有的Promise实例都成功时,返回的是一个结果数组,当其中一个Promise实例失败时,返回的是该Promise实例的错误信息。使用Promise.all()方法可以方便地处理多个异步操作的结果。 以下是使用Promise.all()方法的示例代码: ```javascript const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = Promise.resolve(3)

android studio设置文档

android studio默认设置文档

社交网络中的信息完整性保护

141社交网络中的信息完整性保护摘要路易斯·加西亚-普埃约Facebook美国门洛帕克lgp@fb.com贝尔纳多·桑塔纳·施瓦茨Facebook美国门洛帕克bsantana@fb.com萨曼莎·格思里Facebook美国门洛帕克samguthrie@fb.com徐宝轩Facebook美国门洛帕克baoxuanxu@fb.com信息渠道。这些网站促进了分发,Facebook和Twitter等社交媒体平台在过去十年中受益于大规模采用,反过来又助长了传播有害内容的可能性,包括虚假和误导性信息。这些内容中的一些通过用户操作(例如共享)获得大规模分发,以至于内容移除或分发减少并不总是阻止其病毒式传播。同时,社交媒体平台实施解决方案以保持其完整性的努力通常是不透明的,导致用户不知道网站上发生的任何完整性干预。在本文中,我们提出了在Facebook News Feed中的内容共享操作中添加现在可见的摩擦机制的基本原理,其设计和实现挑战,以�

MutableDenseMatrix' object has no attribute 'flatten'

根据提供的引用内容,可以看出这是一个关于Python中矩阵操作的问题。具体来说,'MutableDenseMatrix' object has no attribute 'flatten'的错误提示表明,矩阵对象没有名为'flatten'的属性。因此,我们需要使用其他方法来展平该矩阵对象。 以下是一种可能的解决方案: ```python # 导入必要的库 from sympy import Matrix # 创建一个矩阵对象 mat = Matrix([[1, 2], [3, 4]]) # 将矩阵对象转换为列表 mat_list = mat.tolist() # 将列表展平 flat

MySQL 75道面试题及答案.docx

MySQL 75道面试题及答案.docx

利用脑信号提高阅读理解的信息检索模型探索

380∗→利用脑信号更好地理解人类阅读理解叶紫怡1、谢晓辉1、刘益群1、王志宏1、陈雪松1、张敏1、马少平11北京国家研究中心人工智能研究所计算机科学与技术系清华大学信息科学与技术学院,中国北京yeziyi1998@gmail.com,xiexh_thu@163.com,yiqunliu@tsinghua.edu.cn,wangzhh629@mail.tsinghua.edu.cn,,chenxuesong1128@163.com,z-m@tsinghua.edu.cn, msp@tsinghua.edu.cn摘要阅读理解是一个复杂的认知过程,涉及到人脑的多种活动。然而,人们对阅读理解过程中大脑的活动以及这些认知活动如何影响信息提取过程知之甚少此外,随着脑成像技术(如脑电图(EEG))的进步,可以几乎实时地收集大脑信号,并探索是否可以将其用作反馈,以促进信息获取性能。在本文中,我们精心设计了一个基于实验室的用户研究,以调查在阅读理解过程中的大脑活动。我们的研究结果表明,不同类型�

已有一个已排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中

已有一个已排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中,可以使用二分查找的方法来提高查找效率。具体实现如下: ```python def insert_num(arr, num): left = 0 right = len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == num: arr.insert(mid, num) return arr elif arr[m

基于单片机的语音门铃设计毕业论文.doc

基于单片机的语音门铃设计毕业论文.doc