一、简介

理论知识参考文献:基于Retinex和ADMM优化的水下光照不均匀图像增强算法

二、部分源代码

function out = PlugPlayADMM_deblur(y,h,lambda,method,opts)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%out = PlugPlayADMM_deblur(y,h,lambda,method,opts)
%deblurs image y by solving the ADMM:
%
%inversion step: x=argmin_x(||Ax-y||^2+rho/2||x-(v-u)||^2)
%denoising step: v=Denoise(x+u)
%      update u: u=u+(x-v)
%
%Input:           y    -  the observed gray scale image
%                 h    -  blur kernel
%              lambda  -  regularization parameter
%              method  -  denoiser, e.g., 'BM3D'
%       opts.rho       -  internal parameter of ADMM {1}
%       opts.gamma     -  parameter for updating rho {1}
%       opts.maxitr    -  maximum number of iterations for ADMM {20}
%       opts.tol       -  tolerance level for residual {1e-4}
%       ** default values of opts are given in {}.
%
%Output:          out  -  recovered gray scale image
%
%Xiran Wang and Stanley Chan
%Copyright 2016
%Purdue University, West Lafayette, In, USA.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Check inputs
if nargin<4error('not enough input, try again \n');
elseif nargin==4opts = [];
end% Check defaults
if ~isfield(opts,'rho')opts.rho = 1;
end
if ~isfield(opts,'max_itr')opts.max_itr = 20;
end
if ~isfield(opts,'tol')opts.tol = 1e-4;
end
if ~isfield(opts,'gamma')opts.gamma=1;
end
if ~isfield(opts,'print')opts.print = false;
end% set parameters
max_itr   = opts.max_itr;
tol       = opts.tol;
gamma     = opts.gamma;
rho       = opts.rho;%initialize variables
dim         = size(y);
N           = dim(1)*dim(2);
Hty         = imfilter(y,h,'circular');
eigHtH      = abs(fftn(h, dim)).^2;residual    = inf;%set function handle for denoiser
switch methodcase 'BM3D'denoise=@wrapper_BM3D;case 'TV'denoise=@wrapper_TV;case 'NLM'denoise=@wrapper_NLM;case 'RF'denoise=@wrapper_RF;otherwiseerror('unknown denoiser \n');
end% main loopif opts.print==truefprintf('Plug-and-Play ADMM --- Deblurring \n');fprintf('Denoiser = %s \n\n', method);fprintf('itr \t ||x-xold|| \t ||v-vold|| \t ||u-uold|| \n');
enditr = 1;
while(residual>tol&&itr<=max_itr)%store x, v, u from previous iteration for psnr residual calculationx_old = x;v_old = v;u_old = u;%inversion stepxtilde = v-u;rhs    = fftn(Hty+rho*xtilde,dim);x      = real(ifftn(rhs./(eigHtH+rho),dim));%denoising stepvtilde = x+u;vtilde = proj(vtilde);sigma  = sqrt(lambda/rho);v      = denoise(vtilde,sigma);%update langrangian multiplieru      = u + (x-v);%update rhorho = rho*gamma;%calculate residualresidualx = (1/sqrt(N))*(sqrt(sum(sum((x-x_old).^2))));residualv = (1/sqrt(N))*(sqrt(sum(sum((v-v_old).^2))));residualu = (1/sqrt(N))*(sqrt(sum(sum((u-u_old).^2))));residual = residualx + residualv + residualu;if opts.print==truefprintf('%3g \t %3.5e \t %3.5e \t %3.5e \n', itr, residualx, residualv, residualu);enditr = itr+1;
end
out = v;
end
function y = afun(x,transp_flag,h,dim)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Example of the A matrix
%
% This example illustrates how to construct the A matrix
% for deblurring problem. The function executes the operations of
% A*x and A'*x
%
% Stanley Chan
% Purdue University
% Nov 24, 2016
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rows = dim(1);
cols = dim(2);
if strcmp(transp_flag,'transp')         % y = A'*xx = reshape(x,[rows,cols]);y = imfilter(x,rot90(h,2),'circular');y = y(:);
elseif strcmp(transp_flag,'notransp')   % y = A*xx = reshape(x,[rows,cols]);y = imfilter(x,h,'circular');y = y(:);
end
end
function out = wrapper_NLM(in,sigma)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% out = wrapper_NLM(in,sigma)
% performs non-local means denoising
%
% Require NLM package
%
% Download:
% http://www.ipol.im/pub/art/2011/bcm_nlm/
%
% Xiran Wang and Stanley Chan
% Copyright 2016
% Purdue University, West Lafayette, In, USA.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Options.filterstrength=sigma;
out = NLMF(in,Options);
end

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]刘卫东,李吉玉,张文博,李乐.基于Retinex和ADMM优化的水下光照不均匀图像增强算法[J].西北工业大学学报. 2021,39(04)

【图像去噪】基于matlab即插即用法图像去噪【含Matlab源码 152期】相关推荐

  1. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  2. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  3. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  4. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  5. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  6. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  7. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  8. 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】

    一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...

  9. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  10. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

最新文章

  1. Mysql 宕机引发索引丢失很可怕,文件 IO 中如何保证掉电不丢失数据?
  2. StringUtils 正则校验
  3. 2017 年热门编程语言排行榜,你的语言上榜没?
  4. 从零开始学习docker(六)部署一个稍微复杂一点的应用
  5. Unity MMORPG游戏优化经验分享
  6. AdapterView及其子类之一:基本原理(ListView、ListActivity类型)
  7. ajax 微信code获取_获取链接的参数,判断是否是微信打开,ajax获取数据
  8. 计算机网络 --- 数据链路层介质访问控制
  9. oracle job定时报错,Oracle Job定时任务的使用详解
  10. php去掉 x5E,清除wordpress里PHP文件恶意代码
  11. 自学前端到底要学什么?五年老前端现身说法
  12. springboot应用启动原理(一) 将启动脚本嵌入jar
  13. hyper-V管理器构建win7虚拟机
  14. MySQL--基于Xtrabackup+Shell+Crond实现的数据库(全量+增量)热备份方案
  15. spring boot学习2,日志框架
  16. spark kryo java,在Spark中自定义Kryo序列化输入输出API
  17. 如何理解凸优化中的共轭函数的定义?
  18. [渝粤教育] 四川大学 模拟电子技术基础(Ⅰ) 参考 资料
  19. springboot工程中限流方式
  20. 在线订舱物流详情 广州力其

热门文章

  1. BZOJ1101 [POI2007] Zap
  2. JavaScript小练习2
  3. AngularJS图片上传功能的实现
  4. 20191109每日一句
  5. C++ 输入多行以空格分隔的数将其变为数组,动态申请二维数组
  6. unity UI 之text and image
  7. Atitit 获取一列拼接为字符串 逗号分隔 目录1.1. Sql Group_contackt,但是排序只能拍一个的。。如果多个列对应排序则不行。。。 11.2. Js 使用map函数 1
  8. Atiitt 日志技术的重大问题解决法 目录 1.1. 只想看某些日志,使用tag过滤法 1 1.2. 能方便清晰的列出某一业务(如支付)的完整的处理流程 业务tag 1 1.3. - NDC(N
  9. Atitit  技术经理职责与流程表总结
  10. titit 切入一个领域的方法总结 attilax这里,机器学习为例子