对图片低秩矩阵恢复去噪相关代码细致一些
时间: 2024-05-09 20:20:35 浏览: 113
用于图像恢复的深度CNN去噪器_代码_下载_MATLAB
5星 · 资源好评率100%
以下是基于Python的图片低秩矩阵恢复去噪的代码:
首先,我们需要引入一些必要的库:
```python
import numpy as np
from scipy import linalg
from scipy import misc
import matplotlib.pyplot as plt
```
然后,我们需要定义一些常量和函数:
```python
# 图片文件名
filename = 'lena.png'
# 加载图片
img = misc.imread(filename, mode='L')
# 图片尺寸
m, n = img.shape
# 噪声水平
noise_level = 0.2
# 生成噪声
noise = np.random.normal(0, noise_level, (m, n))
# 添加噪声
img_noise = img + noise
# 定义低秩矩阵恢复函数
def low_rank_recovery(X, tau):
U, S, Vt = linalg.svd(X, full_matrices=False)
S_tau = np.maximum(S - tau, 0)
return U.dot(np.diag(S_tau)).dot(Vt)
# 定义去噪函数
def denoise(img_noise, tau):
X = img_noise.astype(float)
for i in range(10):
X = low_rank_recovery(X, tau)
return X
```
接下来,我们可以调用上面定义的函数来进行低秩矩阵恢复去噪:
```python
# 低秩矩阵恢复去噪
img_denoised = denoise(img_noise, 5)
# 显示原始图片、带噪声的图片和去噪后的图片
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 5))
ax = axes.ravel()
ax[0].imshow(img, cmap=plt.cm.gray)
ax[0].set_title("Original image")
ax[1].imshow(img_noise, cmap=plt.cm.gray)
ax[1].set_title("Noisy image")
ax[2].imshow(img_denoised, cmap=plt.cm.gray)
ax[2].set_title("Denoised image")
plt.tight_layout()
plt.show()
```
最后,我们可以将去噪后的图片保存到本地:
```python
# 保存去噪后的图片
misc.imsave('lena_denoised.png', img_denoised)
```
完整的代码如下:
```python
import numpy as np
from scipy import linalg
from scipy import misc
import matplotlib.pyplot as plt
# 图片文件名
filename = 'lena.png'
# 加载图片
img = misc.imread(filename, mode='L')
# 图片尺寸
m, n = img.shape
# 噪声水平
noise_level = 0.2
# 生成噪声
noise = np.random.normal(0, noise_level, (m, n))
# 添加噪声
img_noise = img + noise
# 定义低秩矩阵恢复函数
def low_rank_recovery(X, tau):
U, S, Vt = linalg.svd(X, full_matrices=False)
S_tau = np.maximum(S - tau, 0)
return U.dot(np.diag(S_tau)).dot(Vt)
# 定义去噪函数
def denoise(img_noise, tau):
X = img_noise.astype(float)
for i in range(10):
X = low_rank_recovery(X, tau)
return X
# 低秩矩阵恢复去噪
img_denoised = denoise(img_noise, 5)
# 显示原始图片、带噪声的图片和去噪后的图片
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 5))
ax = axes.ravel()
ax[0].imshow(img, cmap=plt.cm.gray)
ax[0].set_title("Original image")
ax[1].imshow(img_noise, cmap=plt.cm.gray)
ax[1].set_title("Noisy image")
ax[2].imshow(img_denoised, cmap=plt.cm.gray)
ax[2].set_title("Denoised image")
plt.tight_layout()
plt.show()
# 保存去噪后的图片
misc.imsave('lena_denoised.png', img_denoised)
```
阅读全文