资源简介

python编写的ROF图像降噪程序,代码全面,亲测可行,降噪效果优与一般的图像降噪方法,对图像处理研究者有一定帮助。

资源截图

代码片段和文件信息

from numpy import *
from pylab import *
from PIL import Image
def denoise(imU_inittau=0.5tv_weight=30max_iteration=10):
   #imU_init为含噪音的图像tau与步长有关,tv_weight为全变差所占的权重λ,max_iteration为最大的迭代次数
   mn = im.shape
   U = U_init
   Px = im
   Py = im
   count = 0
   while(count       Uold = U
       GradUx = roll(U-1axis=1)-U #这里就是差分ux,如果对axis的选取有疑惑,本文后边提供了一个链接
       GradUy = roll(U1axis = 0)-U #这里就是差分uy#roll()函数,其实就相当于将矩阵移动,类似于无界模式的贪吃蛇,在最边缘位置的数会移动到对面
       NormNew = maximum(1sqrt(GradUx**2+GradUy**2))#为了防止出现分母为0
       Px = GradUx/NormNew
       Py = GradUy/NormNew
       RxPx = roll(Px-1axis=1)
       RyPy = roll(Py-1axis=0)
       DivP = (RxPx-Px)+(RyPy-Py)
       step = tau*(exp(-count*2/(max_iteration))+0.1)#有点模拟退火的意思
       U = Uold - step*((Uold-im)+tv_weight*DivP) #梯度下降
       error = linalg.norm(U-Uold)/sqrt(n*m)
       if (count%10==0):
           print(‘step:‘step)
           print(‘error:‘error)
           count+=1
           return UU-U_init
if __name__==‘__main__‘:
       from numpy import random
       from scipy.ndimage import filters
       im = zeros((500500))#建立一个图形,外黑,中灰,内白
       im[100:400100:400] = 128
       im[200:300200:300] = 255
       noise = 30 *random.standard_normal((500500)) #噪声
       im = im + noise
       UT = denoise(imimmax_iteration=10tau=0.5)
       gray()
       subplot(121)
       imshow(im)
       subplot(122)
       imshow(U)
       print(corrcoef(T.flatten()noise.flatten()))#相关度检验


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1834  2019-03-02 09:30  rofDeNoise.py

评论

共有 条评论