求M文件,直接求图像的峰值信噪比(无论灰度和彩色)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求M文件,直接求图像的峰值信噪比(无论灰度和彩色)相关的知识,希望对你有一定的参考价值。

参考技术A >> close all
>> clear all
>> I=imread('lena.bmp');
>> J=imnoise(I,'gaussian',0.01,0.005);
>> A=imread('lena.bmp');
[M,N]=size(A);
B = imread('J.bmp');
a=double(A);
b=double(B);
sum=0;
for i=1:M;
for j=1:N;
sum=sum+(a(i,j)-b(i,j))^2;
end;
end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]);
disp(['输入数据的PSNR为:',num2str(psnrValue)]);

输入数据的MSE为:7915.4387
输入数据的PSNR为:9.1461

以上是MATLAB程序 及其输出结果 M文件可为
function PSNR = PSNR(A,B)
[M,N]=size(A);
x=double(A);
y=double(B);
sum=0;
for i=1:M;
for j=1:N;
sum=sum+(x(i,j)-y(i,j))^2;
end;
end;
mseValue=sum/(M*N);
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]);
disp(['输入数据的PSNR为:',num2str(psnrValue)]);追问

不分灰度和彩色吗?

追答

上面的程序是灰度图像的 对彩色图像不适用嗯

追问

彩色的程序怎么写?

参考技术B [a,b,c]=size(I);%i为所要求的图片
snr=0;
if c==1;%灰度图像
Ps=sum(sum((I-mean(mean(I))).^2));%原始信号
Pn=sum(sum((I-In).^2))%;in为噪声信号
snr=10*log10(Ps/Pn);
elseif c==3;%彩色图像for i=1:3
Ps=sum(sum((I(:,:,i)-mean(mean(I(:,:,i)))).^2));%原始信号
Pn=sum(sum((I(:,:,i)-In(:,:,i)).^2));;%in为噪声信号
snr=snr+10*log10(Ps/Pn);
end
snr=snr/3;
end

这个代码涉及到的信噪比是新的图像与原始图像的比较来自:求助得到的回答
参考技术B function [ PSNR,MSE ] = Psnr( im1,im2 )

%------------------------计算峰值信噪比程序———————————————-----
% im1 : the original image matrix
% im2 : the modified image matrix

if (size(im1))~=(size(im2))
error('错误:两个输入图象的大小不一致');
end

[m,n] = size(im1);
A = double(im1);
B = double(im2);
D = sum( sum( (A-B).^2 ) );%||A-B||^2
MSE = D / (m * n);
if D == 0
error('两幅图像完全一样');
PSNR = 200;
else
PSNR = 10*log10( (255^2) / MSE );
end追问

有处理彩色图像的吗?

python求不同分辨率图像的峰值信噪比,一文搞懂

可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。

文章目录

什么是峰值信噪比

峰值信噪比(Peak Signal to Noise Ratio,PSNR)是衡量图像质量的常用指标,它表示图像中信号和噪声的比值。通常,较高的 PSNR 值表示图像质量较高。

PSNR 的公式如下:

PSNR = 10 * log10(MAX^2 / MSE)

其中,MAX 是图像的最大亮度(一般为 255),MSE 是图像的均方误差,表示原图像和处理后的图像的差异。

如果需要在 Python 代码中计算 PSNR,可以使用 NumPy 库,并使用它提供的平方误差函数 (numpy.mean((A-B)**2)),然后计算 PSNR 值。还可以使用 OpenCV 库中的 PSNR 函数,它可以直接计算 PSNR 值:

import cv2
import numpy as np

img1 = cv2.imread("demo1.jpg")
img2 = cv2.imread("demo2.jpg")

psnr = cv2.PSNR(img1, img2)
print("PSNR:", psnr)

在计算 PSNR 之前,图像必须具有相同的分辨率,并且必须使用相同的颜色空间(例如,都是灰度图或彩色图)。

PSNR 峰值信噪比补充说明

PSNR 是一个非常常见的图像质量评估指标,广泛应用于图像压缩、图像处理、图像识别等领域。

需要注意,PSNR 仅考虑图像的像素均方误差,并不考虑其他的图像质量因素,例如:图像的细节和纹理等。
因此,在评估图像质量时,可以使用其他图像质量评估指标,例如:结构相似度(SSIM),以获得更全面的评估结果。

使用 OpenCV 库来实现这个任务

开始前需要先读入图像的灰度图。

import cv2
import numpy as np

img = cv2.imread("demo.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

使用 NumPy 的 mean 和 std 函数计算图像的均值和标准差:

mean, std = np.mean(gray), np.std(gray)

最后,计算峰值信噪比:

PSNR = 20 * np.log10(255 / np.sqrt(mean))

运行代码得到如下结果:

峰值信噪比的计算基于图像的灰度图,因此可以直接对灰度图进行计算。

PSNR 的计算值受图像的亮度影响

如果需要比较不同分辨率的图像,可以先将图像调整到相同的亮度,以便更准确地评估图像质量。

以下是如何使用 Python 和 OpenCV 将图像调整到相同亮度的代码示例:

import cv2
import numpy as np

img1 = cv2.imread("demo.jpg")
img2 = cv2.imread("demo1.jpg")

img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

img1 = cv2.normalize(img1, None, 0, 255, cv2.NORM_MINMAX)
img2 = cv2.normalize(img2, None, 0, 255, cv2.NORM_MINMAX)

psnr = cv2.PSNR(img1, img2)
print("PSNR:", psnr)

上面的代码将两张图像转换为灰度图,并使用 OpenCV 的 normalize 函数将其调整到相同的亮度。随后可以计算 PSNR。

计算不同分辨率图像的 PSNR

使用下面的代码计算不同分辨率图像的 PSNR:

import cv2
import numpy as np

img1 = cv2.imread("demo1.jpg")
img2 = cv2.imread("demo2.jpg")

img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

img1 = cv2.resize(img1, (100, 100))
img2 = cv2.resize(img2, (100, 100))

img1 = cv2.normalize(img1, None, 0, 255, cv2.NORM_MINMAX)
img2 = cv2.normalize(img2, None, 0, 255, cv2.NORM_MINMAX)

psnr = cv2.PSNR(img1, img2)
print("PSNR:", psnr)

上面的代码先将两张图像转换为灰度图,然后使用 OpenCV 的 resize() 函数将图像的分辨率调整到相同。
接下来,使用上面提到的代码将图像调整到相同的亮度,最后计算 PSNR。

python 求不同分辨率图像的峰值信噪比 | 其他知识点补充

  • PSNR 的应用:PSNR 常常被用来评估图像压缩、图像处理、图像修复等技术的质量。

  • PSNR 的限制:尽管 PSNR 是一个有用的指标,但它并不能完全反映图像质量,因为它不能评估图像细节的损失。

  • 其他评估指标:除了 PSNR 之外,还有其他评估图像质量的指标,例如:SSIM(结构相似性指数)、MSE(均方误差)等。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 853 篇原创博客

👇 全网 6000+人正在学习的 爬虫专栏 👇👇👇👇

以上是关于求M文件,直接求图像的峰值信噪比(无论灰度和彩色)的主要内容,如果未能解决你的问题,请参考以下文章

matlab对图像去噪后怎么求信噪比

matlab如何求一副图像的信噪比SNR与均方根误差RMSE

matlab中如何求一个图像的灰度级

评价图像质量的两个重要指标(MSE和PSNR)【转】

急求灰度图像LBP特征提取matlab源代码

图像质量评价指标之 PSNR 和 SSIM