数字图像处理①基于ADMM的全变分去噪算法

文章目录

  • 1. Problem
  • 2. 仿真结果
  • 3. MATLAB算法
  • 4. 源码地址
  • 参考文献

1. Problem


在图像处理中,图像信号总会因为各种原因受到噪声的干扰,其中高斯噪声就是典型的干扰类型之一。

针对图像去噪的模型有很多种,其中全变分模型被认为是最有效的模型之一。早在1992年,Rudin、Osher和Rudin三位学者在论文1就提出了全变分(Total Variation,TV)模型,论文证明了随着噪声的增加,图像的TV将会变大,因此,可以通过最小化TV来实现图像去噪。

全变分有几种模型,有各向异性全变分(Anisotropic Total Variation,ATV)、各向同性全变分(Isotropic Total Variation,ITV)和其它的形式。

定义一个 N × N N\times N N×N的图像信号 x x x,其中 x ( i , j ) x(i,j) x(i,j)表示图像的第 i i i j j j列像素值,则

ITV可以表示为

I T V ( x ) = ∑ i = 1 N ∑ j = 1 N [ x ( i + 1 , j ) − x ( i , j ) ] 2 + [ x ( i , j + 1 ) − x ( i , j ) ] 2 2 (1) ITV(x)=\sum_{i=1}^N\sum_{j=1}^N\sqrt[2]{[x(i+1,j)-x(i,j)]^2+[x(i,j+1)-x(i,j)]^2}\tag{1} ITV(x)=i=1Nj=1N2[x(i+1,j)x(i,j)]2+[x(i,j+1)x(i,j)]2 (1)

ATV可以表示为

A T V ( x ) = ∑ i = 1 N ∑ j = 1 N ∣ x ( i + 1 , j ) − x ( i , j ) ∣ + ∣ x ( i , j + 1 ) − x ( i , j ) ∣ (2) ATV(x)=\sum_{i=1}^N\sum_{j=1}^N|x(i+1,j)-x(i,j)|+|x(i,j+1)-x(i,j)|\tag{2} ATV(x)=i=1Nj=1Nx(i+1,j)x(i,j)+x(i,j+1)x(i,j)(2)

以ATV模型为例,一个图像去噪问题可以建模为

min ⁡ u 1 2 ∣ ∣ u − x ∣ ∣ 2 2 + λ ∣ ∣ D u ∣ ∣ 1 (3) \min_u \frac12 ||u-x||^2_2+\lambda||Du||_1\tag{3} umin21∣∣ux22+λ∣∣Du1(3)

其中, x x x为待去噪信号, u u u为变量, λ \lambda λ为正则化参数。 D D D为全变分算子,可以由式(1)得到。该问题是一个非凸、不光滑问题,无法直接采用梯度下降法求解。

交替方向乘子法2(Alternating Direction Method of Multiplier,ADMM)提供了一个解决此类问题的框架3。引入变量 d d d,将问题(3)转化为ADMM的一般形式

min ⁡ u 1 2 ∣ ∣ u − x ∣ ∣ 2 2 + λ ∣ ∣ d ∣ ∣ 1    s . t .    D u − d = 0 (4) \min_u \frac12 ||u-x||^2_2+\lambda||d||_1 \ \ s.t.\ \ Du-d=0\tag{4} umin21∣∣ux22+λ∣∣d1  s.t.  Dud=0(4)

利用增广拉格朗日法引入凸松弛,同时去除约束条件,有

L ( u , d , μ ) = 1 2 ∣ ∣ u − x ∣ ∣ 2 2 + λ ∣ ∣ d ∣ ∣ 1 + μ T ( D u − d ) + δ 2 ∣ ∣ D u − d ∣ ∣ 2 2 (5) L(u,d,\mu)=\frac12 ||u-x||^2_2+\lambda||d||_1+\mu^T(Du-d)+\frac \delta 2||Du-d||^2_2\tag{5} L(u,d,μ)=21∣∣ux22+λ∣∣d1+μT(Dud)+2δ∣∣Dud22(5)

其中 μ \mu μ为拉格朗日乘子, δ > 0 \delta>0 δ>0为拉格朗日惩罚项。为了使表达更简洁,可做如下替换:

L ( u , d , μ ) = 1 2 ∣ ∣ u − x ∣ ∣ 2 2 + λ ∣ ∣ d ∣ ∣ 1 + δ 2 ∣ ∣ D u − d + p ∣ ∣ 2 2 − δ 2 ∣ ∣ p ∣ ∣ 2 2 (6) L(u,d,\mu)=\frac12 ||u-x||^2_2+\lambda||d||_1+\frac \delta 2||Du-d+p||^2_2-\frac \delta 2||p||_2^2\tag{6} L(u,d,μ)=21∣∣ux22+λ∣∣d1+2δ∣∣Dud+p222δ∣∣p22(6)

