|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 大马强 于 2022-3-21 10:34 编辑
老师给的一个实验任务
通过对fourier变换系数幅值设置阈值T,使得小于该值的系数为0,逆变换得到重构图像
我用的是 cv2.threshold()函数来设置阈值T,来实现这实验的要求
因为幅值关系到图像的颜色深浅,我猜测T越大图像越暗,但最后结果是原图几乎一样
然后三个地方来输出相关数据
第一个是输出经过cv2.threshold()函数筛选的幅值
第二个是输出实部数据
第三个是输出逆变换后得到新图像的矩阵
第一个和第二个确实是经过筛选了,但新图像的矩阵和原来的几乎一样
代码附上
- import cv2
- import numpy as np
- import matplotlib.pyplot as plt
- import os
- img = cv2.imread("./IU49.jpg", cv2.IMREAD_GRAYSCALE) # 直接读为灰度图像
- thresh = 220 # 设置阈值
- # 傅里叶变换
- f1 = np.fft.fft2(img)
- f1shift = np.fft.fftshift(f1)
- f1_A = np.abs(f1shift) # 取振幅
- f1_P = np.angle(f1shift) # 取相位
- # print(f1_A)
- retval, new_f1_A = cv2.threshold(
- f1_A, thresh, 255, cv2.THRESH_TOZERO) # 大于阈值的部分不变,其余部分变为0
- print(new_f1_A) #
- img_new1_f = np.zeros(img.shape, dtype=complex)
- img1_real = new_f1_A * np.cos(f1_P) # 取实部
- img1_imag = new_f1_A * np.sin(f1_P) # 取虚部
- img_new1_f.real = np.array(img1_real)
- img_new1_f.imag = np.array(img1_imag)
- print("筛选后幅值\n", img1_real)
- print("原始幅值\n", f1_A * np.cos(f1_P))
- f3shift = np.fft.ifftshift(img_new1_f) # 对新的进行逆变换
- img_new1 = np.fft.ifft2(f3shift)
复制代码
你这题可以直接问老师 
|
评分
-
查看全部评分
|