leo9344 / A-non-local-algorithm-for-image-denoising

NL-means-algorithm-for-image-denoising

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Non-Local Means Algorithm

image

Github Markdown有点问题,没法显示多行公式。下载下来之后用Typora等等打开就可以显示了

实现了5种图像去噪算法:

Gaussian Filter Anisotropic Filter Total Variation Minimization Yaroslavsky Filter Non-Local Means

需要去噪的图片路径在NLM.__init__下的 self.img_path = "noisy_image2.jpg"中进行设置

最后的对比图的图片路径在__main__下的 save_path = "./Result.png"中进行设置

直接运行NLM.py即可得到如下对比图

image

5种去噪函数的参数如下:

==1.==Gaussian_Filtering(self, src, dst = [], kernel_size = 3, sigma=0.8):

srcnumpy数组输入的图像, dst为去噪后结果图像,kernel_size为高斯核大小, sigma为高斯函数的sigma

==2.==Anisotropic_Filtering(self, src, dst=[], iterations = 10, k = 15, _lambda = 0.25):

公式如下: $$ I_{t+1} = I_t+\lambda (cN_{x,y}\nabla_N(I_t)+cS_{x,y}\nabla_S(I_t)+cE_{x,y}\nabla_E(I_t)+cW_{x,y}\nabla_W(I_t)) $$

$$ \nabla_N(I_{x,y})=I_{x,y-1}-I_{x,y}\\ \nabla_S(I_{x,y})=I_{x,y+1}-I_{x,y}\\ \nabla_E(I_{x,y})=I_{x-1,y}-I_{x,y}\\ \nabla_W(I_{x,y})=I_{x+1,y}-I_{x,y}\\ $$

$$ cN_{x,y} = exp(-\Vert\nabla_N(I)\Vert^2/k^2)\\ cS_{x,y} = exp(-\Vert\nabla_S(I)\Vert^2/k^2)\\ cE_{x,y} = exp(-\Vert\nabla_E(I)\Vert^2/k^2)\\ cW_{x,y} = exp(-\Vert\nabla_W(I)\Vert^2/k^2)\\ $$

srcnumpy数组输入的图像, dst为去噪后结果图像,iterations为迭代次数,k是导热系数相关的常数

==3.==Total_Variation_Minimization(self, src, dst=[], iterations = 100, _lambda = 0.03):

srcnumpy数组输入的图像, dst为去噪后结果图像,iterations为迭代次数,_lambda是常数

==4.==Yaroslavsky_Filtering(self,src,dst=[],kernel_size=3,h=1)

srcnumpy数组输入的图像, dst为去噪后结果图像,kernel_size为卷积核大小,h是常数

==5.==def NLMeans(self, src, dst=[], t=10, f=3, h=1):

srcnumpy数组输入的图像, dst为去噪后结果图像,t是搜索窗口大小,f是相似窗口大小,h是常数

公式为: $$ NLv = \sum_{j\in I}w(i,j)v(j)\ w(i,j)=\frac{1}{Z(i)}e^{-\frac{\Vert v(N_{i})-v(N_j)\Vert^2_{2,a}}{h^2}}\ Z(i)=\sum_j e^{-\frac{\Vert v(N_{i})-v(N_i)\Vert^2_{2,a}}{h^2}} $$ 每个函数的返回值都是dst, method_noisedst为去噪结果, method_noisesrc-dst

About

NL-means-algorithm-for-image-denoising

License:MIT License


Languages

Language:Python 100.0%