其中 p = μ / δ p=\mu / \delta p=μ/δ。利用ADMM,问题(6)的求解可通过交替求解以下三个问题进行实现:

u n + 1 = a r g   min ⁡ u   1 2 ∣ ∣ u − x ∣ ∣ 2 2 + δ 2 ∣ ∣ D u − d n + p n ∣ ∣ 2 2 (7) u_{n+1}=arg\,\min_u\ \frac12 ||u-x||^2_2+\frac \delta 2||Du-d_n+p_n||^2_2\tag{7} un+1=argumin 21∣∣ux22+2δ∣∣Dudn+pn22(7)

d n + 1 = a r g   min ⁡ u   λ ∣ ∣ d ∣ ∣ 1 + δ 2 ∣ ∣ D u n − d + p n ∣ ∣ 2 2 (8) d_{n+1}=arg\,\min_u\ \lambda||d||_1+\frac \delta 2||Du_n-d+p_n||^2_2\tag{8} dn+1=argumin λ∣∣d1+2δ∣∣Dund+pn22(8)

p n + 1 = p n + ( D u n + 1 − d n + 1 ) (9) p_{n+1}=p_n+(Du_{n+1}-d_{n+1})\tag{9} pn+1=pn+(Dun+1dn+1)(9)

2. 仿真结果


测试图像采用的是house,对其添加高斯噪声,将加噪后的图像输入到去噪算法
在这里插入图片描述
从仿真结果可以看到,去噪后的图像上的噪声被抑制了,图像变得更加平滑了,图像边缘也得到了增强。然而,图像原本的细节也丢失了。

3. MATLAB算法


