您的位置:首页 > 其它

一种基于凸优化的图像去噪方法演示

2017-09-01 18:06 274 查看
本文介绍一种基于凸优化的图像去噪方法。 该方法采用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值,得到如下三个结果:







参考: 

[1] Michael Grant and Stephen Boyd. CVX: Matlab software for disciplined
convex programming, version 2.0 beta.http://cvxr.com/cvx,
September 2013.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图像处理