1.ROF简介

ROF模型在92年由Rudin,Osher,Fatemi提出,他们提出“ 最小化 ‘全变差’ ” 可以有更好的去除图像中噪声的效果。

2.ROF降噪原理

1.规定一些符号

2.什么是全变差

这里介绍了什么是全变差

在原论文中,全变差是图像差分的L1范数,即

3.将问题转化为数学问题

这里保证求出的图像与原图像在整体灰度上相等(即假定n(x,y)的均值为0)

原论文中还有如下约束,

n(x,y)的标准差为σ²,但是在实际问题中无法提前得知σ的值

将问题描述为,在上式的约束下,使TV(U)最小。

作者在论文中用到了欧拉-拉格朗日方程,由于我目前还没有学过泛函数分析,所以采用了梯度下降法(Gradient Descent)

下面先解释一下什么是梯度下降法:

迭代公式为:

step为步长,决定了每次移动的距离

图画的很丑,大家可以自己画一画,理解一下

如果我们想求最大值,只需将迭代公式中的减号变为加号

对梯度下降法比较直观的解释是:想象你站在一座山的山腰处,你想要最快的下山,一种方法就是沿着坡度最大的方向走(如果实在太陡了,走不了,那你就飞吧。。。),通过这个例子,我们能发现一个问题,那就是梯度下降法可能陷入局部最优(陷入某一个山谷中),但作者在论文中提到,这种局部最优更接近于图像的处理过程(可以理解为这种局部最优是距离噪声图像最近的一个最优解,如果全局最优的话,可能会丧失掉太多的图像信息)

4.如何求(迭代)出清晰图像

首先,我们要先定义一个函数,这个函数能将优化问题和约束条件结合起来,我们称这个函数为损失函数

我们要让这个损失函数最小,就能保证生成图像和含噪声的图像之间相差不多,并且让全变差也比较小

通过上边的讲解,我们知道只要求出Loss(U)对于U的导数(更准确地说,应是差分,因为图像不是连续的函数),就能通过梯度下降法,迭 代出清晰图像!

3.代码实现

# -*- coding: utf-8 -*-

"""

Created on Tue Oct 17 21:33:43 2017

@author: ningminghao

"""

from numpy import *

from pylab import *

from PIL import Image

def denoise(im,U_init,tau=0.5,tv_weight=30,max_iteration=10):

#im,U_init为含噪音的图像,tau与步长有关,tv_weight为全变差所占的权重λ,max_iteration为最大的迭代次数

m,n = im.shape

U = U_init

Px = im

Py = im

count = 0

while(count<max_iteration):

Uold = U

GradUx = roll(U,-1,axis=1)-U #这里就是差分ux,如果对axis的选取有疑惑,本文后边提供了一个链接

GradUy = roll(U,1,axis = 0)-U #这里就是差分uy

#roll()函数,其实就相当于将矩阵移动,类似于无界模式的贪吃蛇,在最边缘位置的数会移动到对面

NormNew = maximum(1,sqrt(GradUx**2+GradUy**2))#为了防止出现分母为0

Px = GradUx/NormNew

Py = GradUy/NormNew

RxPx = roll(Px,-1,axis=1)

