我是图像处理和优化的新手。 设 y 是由关系 y = x+n 描述的噪声图像,其中 u 是无噪声图像,n 是噪声。目标是从 n 中恢复 x。
分钟|| y-x ||^2_2+lambda|| x ||^2_2
优化问题应采用梯度法求解。这是我写的代码,但我无法得到正确的答案。如果有人可以帮助我,我将不胜感激。
import numpy as np
import math
from PIL import Image
from skimage import img_as_float
from skimage.util import random_noise
import math
from numpy import linalg as LA
from skimage.metrics import peak_signal_noise_ratio
import scipy.ndimage.filters
#define image
img = img_as_float(np.random.random((2, 2)))
#define noise
noise = np.random.normal(0,1,size=(2,2))*0.2
#add noise to image
img_noise=img+noise
p = 0.0001 #gradient step
N = 600 #number of iterations
Lambda = 5
Cur_u = img_noise
weight_history = []
print('img=',img)
for k in range(N):
Prev_u=Cur_u
Cur_u = Prev_u - p*(2*(Prev_u-img_noise)+2*Lambda*Prev_u)
weight_history.append(Cur_u)
[enter image description here][1]
print(weight_history)
psnr = peak_signal_noise_ratio(img,img_noise)
psnr = peak_signal_noise_ratio(img,weight_history[-1])
我希望去噪后的图像变得更接近原始图像。但我没有看到任何降噪。我看不出噪声和降噪之间有什么区别。我使用 psnr,它显示没有发生任何变化。我更改了学习率和迭代,但没有看到任何正确的结果。
当前的去噪模型只是将图像的值转储为零。
为了有效地去噪,您需要一个更好的模型。
一个简单的模型假设图像是分段恒定信号(请参阅为什么稀疏先验喜欢全变分选择将导数集中在少量像素上)。
所以一个更好的模型,基本上这种假设的MAP由下式给出:
$$ 种族{1}{2} {\left|旧符号{x} - 旧符号{y} 右|}{2}^{2} + rac{\lambda}{2} {\left|旧符号{D} 旧符号{x} 右|}{2}^{2} $$
其中 $oldsymbol{D}$ 是导数运算符。
参数$\lambda$控制去噪量。
备注:使用L1正则化效果更好,但需要不同的机器来解决。
梯度由下式给出:
$$ 旧符号{x} - 旧符号{y} + \lambda 旧符号{D}^{T} 旧符号{D} 旧符号{x} $$