scr = cv2.imread('first.jpg') scr = cv2.cv2tColor(scr, cv2.COLOR_BGR2GRAY) #转换为灰度图像 dft = cv2.dft(np.float32(scr), flags=cv2.DFT_COMPLEX_OUTPUT) #傅里叶变换 dft_shift = np.fft.fftshift(dft) # 零频域移到频谱中心 rows, cols = scr.shape[:2] sigma2 = 0.01 x, y = np.mgrid[-1:1:2.0 / rows, -1:1:2.0 / cols] z = 1 / (2 * np.pi * sigma2) * np.exp(-(x ** 2 + y ** 2) / (2 * sigma2)) zNorm = np.uint8(cv2.normalize(z, None, 0, 255, cv2.NORM_MINMAX)) # 归一化为 [0,255] maskGauss = np.zeros((rows, cols, 2), np.uint8) maskGauss[:, :, 0] = zNorm maskGauss[:, :, 1] = zNorm fshift = dft_shift * maskGauss # mask与频域进行点乘 f_ishift = np.fft.ifftshift(fshift) # 将零频域移到左上角 img_back = cv2.idft(f_ishift) # 转换为空间域 img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1]) max = np.max(img_back) min = np.min(img_back) res = np.zeros((rows, cols), dtype="uint8") # 高斯滤波结果 for i in range(rows): for j in range(cols): res[i, j] = 255 * (img_back[i, j] - min) / (max - min) #归一化为[0, 255]
时间: 2023-06-24 22:05:19 浏览: 115
这段代码的作用是对一张图片进行高斯滤波。首先,使用OpenCV库中的cv2.imread()函数读取图片,然后使用cv2.cvtColor()函数将图片转换为灰度图像。接着,使用cv2.dft()函数对灰度图像进行傅里叶变换,将傅里叶变换结果移动到频谱中心。然后,定义一个高斯滤波器,使用np.mgrid()函数生成高斯滤波器的权重矩阵z。该矩阵归一化后作为mask与频域进行点乘,得到fshift。使用np.fft.ifftshift()函数将零频域移到左上角,使用cv2.idft()函数将f_ishift转换为空间域。最后,将结果归一化到[0, 255]范围内。
阅读全文