x=double(imread('house.bmp'));
x_n=x+10*randn(size(x));
x_r=ADMM_TVdenoise(x_n,25,10,100);
figure;
subplot(131);
imshow(uint8(x));
title('原始图像');
subplot(132);
imshow(uint8(x_n));
title('加噪图像');
subplot(133);
imshow(uint8(x_r));
title('去噪图像');
function xp=ADMM_TVdenoise(x,delta,lambda,iteratMax)
    [N,~]=size(x);
    x=reshape(x,N*N,1);
    [Dh,Dv]=TVOperatorGen(N);
    D=sparse([Dh',Dv']');
    d=D*x;
    p=ones(2*N*N,1)/delta;
    IdelDD=inv((eye(N*N)+delta*(D'*D)));
    for ii=1:iteratMax
        u=IdelDD*(x+delta*D'*(d-p));
        d=wthresh(D*u+p,'s',lambda/delta);
        p=p+D*u-d;
    end
    xp=reshape(u,N,N);
end
function [Dh,Dv]=TVOperatorGen(n)
    Dh=-eye(n^2)+diag(ones(1,n^2-1),1);
    Dh(n:n:n^2,:)=0;
    Dv=-eye(n^2)+diag(ones(1,n^2-n),n);
    Dv(n*(n-1)+1:n^2,:)=0;
end

4. 源码地址


https://github.com/dwgan/ADMM_TV_denoise

参考文献


  1. Rudin, Leonid I., Stanley Osher, and Emad Fatemi. “Nonlinear total variation based noise removal algorithms.” Physica D: nonlinear phenomena 60.1-4 (1992): 259-268. ↩︎

  2. Boyd, Stephen, et al. “Distributed optimization and statistical learning via the alternating direction method of multipliers.” Foundations and Trends® in Machine learning 3.1 (2011): 1-122. ↩︎

  3. https://zhuanlan.zhihu.com/p/448289351 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux中断

一 Linux中断原理 Linux中断(Interrupt)是指在计算机执行过程中,由于某些事件发生(例如硬件请求、错误、异常等),CPU暂停当前正在执行的程序,转而执行相应的处理程序的过程。中断是计算机多任务…

Flask+表格静态展示

Python网页开发(持续更新ing…) 诸神缄默不语-个人CSDN博文目录 本文的需求场景是:我现在有一个JSON格式的表格,这个具体格式不重要相信你们能看懂其他格式的表格怎么改。总之我想用PythonFlask提取这个表格,并展示在…

【网络编程一】初识网络:IP与端口号 网络模型

目录 🌟需要知道 一、基础概念 🌈1、IP地址与端口号 🌈2、五元组 二、协议分层 🌈1、OSI七层网络网络模型 🌈2、TCP/IP五层(四层)模型 🌈3、封装和分用(重点!) &…

软件测试基础篇

文章目录 一、软件测试的生命周期二、BUGBUG的描述BUG的级别BUG生命周期产生争执怎么办?如何开始第一次测试测试的执行和BUG的管理 一、软件测试的生命周期 软件测试的生命周期: 1.需求分析:需求是否完整,需求是否正确 2.测试计划&#xff…

串口屏-迪文10寸T5串口屏数据交互

效果演示 为了便于理解 建议先看上篇博客 点击跳转到上一篇博客 正式开始 1 打开DGUS 2 如图点击文本显示 数据变量 3 填写数据地址 按步骤操作 3-1 先点击框选1处 3-2 再点击框选2处改地址 我改的1000 3-3 设置完直接导出 插入U盘替换DWSET文件夹文件(这一步不理解去看上一…

C++ set类成员函数介绍 (set和multiset)

目录 🤔set模板介绍: 🤔特点: 🤔set的成员函数: 😊set构造函数: 🔍代码实例: 🔍运行结果: 😊 set赋值函数&#xf…

Linux——线程的同步与互斥

目录 模拟抢火车票的过程 代码示例 thread.cc Thread.hpp 运行结果 分析原因 tickets减到-2的本质 解决抢票出错的方案 临界资源的概念 原子性的概念 加锁 定义 初始化 销毁 代码形式如下 代码示例1: 代码示例2: 总结 如何看待锁 申…

【C++】STL中stack的用法及模拟实现

目录 一、stack的简介二、stack的使用三、stack的模拟实现 一、stack的简介 stack是一种容器适配器,专门用在后进先出操作的上下文中环境中,其中的元素只允许从容器固定的一端进行插入和删除操作。stack是作为容器适配器来实现的,容器适配器…

信息安全实践1.3(HTTPS)

前言 做这个实验对Tomcat的版本有要求,最好是使用Tomcat8。因为我之前使用Tomcat10,然后一直做不出来。 要求 部署Web服务器端HTTPS功能,通过网络嗅探分析HTTPS通过SSL实施安全保护的效果 关键步骤 首先要给tomcat配置https,也…

Unity3D安装:离线安装 Unity

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 在没有 Hub 的情况下离线安装 Unity Unity 下载助手 (Download Assistant) 支持离线部署。在这种部署方式中,可下载用于安装 Unity 的所有文件,然后生成脚本…

采购申请审批测试

采购申请审批的配置并不难,但是总会有原因导致业务无审批策略,而且这个配置也比较脆弱,有时同步也会出现问题,小编利用这篇操作记录下测试结果。 1、项目类别的审批策略分类 下图是审批策略分类-项目类别不给值,测试…

(浙大陈越版)数据结构 第三章 树(上) 3.4 小白专场:树的同构(PTA编程题讲解)

题意理解和二叉树表示 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换变成T2,则称两棵树是“同构”的。 eg1:现请你判断如下两棵树(左侧为T1,右侧为T2)是否为同构树? 显然T1可以通过有限次左右孩子…

如何利用IDEA将Git分支代码回退到指定历史版本

一、背景 作为一名后端开发,相信大家一定遇到过这样的情景,代码开发人员过多,并且开发分支过多,导致代码版本管理困难,这样就难免遇到一些代码合并出错,比如,当我提交了本次修改到本地和远程分…

jsp页面调试

现象: 访问jsp页面, 页面为空, 网络请求显示失败, 控制台打印错误net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 分析: 错误描述:编码模块不完整,返回浏览器的流不完整 可能得原因: 1、网络是否稳定 2、服务器端是否有对响应数据做限制,比如…

photoshop矫正扫描图片的倾斜问题以及修改图片内容

由于工程原因,资料需要重新梳理 1.扫描工程表格到电脑中 2.在ps中导入表格内容(表格有时候是倾斜的) 需要修正为正常状态,即垂直状态 设置步骤: 1.调整ps的背景颜色与所在图片的背景颜色一致 用吸管工具&#xff…

【thingsboard+NodeRed+chirpstack】实现Lora节点设备的数据上下行通讯

本文主要实现基于 thingsboard+NodeRed+chirpstack 实现 lora设备的数据上下行通讯。 NodeRed作为mqtt桥接器,在开源的社区版 thingsboard上实现 这里写目录标题 LoRa 设备上下行通讯方案数据上行数据下行Device 层面创建设备时,要添加 relation规则链层面灯控模块规则链规则…

Sentinel降级规则

1.降级规则简介 官方文档 熔断降级概述 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的…

华为OD机试之处理器问题(Java源码)

处理器问题 题目描述 某公司研发了一款高性能AI处理器。每台物理设备具备8颗AI处理器,编号分别为0、1、2、3、4、5、6、7。 编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信。 如下图所示。…

基于html+css的图展示97

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

安装Arch Linux后要做的十件事

Arch Linux 是一款轻量级、灵活且高度可定制的Linux发行版,被广泛用于个人电脑和服务器。一旦您成功安装了Arch Linux,接下来有一些重要的任务需要完成,以确保系统的稳定性和安全性,并为您的需求做好准备。 本文将详细介绍安装Ar…