• python去噪算法


    《programming computer vision with python 》中denoise 算法有误,从网上好了可用的代码贴上,以便以后使用。

    书中错误的代码:

    def denoise(im,U_init,tolerance=0.1,tau=0.125,tv_weight=100):
        m,n = im.shape
        U = U_init
        Px = im
        Py = im
        error = 1
        
        while (error > tolerance):
            Uold = U
            GradUx = roll(U,-1,axis=1)-U
            GradUy = roll(U,-1,axis=0)-U
            
            PxNew = Px + (tau/tv_weight)*GradUx
            PyNew = Py + (tau/tv_weight)*GradUy
            NormNew = maximum(1,sqrt(PxNew**2+PyNew**2))
            
            Px = PxNew/NormNew
            py = PyNew/NormNew
    
            RxPx = roll(Px,1,axis=1)
            RyPy = roll(Py,1,axis=0)
    
            DivP = (Px - RxPx) + (Py - RyPy)
            U = im + tv_weight*DivP
    
            error = linalg.norm(U-Uold)/sqrt(n*m)
        return U,im-U

    网上可用的代码:

    def denoise(im, U_init, tolerance=0.1, tau=0.125, tv_weight=100):
        """ An implementation of the Rudin-Osher-Fatemi (ROF) denoising model
            using the numerical procedure presented in Eq. (11) of A. Chambolle
            (2005). Implemented using periodic boundary conditions 
            (essentially turning the rectangular image domain into a torus!).
        
            Input:
            im - noisy input image (grayscale)
            U_init - initial guess for U
            tv_weight - weight of the TV-regularizing term
            tau - steplength in the Chambolle algorithm
            tolerance - tolerance for determining the stop criterion
        
            Output:
            U - denoised and detextured image (also the primal variable)
            T - texture residual"""
        
        #---Initialization
        m,n = im.shape #size of noisy image
    
        U = U_init
        Px = im #x-component to the dual field
        Py = im #y-component of the dual field
        error = 1 
        iteration = 0
    
        #---Main iteration
        while (error > tolerance):
            Uold = U
    
            #Gradient of primal variable
            LyU = vstack((U[1:,:],U[0,:])) #Left translation w.r.t. the y-direction
            LxU = hstack((U[:,1:],U.take([0],axis=1))) #Left translation w.r.t. the x-direction
    
            GradUx = LxU-U #x-component of U's gradient
            GradUy = LyU-U #y-component of U's gradient
    
            #First we update the dual varible
            PxNew = Px + (tau/tv_weight)*GradUx #Non-normalized update of x-component (dual)
            PyNew = Py + (tau/tv_weight)*GradUy #Non-normalized update of y-component (dual)
            NormNew = maximum(1,sqrt(PxNew**2+PyNew**2))
    
            Px = PxNew/NormNew #Update of x-component (dual)
            Py = PyNew/NormNew #Update of y-component (dual)
    
            #Then we update the primal variable
            RxPx =hstack((Px.take([-1],axis=1),Px[:,0:-1])) #Right x-translation of x-component
            RyPy = vstack((Py[-1,:],Py[0:-1,:])) #Right y-translation of y-component
            DivP = (Px-RxPx)+(Py-RyPy) #Divergence of the dual field.
            U = im + tv_weight*DivP #Update of the primal variable
    
            #Update of error-measure
            error = linalg.norm(U-Uold)/sqrt(n*m);
            iteration += 1;
    
            print iteration, error
    
        #The texture residual
        T = im - U
        print 'Number of ROF iterations: ', iteration
        
        return U,T

    测试代码:

    from numpy import *
    from numpy import random
    from scipy.ndimage import filters
    import rof
    from scipy.misc import imsave
    
    im = zeros((500,500))
    im[100:400,100:400] = 128
    im[200:300,200:300] = 255
    
    im = im + 30*random.standard_normal((500,500))
    
    imsave('synth_ori.pdf',im)
    
    U,T = rof.denoise(im,im,0.07)
    
    G = filters.gaussian_filter(im,10)
    
    
    imsave('synth_rof.pdf',U)
    imsave('synth_gaussian.pdf',G)
  • 相关阅读:
    strutsconfig.xml中action、forward、formbean属性含义
    略谈如何从工作线程中弹出对话框
    SSO(Single Signon) in Action
    深入浅出JBoss Seam
    以ListBox为例谈谈控件里字符串的对齐办法
    Asp.Net性能优化
    vc动态生成按钮并响应 .
    Web开发中的弹出对话框控件介绍
    ASP.NET MVC3学习心得视图和模型
    vc采集网页内frame框架下所有元素(不指定具体table/form) .
  • 原文地址:https://www.cnblogs.com/zhangyonghugo/p/3919323.html
Copyright © 2020-2023  润新知