matlab 计算图像的峰值信噪比并显示
时间: 2023-06-17 09:07:50 浏览: 119
计算图像的峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)可以使用MATLAB内置函数`psnr`实现。以下是一个示例代码:
```matlab
% 读取图像
img = imread('lena.jpg');
% 添加高斯噪声
noisy_img = imnoise(img, 'gaussian', 0.02);
% 计算峰值信噪比
psnr_value = psnr(img, noisy_img);
% 显示图像和峰值信噪比
figure;
subplot(1,2,1); imshow(img); title('原始图像');
subplot(1,2,2); imshow(noisy_img); title('加噪图像, PSNR=' + string(psnr_value));
```
在这个示例中,我们首先读取了名为`lena.jpg`的图像。然后使用`imnoise`函数添加了高斯噪声,噪声水平设为0.02。接着,使用`psnr`函数计算了原始图像和加噪图像之间的峰值信噪比,并将结果存储在变量`psnr_value`中。最后,使用`subplot`和`imshow`函数分别显示了原始图像和加噪图像,并在加噪图像下方显示了计算得到的峰值信噪比。
注意,PSNR的值越高,表示图像质量越好,通常认为PSNR值在30以上的图像质量较高。
相关问题
matlab计算图片峰值信噪比
### 使用 MATLAB 计算图像的峰值信噪比 (PSNR)
在 MATLAB 中,可以编写函数来计算两幅图像之间的峰值信噪比 (PSNR) 和均方根误差 (MSE)。当输入 `Y` 为空时,默认将 `X` 与其本身进行比较[^1]。
下面是一个用于计算 PSNR 的 MATLAB 函数实现:
```matlab
function [PSNR, MSE] = psnr(X, Y)
% 如果输入 Y 为空,则视为 X 与其本身来计算 PSNR、MSE
if isempty(Y)
Y = X;
end
% 获取图像尺寸
[m, n] = size(X);
% 计算均方根误差 MSE
MSE = sum(sum((double(X) - double(Y)).^2)) / (m * n);
% 定义最大像素值(对于8位灰度图像是255)
MAX_I = 255;
% 计算 PSNR
PSNR = 10 * log10(MAX_I^2 / MSE);
end
```
此代码定义了一个名为 `psnr` 的函数,该函数接收两个参数 `X` 和 `Y`,分别代表原始图像和处理后的图像。如果未提供第二个参数 `Y`,则默认将其设置为等于第一个参数 `X`。接着通过计算均方根误差 MSE 来进一步求得 PSNR 值,并返回这两个指标的结果。
为了验证噪声图像的质量,还可以调用上述编写的 `psnr` 函数并传入相应的图片数据作为参数,从而获得其对应的 PSNR 数值[^2]。
matlab 计算图片峰值信噪比的程序
以下是 Matlab 计算图像峰值信噪比(PSNR)的示例代码:
```matlab
% 读取原图和处理后的图像
original_image = imread('original_image.jpg');
processed_image = imread('processed_image.jpg');
% 计算峰值信噪比(PSNR)
mse = sum(sum((double(original_image) - double(processed_image)).^2)) / (size(original_image, 1) * size(original_image, 2));
psnr = 10 * log10(255^2 / mse);
% 显示结果
fprintf('PSNR = %f dB\n', psnr);
```
注意,上述示例中的“original_image.jpg”和“processed_image.jpg”需要替换为实际的图像文件名。此外,该代码假设图像的灰度级范围为0到255。如果你的图像的灰度级范围不同,请相应地修改代码。
阅读全文
相关推荐














