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

news2024/12/27 11:08:04

文章目录

  • 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 x ∣ ∣ 1 (3) \min_u \frac12 ||u-x||^2_2+\lambda||Dx||_1\tag{3} umin21∣∣ux22+λ∣∣Dx1(3)

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

交替方向乘子法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 x − d = 0 (4) \min_u \frac12 ||u-x||^2_2+\lambda||d||_1 \ \ s.t.\ \ Dx-d=0\tag{4} umin21∣∣ux22+λ∣∣d1  s.t.  Dxd=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 ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北醒Modbus协议在Python下实现功能配置

目录 实验目的测试环境Python库需求Benewake(北醒) TF雷达接口及通讯协议说明接口定义Modbus通信协议说明功能码说明 接线示意图库安装说明例程运行与测试 实验目的 实现485接口系列雷达Modbus协议在Python上实现功能配置。 本例程界面分为主菜单、测距子菜单、配置子菜单&…

社区团购-v.1.6.0更新

likeshop社区团购系统发布新版本1.6.0,主要更新如下: 新增: 小程序-登录引导用户填写头像和昵称 小程序-热更新代码弹窗 后台-正版检测、版本检测 后台-页面装修支持拖拽排序 后台-订单管理增加导出功能 修复: 后台-关联团…

本地化部署AI语言模型RWKV指南,ChatGPT顿时感觉不香了。

之前由于ChatGpt处处受限,又没法注册的同学们有福了,我们可以在自己电脑上本地化部署一套AI语言模型,且对于电脑配置要求也不是非常高,对它就是RWKV。 关于RWKV RWKV是一个开源且允许商用的大语言模型,灵活性很高且极…

Linux之搭建环境

文章目录 1 FileZilla软件2 Linux搭建samba文件共享服务器,实现基于Linux和Windows的共享文件服务2.1 smaba的安装与基本应用2.2 samba的账号权限配置 1 FileZilla软件 在跟着正点原子教程安装后,出现如下问题 解决方法如下 参考文章解决FileZilla连接…

游戏配音怎么弄的?分享三个游戏配音制作方法

随着时代的发展,人们对于配音的要求也越来越高,除了传统的文字配音外,现在又出现了游戏配音。其实游戏配音也是有一定门槛的,并不是人人都可以做得好的。但是如果你想要拥有一位自己喜欢的游戏角色,那么你就要学会游戏…

MyBatis 快速入门(上)

文章目录 一. MyBatis 是什么?二. 学习 MyBatis 的意义三. MyBatis 学习四. 创建 Mybatis 查询4.1 创建数据库和表4. 2 MyBatis 环境搭建1. 添加 MyBatis 框架支持image-202305052040340772. 设置 MyBatis 的配置信息2.1 设置数据库连接的相关信息2.2 MyBatis 的xml 保存路径 …

如何白嫖可联网GPT- NEW Bing

这里写自定义目录标题 前沿方法安装总结 前沿 目前我们想体验可联网的GPT只能去OPENAI官网购买plus会员,一个月20刀,换算一下的话大概在140左右,当然由于OPENAI某些原因经常封禁不符合规定的账号,那么有没有一种办法能白嫖快速的…

Qt Qml 实现键鼠长时间未操作锁屏

文章目录 摘要实现思路键盘鼠标监控百度到的方法我的自己方法 最后 关键字: Qt、 Qml、 QInputEvent 、 QStandardItem、 eventFilter 摘要 今日需求: 项目中需要实时检测用户是否长时间为操作键盘和鼠标,如果超过预设时间未操作键盘和…

Linux之管道

目录 Linux之管道 操作符号 作用 用法 管道符使用场合 匿名管道与命名管道的区别 如何创建命名管道 案例举例 案例1 --- 将/etc/passwd中的用户按UID大小排序 案例2 --- 统计出最占CPU的5个进程 案例3 --- 统计当前/etc/passwd中用户使用的shell类型 案例4 --- 统计网站…

Java大数据文件处理方法

前言 Java大数据文件处理是一种使用Java编写的大型数据处理技术,特别适用于处理大型数据文件。在这篇文章中,我们将了解什么是Java大数据文件处理,为什么它很重要以及Java大数据文件处理的方法和技术。 一、什么是Java大数据文件处理&#…

交易信号有效性测算1——N日涨跌幅

在交易信号发出后,我们需要一些程序化的流程,来验证信号的有效性,其中信号发出后N日的涨跌幅就是一个比较常见的任务 布林带交易策略 我们以布林带(BOLL)交易策略为示例: 中轨线 N日移动平均线上轨线 …

Linux 上的 .NET 崩溃了怎么抓 Dump

一:背景 1. 讲故事 训练营中有朋友问在 Linux 上如何抓 crash dump,在我的系列文章中演示的大多是在 Windows 平台上,这也没办法要跟着市场走,谁让 .NET 的主战场在工控 和 医疗 呢,上一张在 合肥 分享时的一个统计图…

Unity3D:项目 ID 不匹配的情况下如何应对

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 如果在 Services 窗口的 Settings 中找不到项目 ID,或者如果发现项目 ID 不匹配,这可能是因为使用了较早版本的 Unity 来升级项目,或在脱机时创建…

Win10电脑应用程序并行配置不正确怎么办?

Win10电脑应用程序并行配置不正确怎么办?有用户在运行某些软件时,突然提示出错信息“应用程序无法启动,因为应用程序的并行配置不正确,出现这一问题可能是禁用本地相关服务,或者新安装的系统缺少必要的VC 运行。那么具…

PTQ-PDPMV1 PROSOFT DP主网络接口模块

Quantum的PROFIBUS DP主网络接口模块 PTQ-PDPMV1 PROFIBUS DP主网络接口允许Quantum处理器与支持PROFIBUS DP V0或V1的从设备轻松连接。该模块作为PROFIBUS网络和处理器之间的输入/输出模块。PROFIBUS是工业自动化中最常用的协议之一。应用领域包括电力和配电、石化、水和天然…

基于stm32mp157 linux开发板ARM裸机开发教程7:Cortex-A7 GPIO 实验(连载中)

前言: 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板) 针对对FS-MP1A开发板&…

如何在命令行编译运行java程序?

2023年5月29日,周一下午: 好久没写java程序了,今天居然忘了怎么用命令行编译运行java程序了,还好后来想起来了,为了避免忘记,写篇博客记录一下 1、先用记事本等编辑器写一个java程序,文件名要和…

网络货运系统源码 网络货运平台源码,货运APP源码 货物运输管理源码

网络货运系统源码 网络货运平台源码,货运APP源码 货物运输管理源码 网络货运为无车承运人更名而来,网络货运平台的好处可以节省找车找货的时间与成本。根据国家对智慧物流行业的发展规划,及《网络平台道路货物运输经营管理办法》等相关法律法…

github创建仓库和拉取代码

目录 一、git创建仓库 第一步:首先登录github 第二步:进入建立的仓库(或者新建仓库) 第三步:创建成功 第四步:在本地新建一个文件夹,然后在文件夹下打开git bash 第五步:在git bash命令框执行git init…

Linux:centos:修改临时ip永久ip

使用 ifconfig 查看网卡信息以及ip 临时配置ip 找到要修改ip的网卡的名称(我这里使用名称为:ens33网卡) # ifconfig 网卡名 ip /子网掩码 ifconfig ens33 192.168.1.2/24 配置永久ip 去配置网卡文件 vi /vim 或 nano vim /etc/s…