python实现求图像的峰值信噪比和均方误差
时间: 2024-02-12 16:02:41 浏览: 125
Python中实现求图像的峰值信噪比和均方误差可以使用NumPy和OpenCV库。
下面是一个示例代码,假设原始图像为lena.bmp,压缩后的图像为lena_compressed.bmp:
```python
import cv2
import numpy as np
# 读取原始图像和压缩后的图像
img1 = cv2.imread("lena.bmp")
img2 = cv2.imread("lena_compressed.bmp")
# 计算均方误差
mse = np.mean((img1 - img2) ** 2)
# 计算峰值信噪比
psnr = cv2.PSNR(img1, img2)
print("均方误差: ", mse)
print("峰值信噪比: ", psnr)
```
需要注意的是,OpenCV库中提供了直接计算峰值信噪比的函数cv2.PSNR(),可以方便地计算图像的PSNR值。
相关问题
利用skimage实现中值滤波器对加了高斯噪声的lena图像进行去噪并且计算原图与去噪图像的峰值信噪比和均方误差还有结构相似性
好的,以下是使用skimage实现中值滤波器对加了高斯噪声的lena图像进行去噪并计算相关指标的Python代码:
```python
import numpy as np
from skimage import io, color, util, img_as_ubyte
from skimage.filters import median
from skimage.metrics import peak_signal_noise_ratio, mean_squared_error, structural_similarity
# 读取图像并加入高斯噪声
img = io.imread('lena.png')
img_noise = util.random_noise(img, mode='gaussian', var=0.01)
# 中值滤波器去噪
img_med = median(img_noise.astype(np.uint8), selem=np.ones((3, 3)))
# 将图像转换为8位整型
img = img_as_ubyte(img)
img_noise = img_as_ubyte(img_noise)
img_med = img_as_ubyte(img_med)
# 计算指标
psnr = peak_signal_noise_ratio(img, img_med)
mse = mean_squared_error(img, img_med)
ssim = structural_similarity(color.rgb2gray(img), color.rgb2gray(img_med))
# 输出指标结果
print('PSNR: ', psnr)
print('MSE: ', mse)
print('SSIM: ', ssim)
# 显示图像
io.imshow_collection([img, img_noise, img_med])
io.show()
```
运行以上代码,可以得到输出的指标结果和显示去噪后的图像。请确保在运行代码前,已经将lena图像保存在当前工作目录下,并且安装了skimage库。
pytion实现利用BRDNet对添加了椒盐噪声和高斯噪声的Lena图像进行去噪并输出峰值信噪比和均方误差
好的,BRDNet是一种基于深度学习的图像去噪方法,可以用于去除不同类型的噪声。以下是使用Python实现利用BRDNet对添加了椒盐噪声和高斯噪声的Lena图像进行去噪并输出峰值信噪比和均方误差的示例代码:
首先,需要安装BRDNet模型和相关的Python库,可以使用以下命令进行安装:
```
pip install BRDNet
pip install opencv-python
```
接着,可以使用以下代码对添加椒盐噪声和高斯噪声的Lena图像进行去噪:
```python
import cv2
import numpy as np
from BRDNet import BRDNet
from BRDNet.utils import add_noise
# 加载BRDNet模型
model = BRDNet()
# 读取lena图像并添加椒盐噪声和高斯噪声
img = cv2.imread('lena.png', cv2.IMREAD_GRAYSCALE).astype(np.float32) / 255.0
noise_salt_pepper = add_noise(img, 'salt_pepper', noise_param=0.05)
noise_gaussian = add_noise(img, 'gaussian', noise_param=0.1)
# 对椒盐噪声图像进行去噪并输出峰值信噪比和均方误差
img_denoised_salt_pepper = model.denoise(noise_salt_pepper)
psnr_salt_pepper = cv2.PSNR(img, img_denoised_salt_pepper, 1.0)
mse_salt_pepper = np.mean((img - img_denoised_salt_pepper) ** 2)
print('Salt and pepper noise:')
print('PSNR: {:.2f} dB'.format(psnr_salt_pepper))
print('MSE: {:.4f}'.format(mse_salt_pepper))
# 对高斯噪声图像进行去噪并输出峰值信噪比和均方误差
img_denoised_gaussian = model.denoise(noise_gaussian)
psnr_gaussian = cv2.PSNR(img, img_denoised_gaussian, 1.0)
mse_gaussian = np.mean((img - img_denoised_gaussian) ** 2)
print('Gaussian noise:')
print('PSNR: {:.2f} dB'.format(psnr_gaussian))
print('MSE: {:.4f}'.format(mse_gaussian))
# 显示原始图像、加噪图像和去噪图像
cv2.imshow('Original', img)
cv2.imshow('Salt and pepper noise', noise_salt_pepper)
cv2.imshow('Denoised (salt and pepper)', img_denoised_salt_pepper)
cv2.imshow('Gaussian noise', noise_gaussian)
cv2.imshow('Denoised (gaussian)', img_denoised_gaussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注意:BRDNet模型的运行速度可能较慢,需要一些时间才能完成去噪操作。另外,如果您的电脑没有GPU,可以考虑使用Colab等云平台来运行该代码。
阅读全文