用python给灰度图像加高斯噪声再去除,计算去噪前后的图像对比度?
时间: 2023-12-02 22:02:42 浏览: 276
可以使用Python中的OpenCV库来实现对灰度图像的加高斯噪声和去噪操作,同时使用skimage库来计算图像对比度。
首先,加载图像并将其转换为灰度图像:
```python
import cv2
import numpy as np
from skimage.measure import compare_ssim
# 加载图像并转换为灰度图像
img = cv2.imread('lena.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
接下来,可以使用OpenCV的`randn`函数来生成高斯噪声,并添加到灰度图像中:
```python
# 生成高斯噪声
mean = 0
var = 10
sigma = var ** 0.5
noise = np.random.randn(gray.shape[0], gray.shape[1]) * sigma + mean
noise = noise.reshape(gray.shape)
# 添加高斯噪声
noisy = gray + noise.astype(np.uint8)
```
这里使用了均值为0,方差为10的高斯噪声,并将其添加到灰度图像中,得到了添加噪声后的图像`noisy`。
接下来,可以使用OpenCV的`fastNlMeansDenoising`函数来对加噪图像进行去噪处理:
```python
# 去噪
denoised = cv2.fastNlMeansDenoising(noisy, None, 10, 7, 21)
```
这里使用了快速非局部均值去噪(fastNlMeansDenoising),其中第二个参数为输出图像(为None时,函数会自动创建一个与输入图像大小和类型相同的输出图像)。第三个参数是滤波器强度,第四个参数是相邻像素之间的距离(越大表示平滑的区域越大),第五个参数是搜索窗口的大小。
最后,可以使用skimage库中的`compare_ssim`函数来计算去噪前后的图像对比度(结构相似性指数):
```python
# 计算对比度
score1 = compare_ssim(gray, noisy)
score2 = compare_ssim(gray, denoised)
print('加噪前对比度:', score1)
print('去噪后对比度:', score2)
```
这里使用了结构相似性指数(SSIM)来评估图像质量,该指数的取值范围为[-1, 1],越接近1表示两张图像越相似,越接近-1表示两张图像越不相似。`compare_ssim`函数的第一个参数是原图像,第二个参数是要比较的图像。
完整代码如下:
```python
import cv2
import numpy as np
from skimage.measure import compare_ssim
# 加载图像并转换为灰度图像
img = cv2.imread('lena.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 生成高斯噪声
mean = 0
var = 10
sigma = var ** 0.5
noise = np.random.randn(gray.shape[0], gray.shape[1]) * sigma + mean
noise = noise.reshape(gray.shape)
# 添加高斯噪声
noisy = gray + noise.astype(np.uint8)
# 去噪
denoised = cv2.fastNlMeansDenoising(noisy, None, 10, 7, 21)
# 计算对比度
score1 = compare_ssim(gray, noisy)
score2 = compare_ssim(gray, denoised)
print('加噪前对比度:', score1)
print('去噪后对比度:', score2)
```
阅读全文