当前位置:网站首页>[video denoising] video denoising based on salt with matlab code
[video denoising] video denoising based on salt with matlab code
2022-06-11 18:56:00 【Matlab scientific research studio】
1 brief introduction
Recent works on adaptive sparse and low-rank signal modeling have demonstrated their usefulness, especially in image/video processing applications. While a patch-based sparse model imposes local structure, low-rankness of the grouped patches exploits non-local correlation. Applying either approach alone usually limits performance in various low-level vision tasks. In this work, we propose a novel video denoising method, based on an online tensor reconstruction scheme with a joint adaptive sparse and low-rank model, dubbed SALT. An efficient and unsupervised online unitary sparsifying transform learning method is introduced to impose adaptive sparsity on the fly. We develop an efficient 3D spatio-temporal data reconstruction framework based on the proposed online learning method, which exhibits low latency and can potentially handle streaming videos. To the best of our knowledge, this is the first work that combines adaptive sparsity and low-rankness for video denoising, and the first work of solving the proposed problem in an online fashion. We demonstrate video denoising results over commonly used videos from public datasets. Numerical experiments show that the proposed video denoising method outperforms competing methods.







2 Part of the code
function [Xr, outputParam] = SALT_videodenoising(data, param)%Function for denoising the gray-scale video using SALT denoising%algorithm.%%Note that all input parameters need to be set prior to simulation. We%provide some example settings using function SALT_videodenoise_param.%However, the user is advised to carefully choose optimal values for the%parameters depending on the specific data or task at hand.%% The SALT_videodenoising algorithm denoises an gray-scale video based% on joint Sparse And Low-rank Tensor Reconstruction (SALT) method.% Detailed discussion can be found in%% (1) "Joint Adaptive Sparsity and Low-Rankness on the Fly:% An Online Tensor Reconstruction Scheme for Video Denoising",% written by B. Wen, Y. Li, L, Pfister, and Y Bresler, in Proc. IEEE% International Conference on Computer Vision (ICCV), Oct. 2017.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Inputs -% 1. data : Video data / path. The fields are as follows -% - noisy: a*b*numFrame size gray-scale tensor for denoising% - oracle: path to the oracle video (for% PSNR calculation)%% 2. param: Structure that contains the parameters of the% VIDOSAT_videodenoising algorithm. The various fields are as follows% -% - sig: Standard deviation of the additive Gaussian% noise (Example: 20)% - onlineBMflag : set to true, if online VIDOSAT% precleaning is used.% Outputs -% 1. Xr - Image reconstructed with SALT_videodenoising algorithm.% 2. outputParam: Structure that contains the parameters of the% algorithm output for analysis as follows% -% - PSNR: PSNR of Xr, if the oracle is provided% - timeOut: run time of the denoising algorithm% - framePSNR: per-frame PSNR values%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% parameter & initialization %%%%%%%%%%%%%%% (0) Load parameters and dataparam = SALT_videodenoise_param(param);noisy = data.noisy; % noisy% (1-1) Enlarge the frame[noisy, param] = module_videoEnlarge(noisy, param);if param.onlineBMflagdata.ref = module_videoEnlarge(data.ref, param);end[aa, bb, numFrame] = size(noisy); % height / width / depth% (1-2) parametersdim = param.dim; % patch length, i.e., 8n3D = param.n3D; % TL tensor sizetempSearchRange = param.tempSearchRange;startChangeFrameNo = tempSearchRange + 1;endChangeFrameNo = numFrame - tempSearchRange;blkSize = [dim, dim];slidingDis = param.strideTemporal;numFrameBuffer = tempSearchRange * 2 + 1;param.numFrameBuffer = numFrameBuffer;nFrame = param.nFrame;% (1-3) 2D indexidxMat = zeros([aa, bb] - blkSize + 1);idxMat([[1:slidingDis:end-1],end],[[1:slidingDis:end-1],end]) = 1;[indMatA, indMatB] = size(idxMat);param.numPatchPerFrame = indMatA * indMatB;% (1-4) buffer and output initializationIMout = zeros(aa, bb, numFrame);Weight = zeros(aa, bb, numFrame);buffer.YXT = zeros(n3D, n3D);buffer.D = kron(kron(dctmtx(dim), dctmtx(dim)), dctmtx(nFrame));%%%%%%%%%%%%%%% (2) Main Program - video streaming %%%%%%%%%%%%%tic;for frame = 1 : numFramedisplay(frame);% (0) select G_tif frame < startChangeFrameNocurFrameRange = 1 : numFrameBuffer;centerRefFrame = frame;elseif frame > endChangeFrameNocurFrameRange = numFrame - numFrameBuffer + 1 : numFrame;centerRefFrame = frame - (numFrame - numFrameBuffer);elsecurFrameRange = frame - tempSearchRange : frame + tempSearchRange;centerRefFrame = startChangeFrameNo;end% (1) Input buffertempBatch = noisy(:, :, curFrameRange);extractPatch = module_video2patch(tempBatch, param); % patch extraction% (2) KNN << Block Matching (BM) >>% Options: Online / Offline BMif param.onlineBMflag% (2-1) online BM using pre-cleaned datatempRef = data.ref(:, :, curFrameRange);refPatch = module_video2patch(tempRef, param);[blk_arr, ~, blk_pSize] = ...module_videoBM_fix(refPatch, param, centerRefFrame);else% (2-2) using offline BM resultblk_arr = data.BMresult(:, :, frame);blk_pSize = data.BMsize(:, :, frame);end% (3) Denoising current G_t using LR approximation[denoisedPatch_LR, weights_LR] = ...module_vLRapprox(extractPatch, blk_arr, blk_pSize, param);% (4) Denoising current G_t using Online TL[denoisedPatch_TL, frameWeights_TL, buffer] = ...module_TLapprox(extractPatch, buffer, blk_arr, param);% (5) fusion of the LR + TL + noisy heredenoisedPatch = denoisedPatch_LR + denoisedPatch_TL + extractPatch * param.noisyWeight;weights = weights_LR + frameWeights_TL + param.noisyWeight;% (6) Aggregation[tempBatch, tempWeight] = ...module_vblockAggreagtion(denoisedPatch, weights, param);% (7) update reconstructionIMout(:, :, curFrameRange) = IMout(:, :, curFrameRange) + tempBatch;Weight(:, :, curFrameRange) = Weight(:, :, curFrameRange) + tempWeight;endoutputParam.timeOut = toc;% (3) Normalization and OutputXr = module_videoCrop(IMout, param) ./ module_videoCrop(Weight, param);outputParam.PSNR = PSNR3D(Xr - double(data.oracle));framePSNR = zeros(1, numFrame);for i = 1 : numFrameframePSNR(1, i) = PSNR(Xr(:,:,i) - double(data.oracle(:,:,i)));endoutputParam.framePSNR = framePSNR;end
3 Simulation results


