当使用 8x8 的二维 DCT 变换系数矩阵时,保留不同数量系数的重构图像与原始图像的 PSNR 值的完整代码如下:

import numpy as np
import cv2
from skimage.metrics import peak_signal_noise_ratio

# 加载原始图像并将其转换为灰度
image = cv2.imread('original_image.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 进行 8x8 二维 DCT 变换
dct_image = cv2.dct(np.float32(gray_image))
dct_coefficients = np.abs(dct_image)

# 保留不同数量的系数并进行逆 DCT 变换,计算 PSNR 值
keep_coefficients = [1, 2, 4, 6, 8, 10]  # 保留的系数数量
psnr_values = []
for num_coefficients in keep_coefficients:
    # 设置系数
    modified_coefficients = np.zeros((8, 8))
    for i in range(8):
        for j in range(8):
            if i+j < num_coefficients:
                modified_coefficients[i, j] = dct_coefficients[i, j]

    # 逆 DCT 变换
    modified_image = cv2.idct(modified_coefficients)

    # 计算 PSNR
    psnr = peak_signal_noise_ratio(gray_image, modified_image)
    psnr_values.append(psnr)

# 打印结果
print('保留系数数量		PSNR 值')
for i in range(len(keep_coefficients)):
    print(f'{keep_coefficients[i]}			{psnr_values[i]}')

请确保将代码中的 'original_image.jpg' 替换为你的原始图像文件路径。运行代码后,将会打印出不同保留系数数量下的 PSNR 值。

使用 Python 计算 8x8 DCT 变换系数保留数量与 PSNR 的关系

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

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