阿齐兹的PyCV学习笔记——图像去噪

图像去噪

图像去噪是指在去除图像噪声的同时,尽可能保留图像的细节和结构

ROF(Rudin-Osher-Fatemi)去噪模型:该模型使去噪后的图像像素值“平坦”变化,但在图像区域边缘像素值“跳跃”变化,使处理后的图像更平滑,同时保持图像边缘和结构信息

#coding:utf-8
from numpy import *

def denoise(im, U_init, tolerance=0.1, tau=0.125, tv_weight=100):
    """使用A.Chambolle公式实现ROF去噪模型
      输入:含有噪声的输入图像(灰度图像)、U的初始值、TV正则项权值、步长、停业条件
      输出:去噪和去除纹理后的图像、纹理残留"""

    m,n = im.shape #噪声图像的大小

    #初始化
    U = U_init
    Px = im #对偶域的x分量
    Py = im #对偶域的y分量
    error = 1

    while(error > tolerance):
        Uold = U

        #原始变量的梯度
        GradUx = roll(U,-1,axis=1)-U #变量U梯度的x分量
        GradUy = roll(U,-1,axis=0)-U #变量U梯度的y分量

        #更新对偶变量
        PxNew = Px + (tau/tv_weight)*GradUx
        PyNew = Py + (tau/tv_weight)*GradUy
        NormNew = maximum(1,sqrt(PxNew**2+PyNew**2))

        Px = PxNew/NormNew #更新x变量
        Py = PyNew/NormNew #更新y变量

        #更新原始变量
        RxPx = roll(Px,1,axis=1) #对x分量进行向右x轴平移
        RyPy = roll(Py,1,axis=0) #对y分量进行向右y轴平移

        DivP = (Px-RxPx)+(Py-RyPy) #对偶域的散度
        U = im + tv_weight*DivP #更新原始变量

        #更新误差
        error = linalg.norm(U-Uold)/sqrt(n*m)

    return U,im-U #去噪后的图像和纹理残余

roll()方法可以在一个坐标轴上循环“滚动”数组中的元素值,计算领域元素的差异
linalg.norm()方法可以衡量两个数组之间的差异

实例一:

from numpy import *
from numpy import random
from scipy.ndimage import filters
import rof

#使用噪声创建合成图像
im = zeros((500,500))
im[100:400,100:400] = 128
im[200:300,200:300] = 255
im = im + 30*random.standard_normal((500,500))

U,T = rof.denoise(im,im)
G = filters.gaussian_filter(im,10)

#保存生成结果
from scipy.misc import imsave
imsave('synth_rof.pdf',U)
imsave('synth_gaussian.pdf',G)

效果图:
这里写图片描述

实例二:

from PIL import Image
from pylab import *
import rof

im = array(Image.open('C:/Users/0AQZ0/Documents/exercisecode/Python/PyCV/Images/001.jpg').convert('L'))
U,T = rof.denoise(im,im)

figure()
gray()
imshow(U)
axis('equal')
axis('off')
show()

效果图:
高斯模糊——
高斯模糊

ROF去噪——
ROF去噪

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值