4 reference
[1] Wen B , Li Y , Pfister L , et al. Joint Adaptive Sparsity and Low-Rankness on the Fly: An Online Tensor Reconstruction Scheme for Video Denoising[C]// 2017 IEEE International Conference on Computer Vision (ICCV). IEEE, 2017.
About bloggers : Good at intelligent optimization algorithms 、 Neural networks predict 、 signal processing 、 Cellular automata 、 The image processing 、 Path planning 、 UAV and other fields Matlab Simulation , relevant matlab Code problems can be exchanged by private letter .
Some theories cite network literature , If there is infringement, contact the blogger to delete .
边栏推荐
- Cf:e. price maximization [sort + take mod + double pointer + pair]
- 2023年西安交通大学管理学院MPAcc提前批面试网报通知
- 【信号去噪】基于非线性滤波器实现语音自适应去噪附matlab代码
- 软件开发的整体流程
- cf:A. Print a Pedestal (Codeforces logo?) [simple traversal simulation]
- 北京邮电大学2023级工商管理硕士MBA(非全日制)已开启
- 添加自己喜欢的背景音乐
- 开发中必备的文件的上传与下载
- Replace the backbone of target detection (take the fast RCNN as an example)
- Niu Ke's question -- finding the least common multiple
猜你喜欢

基于TI AM5728 + Artix-7 FPGA开发板(DSP+ARM) 5G通信测试手册

Swagger2 easy to use

cf:B. Array Decrements【模拟】

Why is ti's GPMC parallel port more often used to connect FPGA and ADC? I give three reasons
2022 coming of age ceremony, to every college entrance examination student

Cf:d. black and white stripe
制造出静态坦克

Teach you how to learn the first set and follow set!!!! Hematemesis collection!! Nanny level explanation!!!

The Economist: WTO MC12 restarts the digital economy and becomes the core engine of global economic recovery and growth

【信号去噪】基于非线性滤波器实现语音自适应去噪附matlab代码
随机推荐
【Multisim仿真】利用运算放大器产生锯齿波
The nearest common ancestor of binary tree
Quanzhi technology T3 development board (4-core arm cortex-a7) - mqtt communication protocol case
【信号去噪】基于FFT和FIR实现信号去噪附matlab代码
cf:D. Black and White Stripe【连续k个中最少的个数 + 滑动窗口】
Overall process of software development
Niu Ke swipes the question -- converting a string to an integer
Realize that you can continue to play
Friendly tanks fire bullets
动态爆炸效果
《经济学人》:WTO MC12重启 数字经济成为全球经济复苏和增长的核心引擎
Mysql深入完全学习---阶段1---学习总述
软件开发的整体流程
Gmail:如何撤回发出的邮件?
为何TI的GPMC并口,更常被用于连接FPGA、ADC?我给出3个理由
Cf:b. array determinations
Kubernetes binary installation (v1.20.15) (IX) closeout: deploy several dashboards
BottomSheetDialog 使用详解,设置圆角、固定高度、默认全屏等
kubernetes 二进制安装(v1.20.15)(九)收尾:部署几个仪表盘
2022 coming of age ceremony, to every college entrance examination student