【交替方向乘子方法】ADOM: 基于ADMM的遥感图像条纹噪声去除优化模型(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文章


💥1 概述

摘要:
遥感图像对于地球观测和气候变化等各种任务非常有用。然而,由于传感器系统的物理限制,遥感图像可能会受到条纹噪声的影响。因此,图像去条纹处理是必不可少的,因为条纹噪声可能在实际应用中造成严重问题。在本文中,我们将提出一种新的基于交替方向乘子方法(ADMM)的优化模型,称为ADOM,用于去除遥感图像中的条纹噪声。首先,我们为了去除条纹噪声而从观察图像中找到条纹噪声成分制定了一个优化函数,然后通过优化过程解决该优化函数以提取条纹噪声成分。在优化过程中,我们将提出一种基于权重的检测策略,以实现高效的条纹噪声成分捕捉,并提出一种基于ADMM的加速策略,以实现快速的条纹噪声去除。在基于权重的检测策略中,我们通过调整动量系数和残差参数生成的加权范数,有效地检测与图像细节相似的条纹噪声。在基于ADMM的加速策略中,我们通过使用两种控制策略加速优化过程:基于证据的起始点控制和基于动量的步长控制。前者为更准确地找到条纹噪声成分提供了一个起始点,后者利用动量系数加速收敛,同时通过利用阻尼系数提供优化稳定性。我们的实验结果表明,与其他去条纹模型相比,ADOM在模拟和真实图像数据集上均表现出更好的性能。

卫星或机载平台获取的遥感图像(RSI)为监测、森林砍伐、环境测量、气象观测、预警和自然灾害预测等各个领域的决策提供了丰富的信息。通过将传感器测量值调整为相应的实际地面真值,校准在RSI分析中起着至关重要的作用。然而,由于传感器系统中探测器之间存在相对增益和偏移的差距,校准后RSI中经常出现条纹噪声。图像中的条纹噪声可能对视觉质量产生负面影响,并可能在分类和目标检测等应用中造成严重问题。由于硬件升级可能无法完全解决这一问题,因此在RSI中开发条纹噪声去除的图像处理技术至关重要和必不可少。

图像去条纹是指从图像中去除条纹的过程,是图像处理领域的一个活跃研究课题。在过去几十年里,已经开发出了许多针对RSI的图像去条纹方法。它们大致可分为四类:基于滤波的方法、基于统计的方法、基于深度学习的方法和基于优化的方法。基于滤波的方法高效且易于实现,但由于过度滤波可能导致模糊伪影,因此有些结果可能会受到影响。另一方面,基于统计的方法通过利用图像的统计特性快速去除条纹噪声。然而,它们的性能通常受到限制,因为它们依赖于参考图像。基于深度学习的方法由于能够有效提取图像的关键特征而成为去除条纹噪声的热门解决方案。然而,这些方法的性能受到领域依赖性问题的限制,这一问题受到训练数据的数量和质量的影响,限制了它们的泛化能力。尽管致力于减少领域依赖性的影响,改进深度学习模型的性能仍然具有挑战性,因为缺乏可靠的真实数据。此外,开发深度学习模型需要大量实验,通常涉及大量计算资源,导致碳排放增加。换句话说,深度学习模型可能对环境产生负面影响,因为训练所需的大量计算资源会导致碳排放的增加。近年来,基于优化的方法在图像去条纹领域显示出了有希望的结果。这些方法将图像或条纹噪声的先验知识整合到目标函数中,以有效去除条纹噪声。与基于深度学习的方法相比,这些方法的优点在于可以在不需要大量训练数据的情况下执行条纹噪声去除。然而,现有的基于优化的方法在两个方面仍然存在限制。

首先,由于保留图像细节(如边缘和纹理)的限制,它们通常会导致去除条纹噪声的结果不准确。为了解决这个问题,一些现有的基于优化的方法使用了L0、L1和L2,1-范数等函数,这些函数表示了关于条纹方向和结构特征的先验知识。此外,加权范数也被用于有效地找到条纹。然而,现有方法往往会过度平滑图像,导致图像细节的丢失。此外,它们在准确找到条纹噪声成分方面存在局限性。因此,需要一种新的加权范数来在提高条纹噪声去除性能的同时有效保留图像细节。

其次,优化过程涉及迭代地寻求最佳解,直到达到令人满意的停止标准,这可能导致显著的计算开销。最近,交替方向乘子方法(ADMM)在图像去条纹中被广泛使用,通过将优化问题分解为较小的子问题,以有效地为目标函数导出最佳解。然而,由于随着解的接近收敛,更新变得不太变化,ADMM存在耗时的问题。因此,需要一种加速ADMM的方法,以快速去除图像中的条纹噪声。

在本文中,我们将提出一种新的基于ADMM的优化模型(ADOM)用于去除RSI中的条纹噪声。尽管现有的基于优化的方法主要集中于增强视觉质量,但我们将提出一种基于权重的检测策略,以有效捕获条纹噪声成分,并提出一种基于ADMM的加速策略,以实现快速去除条纹噪声。

详细文章见第4部分。

📚2 运行结果

部分代码:

addpath(genpath('./utils'));

% cuprite
load('cuprite_band10.mat');

if max(I,[],'omitnan')>3000
    %peakval=4096;
    %peakval=16384;
    peakval=8192; % paviau_b103;
    %peakval=32768;
    %peakval=65536;
elseif max(I,[],'omitnan')>512
    peakval=2048;
else
    peakval=256;
end
[m,n] = size(I); % row, col


% % % % % case2 (Non-periodic stripes)
stripe_min = -40;        %%% min value
stripe_max = 40;         %%% max value
temp=(repmat((stripe_max - stripe_min).*rand(1,size(I,2)) + stripe_min,size(I,1),1));
vnoi=temp(1,:)/255;
rsel = randperm(n,round(n*0.40));
tnoise=zeros(m,n);
for i=1:size(rsel,2)
    tnoise(:,rsel(i))=vnoi(i);
end
Is = (I/peakval + tnoise).*peakval;

tic; [out, iteration] = destriping(Is,peakval); toc1=toc;


m = metric_ref(I,out.*peakval,peakval,toc1,'ADOM');

f1=im_export(I,'Clean')
f2=im_export(Is,'Noisy')
f3=im_export(out,'ADOM')

load('mycolor.mat')
f4=figure('Name','Clean','Renderer','Painters'), imshow(abs(I/peakval*255/60-I/peakval*255/60)); colormap(mycolor); caxis([0 1]);
f5=figure('Name','Noisy','Renderer','Painters'), imshow(abs(I/peakval*255/60-Is/peakval*255/60)); colormap(mycolor); caxis([0 1]);
f6=figure('Name','ADOM','Renderer','Painters'), imshow(abs(I/peakval*255/60-out*255/60)); colormap(mycolor); caxis([0 1]);
 

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

Namwon Kim, Seong-Soo Han, Chang-Sung Jeong (2023)

🌈4 Matlab代码、数据、文章

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值