一种基于凸优化的图像去噪方法演示
本文介绍一种基于凸优化的图像去噪方法。 该方法采用L1范数来衡量图像的平滑度,即能滤除澡声,又能最大限度地保存图像的边缘。 模型如下:其中f(x)为差分矩阵,存放了X每个元素与其4邻域的差值。 I为输入的灰度图像。 对于三通道彩色图像,可对每个通道进行单独处理。gamma为权重,值趣大则图像越平滑。
上述模型为无约束的最小化问题 ,用线性规化可解。 在这里用一个很强大通用的matlab算法包CVX[1]进行求解,可从网上下载。 代码如下:
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值,得到如下三个结果:
补充:综合编程 , 其他综合 ,