好的,以下是对图像进行分块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 库显示逆变换后的图像。

Python 图像处理:8x8 分块二维DFT变换和逆变换

原文地址: http://www.cveoy.top/t/topic/bCng 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录