Python 实现 8x8 分块二维 DFT 变换:BMP 图像处理
以下是修改后的整体代码,使用 Python 和 OpenCV 库对 BMP 图像进行 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)
height, width = image.shape
# 分块8x8的二维DFT变换
dft_image = np.zeros_like(image, dtype=np.complex128)
for i in range(0, height, 8):
for j in range(0, width, 8):
block = np.float32(image[i:i+8, j:j+8])
dft_block = cv2.dft(block, flags=cv2.DFT_COMPLEX_OUTPUT)
dft_image[i:i+8, j:j+8] = dft_block[:, :, 0] + 1j * dft_block[:, :, 1]
# 保留幅度并进行逆变换
dft_magnitude = np.abs(dft_image)
dft_magnitude_scaled = (dft_magnitude / np.max(dft_magnitude)) * 255
dft_inverse = cv2.idft(dft_magnitude_scaled, flags=cv2.DFT_SCALE)
dft_inverse = np.abs(dft_inverse).astype(np.uint8)
# 显示图像
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.subplot(1, 2, 2)
plt.imshow(dft_inverse, cmap='gray')
plt.title('Inverse DFT')
plt.show()
请将 'your_image.bmp' 替换为实际的 BMP 图像路径。运行代码后,将在一个窗口中显示原始图像和进行逆变换后的图像。
这段代码加载 BMP 图像并将其转换为灰度图像。然后,对图像进行 8x8 二维 DFT 变换,并计算幅度谱。接下来,我们通过缩放幅度值,将幅度范围映射到 0 到 255 之间。然后,使用缩放后的幅度谱进行逆变换,并将逆变换后的图像转换为 np.uint8 类型以便显示。
最后,使用 matplotlib.pyplot 库显示原始图像和逆变换后的图像。
原文地址: https://www.cveoy.top/t/topic/bzdO 著作权归作者所有。请勿转载和采集!