Python 图像处理:8x8 分块二维DFT变换和逆变换
好的,以下是对图像进行分块8x8的二维DFT变换、只保留幅度并进行逆变换、最后显示图像的代码示例:
import numpy as np
import cv2
import matplotlib.pyplot as plt
# 加载BMP图像
image_path = 'your_image.bmp' # 替换为实际的BMP图像路径
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
# 分块大小
block_size = 8
# 获取图像大小
height, width = image.shape
# 计算分块数目
num_blocks_height = height // block_size
num_blocks_width = width // block_size
# 初始化幅度数组
magnitude_array = np.zeros_like(image, dtype=np.float32)
# 逐个分块进行二维DFT变换,提取幅度
for i in range(num_blocks_height):
for j in range(num_blocks_width):
# 获取当前分块
block = image[i * block_size: (i + 1) * block_size, j * block_size: (j + 1) * block_size]
# 二维DFT变换
dft_block = np.fft.fft2(block)
# 提取幅度谱
dft_magnitude, dft_phase = cv2.cartToPolar(dft_block.real, dft_block.imag, angleInDegrees=False)
# 只保留幅度
dft_magnitude = np.abs(dft_magnitude)
# 逆变换
block_inverse = np.fft.ifft2(dft_magnitude)
# 更新幅度数组
magnitude_array[i * block_size: (i + 1) * block_size, j * block_size: (j + 1) * block_size] = np.abs(block_inverse)
# 显示图像
plt.imshow(magnitude_array, cmap='gray')
plt.title('Inverse DFT')
plt.show()
请将 your_image.bmp 替换为实际的BMP图像路径。运行代码后,将显示进行逆变换后的图像。
这段代码首先加载BMP图像,并定义了分块大小为8x8。然后,获取图像的高度和宽度,并计算出相应的分块数目。接下来,通过循环逐个分块进行二维DFT变换,并提取幅度谱。然后,只保留幅度信息,并进行逆变换得到每个分块的逆变换结果。最后,将每个分块的幅度逆变换结果更新到幅度数组中。最后,使用 matplotlib.pyplot 库显示逆变换后的图像。
原文地址: http://www.cveoy.top/t/topic/bCng 著作权归作者所有。请勿转载和采集!