大马强 发表于 2022-3-21 10:33:20

py 图像处理问题

本帖最后由 大马强 于 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)

myqf123 发表于 2022-3-21 11:09:17

路过

伽羅~ 发表于 2022-3-21 11:33:40

{:10_279:}

Passepartout 发表于 2022-3-21 12:08:31

{:10_249:}

C丁洞杀O 发表于 2022-3-21 12:42:07

这还有图像?

大马强 发表于 2022-3-21 15:31:22

C丁洞杀O 发表于 2022-3-21 12:42
这还有图像?

{:10_266:}

sls111 发表于 2022-3-22 09:45:08

你这题可以直接问老师{:10_256:}

大马强 发表于 2022-3-27 21:42:15

sls111 发表于 2022-3-22 09:45
你这题可以直接问老师

其他人和我结果一样{:10_256:}

hy2009090003 发表于 2022-3-30 17:20:02

{:5_90:}
页: [1]
查看完整版本: py 图像处理问题