批量比较图像的PSNR和SSIM(Python和Matlab两种方法)

文章介绍了如何使用Python和Matlab对RGB图像进行灰度转换,并计算PSNR和SSIM以评估图像质量。分别展示了两种方法中处理彩色图像和灰度图像的步骤,并强调了Python的计算速度优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了使用方便,可以将原代码文件和两个图片文件夹均存放在一个目录之中。

1.使用Python将图像转换为灰度图像对比PSNR和SSIM

     注意事项:(1)使用前先在环境中安装需要的包;

                       (2)本段代码先将RGB图像转换为灰度图像,忽略了色彩等信息,

                                请根据个人需求选取合适的方法。

import cv2
import os
import numpy as np
from skimage.metrics import structural_similarity as ssim
from skimage.metrics import peak_signal_noise_ratio as psnr

# 读取两个文件夹中的图片
folder1 = "ground_truth"   #这里替换成你的文件夹路径
folder2 = "fake"           #这里替换成你的文件夹路径

files1 = os.listdir(folder1)
files2 = os.listdir(folder2)

psnr_values = []
ssim_values = []

for idx, (file1, file2) in enumerate(zip(files1, files2), start=1):
    img1 = cv2.imread(os.path.join(folder1, file1))
    img2 = cv2.imread(os.path.join(folder2, file2))

    # 转换为灰度图像
    gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
    gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

    # 计算 PSNR
    psnr_val = psnr(gray1, gray2)
    psnr_values.append(psnr_val)

    # 计算 SSIM
    ssim_val, _ = ssim(gray1, gray2, full=True)
    ssim_values.append(ssim_val)

    print(f"Processing pair {idx}: {file1} and {file2}")

# 计算平均值
avg_psnr = np.mean(psnr_values)
avg_ssim = np.mean(ssim_values)

print(f"Average PSNR: {avg_psnr}, Average SSIM: {avg_ssim}")

2.使用Python直接对比彩色RGB图像的PSNR和SSIM

     注意事项:(1)使用前先在环境中安装需要的包;

                       (2)本段代码适用于对比彩色图像的PSNR和SSIM,与灰度图像的计算结果

                                会有些许出入,但是差异不算大;

                       (3)本段python代码计算彩色RGB图像的PSNR和SSIM结果与基于Matlab的

                               结果基本一致,差异可以小到忽略不计;

                       (4)和基于Matlab的方法相比,使用Python代码计算速度会更快。

import cv2
import os
import numpy as np
from skimage.metrics import structural_similarity as ssim
from skimage.metrics import peak_signal_noise_ratio as psnr

# 读取两个文件夹中的图片
folder1 = "ground_truth2"
folder2 = "fake2"

files1 = os.listdir(folder1)
files2 = os.listdir(folder2)

psnr_values = []
ssim_values = []

for idx, (file1, file2) in enumerate(zip(files1, files2), start=1):
    img1 = cv2.imread(os.path.join(folder1, file1))
    img2 = cv2.imread(os.path.join(folder2, file2))

    win_size = 3   #win_size可以是3,5,7。如果你使用win_size=7出现报错,可以替换为5或3,直到没 
                   #有报错为止

    # 计算 PSNR
    psnr_val = psnr(img1, img2)
    psnr_values.append(psnr_val)

    # 计算 SSIM
    ssim_val, _ = ssim(img1, img2, multichannel=True, full=True, win_size=win_size)
    ssim_values.append(ssim_val)

    print(f"Processing pair {idx}: {file1} and {file2}")

# 计算平均值
avg_psnr = np.mean(psnr_values)
avg_ssim = np.mean(ssim_values)

print(f"Average PSNR: {avg_psnr}, Average SSIM: {avg_ssim}")

3.使用Matlab直接对比彩色RGB图像的PSNR和SSIM

     注意事项:(1)本方法的计算过程略耗时;

                       (2)计算结果与使用Pyhton的方法的结果几乎一致。

% 原图文件夹路径
originalFolder = 'ground_truth';

% 处理后图片文件夹路径
processedFolder = 'fake';

% 获取原图文件夹中的所有图片文件名
originalFiles = dir(fullfile(originalFolder, '*.png')); % 假设图片格式为PNG,可以根据自己的 
                                                        %需要替换为jpg等格式

% 初始化PSNR和SSIM的总和
%psnrSum = 0;
ssimSum = 0;

% 遍历原图文件夹中的每个图片
for i = 1:length(originalFiles)
    % 构建原图和处理后图片的完整文件路径
    originalFilePath = fullfile(originalFolder, originalFiles(i).name);
    processedFilePath = fullfile(processedFolder, originalFiles(i).name);
    
    % 读取原图和处理后图片
    originalImage = imread(originalFilePath);
    processedImage = imread(processedFilePath);
    
    % 计算PSNR
    psnrValue = psnr(processedImage, originalImage);
    
    % 计算SSIM
    %[~, ssimValue] = ssim(processedImage, originalImage);
    ssimValue = ssim(processedImage, originalImage);
    
    % 累加PSNR和SSIM的值
    psnrSum = psnrSum + psnrValue;
    ssimSum = ssimSum + ssimValue;
    
    fprintf('Processed image pair: %d/%d\n', i, length(originalFiles));
end

% 计算平均PSNR和SSIM
averagePSNR = psnrSum / length(originalFiles);
averageSSIM = ssimSum / length(originalFiles);

% 显示平均PSNR和SSIM值
fprintf('Average PSNR: %.2f dB\n', averagePSNR);
fprintf('Average SSIM: %.4f\n', averageSSIM);

                       

深度卷积神经网络(DCNNs)已成为图像去噪领域的重要工具,能够有效提升去噪效果准确性。为了帮助你在PythonMatlab环境中实现这一目标,并运用PSNRSSIM进行性能评估,我推荐查看《深度学习图像去噪实现:PythonMatlab源码及数据集》。 参考资源链接:[深度学习图像去噪实现:PythonMatlab源码及数据集](https://wenku.csdn.net/doc/24kxxpve5z)Python中,你可以使用TensorFlow或PyTorch等深度学习框架来构建DCNNs模型。一般步骤包括构建网络结构、准备训练数据集(如Set12数据集)、定义损失函数(常用的是均方误差MSE),并采用适当的优化算法(如Adam)进行训练。以下是一个简化的示例代码框架(代码细节、流程图扩展内容省略): 在Matlab中,你可以利用内置的深度学习工具箱,通过定义一个深度神经网络架构并使用内置的训练函数来完成去噪任务。Matlab同样支持从图像数据集中加载数据、定义配置网络以及训练模型。 在去噪效果评估方面,PSNRSSIM是两个常用的指标。PSNR通过计算图像重建误差来衡量,值越大表示噪声减少的越多,图像质量越好;SSIM则更关注图像的结构信息,其值也在一定程度上反映了图像的视觉质量。在Python中,你可以使用skimage库中的函数计算这两个指标;在Matlab中,则可以使用内置函数或相关工具箱来实现。 通过这个实战项目,你将掌握如何使用DCNNs进行图像去噪,并能独立地评估去噪效果。若希望深入学习更多关于深度学习、图像去噪以及性能评估方法,建议查看《深度学习图像去噪实现:PythonMatlab源码及数据集》。这份资源不仅为你提供了实践案例,还包括了源码数据集,帮助你更全面地掌握图像去噪的相关知识。 参考资源链接:[深度学习图像去噪实现:PythonMatlab源码及数据集](https://wenku.csdn.net/doc/24kxxpve5z)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W&W_O.o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值