分别实现基于不同大小模板(如 33,77)的高斯滤波、中值滤波的图像 平滑,显示并保存滤波结果;并且估计这些滤波后的图像相对于真值图像的 MSE 值、PSNR 值、以及 SSIM 值.
时间: 2023-06-08 16:07:26 浏览: 114
您好,感谢您的提问!针对您的问题,我可以提供如下回答:
1. 高斯滤波和中值滤波的图像平滑实现
高斯滤波和中值滤波都是常用的图像平滑滤波算法。以下是基于不同大小的模板进行高斯滤波和中值滤波的图像平滑示例程序:
(1)高斯滤波实现代码:
```python
import cv2
import numpy as np
# 加载图像
img = cv2.imread("lena.jpg")
# 定义卷积核大小
kernel_sizes = [3, 7, 11]
# 高斯滤波
for kernel_size in kernel_sizes:
# 生成卷积核
kernel = cv2.getGaussianKernel(kernel_size, 0)
kernel = np.outer(kernel, kernel.transpose())
# 图像卷积
blur_img = cv2.filter2D(img, -1, kernel)
# 显示结果
cv2.imshow("GaussianBlur_" + str(kernel_size), blur_img)
cv2.waitKey(0)
# 保存结果
cv2.imwrite("GaussianBlur_" + str(kernel_size) + ".jpg", blur_img)
```
(2)中值滤波实现代码:
```python
import cv2
import numpy as np
# 加载图像
img = cv2.imread("lena.jpg")
# 定义卷积核大小
kernel_sizes = [3, 7, 11]
# 中值滤波
for kernel_size in kernel_sizes:
# 图像卷积
blur_img = cv2.medianBlur(img, kernel_size)
# 显示结果
cv2.imshow("MedianBlur_" + str(kernel_size), blur_img)
cv2.waitKey(0)
# 保存结果
cv2.imwrite("MedianBlur_" + str(kernel_size) + ".jpg", blur_img)
```
2. 估计滤波后图像的 MSE 值、PSNR 值、以及 SSIM 值
为了估计高斯滤波和中值滤波后图像的质量,我们可以使用三个常用的图像质量评价指标:MSE、PSNR 和 SSIM。以下是基于不同大小模板进行高斯滤波和中值滤波的图像平滑评价示例程序:
```python
import cv2
import numpy as np
from skimage.measure import compare_mse, compare_psnr, compare_ssim
# 加载原始图像和模糊图像
img = cv2.imread("lena.jpg")
blur_sizes = [3, 7, 11]
blur_imgs = []
for blur_size in blur_sizes:
# 高斯滤波
kernel = cv2.getGaussianKernel(blur_size, 0)
kernel = np.outer(kernel, kernel.transpose())
blur_img = cv2.filter2D(img, -1, kernel)
blur_imgs.append(blur_img)
# 中值滤波
blur_img = cv2.medianBlur(img, blur_size)
blur_imgs.append(blur_img)
# 计算评价指标,并显示结果
for i, blur_size in enumerate(blur_sizes):
# 计算MSE、PSNR和SSIM
blur_gaussian = blur_imgs[i*2]
blur_median = blur_imgs[i*2+1]
mse_gaussian = compare_mse(img, blur_gaussian)
mse_median = compare_mse(img, blur_median)
psnr_gaussian = compare_psnr(img, blur_gaussian, data_range=255)
psnr_median = compare_psnr(img, blur_median, data_range=255)
ssim_gaussian = compare_ssim(img, blur_gaussian, multichannel=True)
ssim_median = compare_ssim(img, blur_median, multichannel=True)
# 显示评价结果
print("GaussianBlur_" + str(blur_size) + ": ")
print("MSE = ", mse_gaussian)
print("PSNR = ", psnr_gaussian)
print("SSIM = ", ssim_gaussian)
print()
print("MedianBlur_" + str(blur_size) + ": ")
print("MSE = ", mse_median)
print("PSNR = ", psnr_median)
print("SSIM = ", ssim_median)
print()
```
以上就是对您提出问题的回答,希望能够解决您的问题。如果您还有其他问题,欢迎再次提问!
阅读全文