用于图像去噪的 L2 正则化最小二乘法

问题描述 投票:0回答:1

我是图像处理和优化的新手。 设 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,它显示没有发生任何变化。我更改了学习率和迭代,但没有看到任何正确的结果。

python image-processing mathematical-optimization gradient-descent least-squares
1个回答
0
投票

当前的去噪模型只是将图像的值转储为零。
为了有效地去噪,您需要一个更好的模型。

一个简单的模型假设图像是分段恒定信号(请参阅为什么稀疏先验喜欢全变分选择将导数集中在少量像素上)。

所以一个更好的模型,基本上这种假设的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} $$

© www.soinside.com 2019 - 2024. All rights reserved.