基于matlab的低秩结构重构算法仿真实现,对比ALM,IT,APG,ADMM
生活随笔
收集整理的這篇文章主要介紹了
基于matlab的低秩结构重构算法仿真实现,对比ALM,IT,APG,ADMM
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
一、理論基礎(chǔ)
二、核心程序
三、測(cè)試結(jié)果
一、理論基礎(chǔ)
? ? ? ?從數(shù)學(xué)上講, 矩陣的秩反應(yīng)了矩陣的固有屬性, 矩陣的低秩性是指矩陣的秩相對(duì)于矩陣的行數(shù)和列數(shù)而言很小.低秩矩陣稀疏分解模型是將已知矩陣M (M∈Rm×n) 分解為一個(gè)低秩矩陣部分L (L∈Rm×n, rank (L) ≤m, n) 和一個(gè)稀疏矩陣部分S (S∈Rm×n) , 即M=L+S.
?
增廣拉格朗日乘子法(ALM)??????????????????
迭代閾值算法(IT)
加速近端梯度算法(APG)
交替方向乘子算法(ADMM)
二、核心程序
增廣拉格朗日乘子法(ALM)??????????????????
clc; clear; close all; warning off; addpath 'func\'I1=imresize(imread('1.jpg'),[256,256]); I2=imresize(imread('2.jpg'),[256,256]);Init = I2; figure; subplot(121); imshow(Init); title('原始圖'); %original image x = double(rgb2gray(Init));tic; [A_hat,E_hat,iter] = func_ALM(x,0.1,0.05,100); toc;subplot(122); imshow(A_hat,[]); title('ALM處理結(jié)果');迭代閾值算法(IT)
clc; clear; close all; warning off; addpath 'func\'I1=imresize(imread('1.jpg'),[256,256]); I2=imresize(imread('2.jpg'),[256,256]);Init = I2; figure; subplot(121); imshow(Init);tic; title('原始圖'); %迭代閾值算法 Im = rgb2gray(Init); [x,y]= size(Im); b = double(Im); zd = double(max(Im)); zx = double(min(Im)); T = double((zd+zx))/2; count= double(0); while 1 % 迭代最佳閾值分割算法 count=count+1; S0=0.0; n0=0.0; S1=0.0; n1=0.0; for i=1:x for j=1:y if double(Im(i,j))>=T %大于閾域值圖像點(diǎn)灰度值累加 S1=S1+double(Im(i,j)); %大于閾域值圖像點(diǎn)個(gè)數(shù)累加 n1=n1+1; else %小于閾域值圖像點(diǎn)灰度值累加 S0=S0+double(Im(i,j)); %小于閥域值圖像點(diǎn)個(gè)數(shù)累加 n0=n0+1; end end end %求小于閥域值均值 T0=S0/n0; %求大于閥域值均值 T1=S1/n1; %迭代至前后兩次閥域值相差幾乎為0時(shí)if abs(T-((T0+T1)/2))<0.1 break; else %在閾值T下,迭代閾值的計(jì)算過程T=(T0+T1)/2; end end toc T i1=im2bw(Im,T/255); % 圖像在最佳閾值下二值化 subplot(122) imshow(i1) title(['迭代后最終閾值輸出:',num2str(T)]);加速近端梯度算法(APG)
clc; clear; close all; warning off; addpath 'func\'I1=imresize(imread('1.jpg'),[256,256]); I2=imresize(imread('2.jpg'),[256,256]);Init = I2; figure; subplot(131); imshow(Init); title('原始圖'); tic [A_hat,E_hat] = func_APG(double(rgb2gray(Init)),0.05,1000); toc subplot(132); imshow(A_hat,[]); title('low-rank結(jié)果'); subplot(133); imshow(E_hat); title('處理誤差');交替方向乘子算法(ADMM)
clc; clear; close all; warning off; addpath 'func\'I1=imresize(imread('1.jpg'),[256,256]); I2=imresize(imread('2.jpg'),[256,256]);Init = I2; figure; subplot(121); imshow(Init); title('原始圖'); %original image tic x = double(rgb2gray(Init)); [M,N] = size(x); %FFT2 [H_FFT,HC_FFT]=func_hfft(x);A = @(x) real(ifft2(H_FFT.*fft2(x))); AT = @(x) real(ifft2(HC_FFT.*fft2(x)));global calls; calls = 0; A = @(x) callcounter(A,x); AT = @(x) callcounter(AT,x); %觀測(cè)矩陣 Ax = A(x); Psig = norm(Ax,'fro')^2/(M*N); y = Ax; %parameters lambda = 2.0e-2; mu = lambda/10; outeriters = 500; tol = 1e-5; %TV Phi_TV = @(x) TVnorm(x); chambolleit= 10; Psi_TV = @(x,th) mex_vartotale(x,th,'itmax',chambolleit); alpha = 1.2; filter_FFT = 1./(abs(H_FFT).^2 + mu*alpha); invLS = @(x) real(ifft2(filter_FFT.*fft2( x ))); invLS = @(x) callcounter(invLS,x);[x_salsa, numA, numAt, objective1, distance, times1, mses1] = func_ADMM(y, A, lambda, 'MU', mu, 'AT', AT, 'StopCriterion', 1,'True_x', x, 'ToleranceA', tol, 'MAXITERA', outeriters, 'Psi', Psi_TV, 'Phi', Phi_TV, 'TVINITIALIZATION', 1, 'TViters', 10,'LS', invLS, 'VERBOSE', 0);toc subplot(122); imshow(x_salsa,[]); title('admm處理結(jié)果');三、測(cè)試結(jié)果
?
?A23-41
?????????
總結(jié)
以上是生活随笔為你收集整理的基于matlab的低秩结构重构算法仿真实现,对比ALM,IT,APG,ADMM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MYSQL5.7设置账号密码复杂度、密码
- 下一篇: string数据库