当前位置:编程学习 > 网站相关 >>

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

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


补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,