RyPy = roll(Py,-1,axis=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 U,U-U_init

from numpy import random

from scipy.ndimage import filters

im = zeros((500,500)) #建立一个图形,外黑,中灰,内白

im[100:400,100:400] = 128

im[200:300,200:300] = 255

noise = 30 *random.standard_normal((500,500)) #噪声

im = im + noise

U,T = denoise(im,im,max_iteration=10,tau=0.5)

gray()

subplot(121)

imshow(im)

subplot(122)

imshow(U)

print(corrcoef(T.flatten(),noise.flatten()))#相关度检验

左为模糊之后的图像,右为ROF处理后的图像

以上代码完全按照上面的公式推导来的,如果哪里不懂就再看看公式推导

建议手动敲一下上面的代码,相信你会更好的理解

对python的axis有疑惑的点这里

4.总结一下

简单的介绍了ROF的数学原理,及迭代公式的推导,介绍了梯度下降,在步长的处理上进行了类似于模拟退火的处理方式(使得前期步长较大,后期步长较小),其实还有一种加入“动量因子”的技术,可以使得梯度下降收敛的更快且更容易接近最优点,有兴趣的可以自己搜索一下

参考链接:https://www.jianshu.com/p/070ebf691042

简析ROF降噪原理及python实现详解相关推荐

  1. Apriori 算法原理以及python实现详解

    Apriori 算法原理以及python实现 ​ Apriori算法是第一个关联规则挖掘算法,也是最经典的算法.它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与 ...

  2. python创建双链表_Python双链表原理与实现方法详解

    本文实例讲述了Python双链表原理与实现方法.分享给大家供大家参考,具体如下: Python实现双链表 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 ...

  3. 基于模糊C均值聚类(FCM)的图像分割原理+python代码详解

    一.模糊 "模糊":一个元素可以不同程度的属于某几个子集,也就是说元素对于集合的隶属度可以在[0,1]上取连续值. 二.步骤 2.1步骤 翻译一下: S1:初始化参数:加权指数m, ...

  4. mysql 账户管理_Mysql账户管理原理与实现方法详解

    本文实例讲述了Mysql账户管理原理与实现方法.分享给大家供大家参考,具体如下: 账户管理 在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然 ...

  5. 07 Python数据类型详解

    文章目录 一.整数类型(int)详解 1.1 整数的不同进制 1) 十进制形式 2) 二进制形式 3) 八进制形式 4) 十六进制形式 1.2 数字分隔符 1.3 相关方法 二.字符串类型(strin ...

  6. Python 异常处理 详解

    Python 异常处理 详解 1.错误和异常 1.1 错误 `Error` 1.2 异常 `Exception` 1.3 总结 2.产生异常 3.捕获异常 3.1 语法 3.2 示例 1 3.3 示例 ...

  7. Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)

    文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...

  8. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  9. java同步方法完成案例_Java同步代码块和同步方法原理与应用案例详解

    本文实例讲述了java同步代码块和同步方法.分享给大家供大家参考,具体如下: 一 点睛 所谓原子性WOmoad:一段代码要么执行,要么不执行,不存在执行一部分被中断的情况.言外之意是这段代码就像原子一 ...

最新文章

  1. 2021/6/18~19 每天学习python 30分钟 -了解python - python的基本变量概述
  2. Spring 是解析配置类过程详解
  3. v系列存储配置Linux多路径,linux下san存储多路径软件的配置
  4. (十)Java B2B2C o2o多用户商城 springcloud架构- SSO单点登录之OAuth2.0登录认证(1)
  5. h3c s7506e 配置手册_H3C交换机s5500Web登录配置
  6. 服务器系统装软路由,服务器系统设置软路由
  7. Linux debian设置主机不休眠教程
  8. 图片热点的使用,html area 的用法
  9. MySQl Search JSON Values
  10. AR增强现实的未来展望
  11. Java入门教程:Java初学者容易犯的错误
  12. phpstudy mysql 1067_MySQL_MySQL的1067错误解决,1 安装MYSQL后更改了ROOT的密码 - phpStudy...
  13. 基金登记过户系统相关
  14. 全国计算机二级考试vb考点,计算机二级考试VB考点:通用对话框控件
  15. 计算机中的打印机,如何添加打印机,教您电脑如何添加打印机
  16. SpringBoot 整合ActiveMQ
  17. html图片滤色,css--图片处理
  18. Git 核心概念:工作区与暂缓区(添加提交及查看状态充分体现)
  19. 数学符号对应的英文读音
  20. 申请TexturePacker序列号

热门文章

  1. 智能汽车业务断崖式下滑,虹软科技“腾挪”前后装
  2. 12.12 极值问题
  3. 【27】SIMD:如何加速矩阵乘法?
  4. android反射替换字体,快速使用反射更换Android全局字体
  5. Quartus ii和Modelsim SE联合仿真的问题总结
  6. 一键部署网站php源码,如何轻松建站?站点一键部署搭建(详细教程)
  7. php有赞sdk,youzan-sdk/README.md at master · imhui/youzan-sdk · GitHub
  8. 简单的文具店库存管理系统
  9. C - Censor SCU - 4438
  10. 高级项目经理推荐:19个超实用的自学网站