一种基于凸优化的图像去噪方法演示
本文介绍一种基于凸优化的图像去噪方法。 该方法采用L1范数来衡量图像的平滑度,即能滤除澡声,又能最大限度地保存图像的边缘。 模型如下:
clc;
clear;
close all;
%% 读入图像并进行加噪处理
I = imread('lean.jpg');
noise_level = 0.2;
G = mat2gray(I) + randn(size(I))*noise_level;
J = zeros(size(I));
%% 对每个通道进行优化
gamma = 0.003;
for i=1:3
g = G(:,:,i);
[m,n] = size(g);
cvx_begin
variable x(m,n)
minimize (norm(x-g,'fro')+gamma*sum(sum(abs((x(:,1:end-1)-x(:,2:end)))))+gamma*sum(sum(abs((x(1:end-1,:)-x(2:end,:))))))
cvx_end
J(:,:,i) = x; %保存优化结果
end
%% 显示图像
figure;
subplot(131);
imshow(I)
title('original image');
subplot(132);
imshow(G)
title('corrupted image');
subplot(133);
imshow(mat2gray(J));
str = ['denoising result (\gamma = ' num2str(gamma) ')'];
title(str);
经过设置不同的gamma值,得到如下三个结果:



参考: [1] Michael Grant and Stephen Boyd. CVX: Matlab software for disciplined convex programming, version 2.0 beta.http://cvxr.com/cvx, September 2013.