图片处理(四)傅里叶变换

it2022-05-05  155

基于傅里叶变换的高通及低通 傅里叶变换是将空间域转换成频率域,在空间域中灰度变化梯度在频域率中表现为频率的大小,灰度梯度变化大(频率达)意味着图片约锐化,一般图片中边界位置就是梯度变化较大的地方。 利用傅里叶变换可以实现边界提取,去噪等操作,下面代码实现: 首先低通,低通关键点是做一个mask掩膜,初始化一张图,高频部位是0,低频部位是1,将原频率图与mask乘积去除掉高频部位,从而实现低通

import numpy as np import cv2 image = cv2.imread('test.jpg',0) f = np.fft.fft2(image) fshift = np.fft.fftshift(f) hight,width = image.shape h = int(hight/2) w = int(width/2) mask = np.zeros((hight,width),dtype = np.float32) mask[h-30:h+30,w-30:w+30] = 1 #fshift[h-30:h+30,w-30:w+30] = 0 fshift = fshift*mask img = np.fft.ifftshift(fshift) img = np.fft.ifft2(img) img = np.abs(img) cv2.imshow('test1',img.astype(np.uint8)) cv2.imshow('test',fshift.astype(np.uint8)) cv2.waitKey(0) cv2.destroyWindows()

高通:高通即直接在原频率图中,重置高频部位为0,因为高频部位经过中心化后就在频率图中兴,代码如下:

import numpy as np import cv2 image = cv2.imread('test.jpg',0) f = np.fft.fft2(image) fshift = np.fft.fftshift(f) hight,width = image.shape h = int(hight/2) w = int(width/2) #mask = np.zeros((hight,width),dtype = np.float32) #mask[h-30:h+30,w-30:w+30] = 1 fshift[h-30:h+30,w-30:w+30] = 0 #fshift = fshift*mask img = np.fft.ifftshift(fshift) img = np.fft.ifft2(img) img = np.abs(img) cv2.imshow('test1',img.astype(np.uint8)) cv2.imshow('test',fshift.astype(np.uint8)) cv2.waitKey(0) cv2.destroyWindows()

最新回复(0)