高光谱解混和图片去噪(Matlab代码实现)

news2025/7/18 8:13:12

 

 👨‍🎓个人主页:研学社的博客 

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

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

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

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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

本文讲解了图像被混合噪声污染时的高光谱解混算法。还可以减少噪音。噪声可能包括线带、高斯噪声和脉冲噪声。它解决了以下优化问题:

min_A,S ||Y-MA-S||_F^2 + lamda1*||Dh*A'||_2,1 + lambda1 *||Dv*A'||_1 + lamda2 ||S||_1 + lambda3 ||A||_{2,1}

M : 混合矩阵。它是包含端部的光谱特征的矩阵;
Y : 噪声高光谱图像。这是发送到解混算法的图像。
A : 丰度矩阵。
S :稀疏噪声。它表示脉冲噪声以及线带。
Dh, Dv :二维水平和垂直有限差分算子。

📚2 运行结果

 

 部分代码:

%% showing original, noisy, and denoised image
figure;
band=1;
subplot(131);
imagesc(img(:,:,band)); axis 'off'; title('original image');
subplot(132);
imagesc(noisy2(:,:,band)); axis 'off'; title('noisy image');
subplot(133)
imagesc(rec(:,:,band)); axis 'off'; title('reconstructed image');

end
%% This is the main function
function A=funJSTV(M,Y,opts)

lambda1=opts.lambda1; 
lambda2=opts.lambda2; lambda3=opts.lambda3;
mu1=opts.mu1; mu2=opts.mu2;iter=opts.iter; m=opts.m; n=opts.n;
[~,e]=size(M); [~,p]=size(Y);

Dh=TVmatrix(m,n,'H'); %horizontal total variation
Dv=TVmatrix(m,n,'V'); %vertical total variation
D=Dh'*Dh+Dv'*Dv;  
MtM=M'*M;
A=zeros(e,p);
B1=zeros(p,e);B2=B1; Y1=Y; B3=zeros(e,p);

%% main iteration
for i =1:iter
     for j=1:5
         P=softTh(Dh*(A')+B1,lambda1/mu1);
         Q=softTh(Dv*(A')+B2,lambda1/mu1);
         R=softThL21(A+B3,lambda3/mu2);
         S=softTh(Y1-M*A,1/lambda2);
     
        RHS=(mu1*(P-B1)')*Dh+ (mu1*(Q-B2)')*Dv+ M'*(Y1-S) + mu2*(R-B3);
      
        [a,~]=pcg(@afun,RHS(:),1e-15,5);
      
        A=reshape(a,e,p);       
        
        B1=B1+Dh*(A')-P; 
        B2=B2+Dv*(A')-Q;
        B3=B3+A-R;
        
        A=max(0,A);
    end
    Y1=Y1+Y-M*A-S;  
end
 function y = afun(x)      
       X=reshape(x,e,p);
       temp=MtM*X+mu1*X*D +mu2*X;
       %temp=mtimesx(MtM,X,'BLAS')+mu1*mtimesx(X,D,'BLAS');
       y=temp(:);
 end
end
%%  Soft-thresholding for L21-norm minimization
function X=softThL21(B,lambda)
       [m,~]=size(B);
       D= spdiags(sqrt(sum(B.^2,2))-lambda/2,0,m,m);
       X=max(0,D)*normrGood(B);     

end
%% Simple soft-thresholding
function X=softTh(B,lambda)
       X=sign(B).*max(0,abs(B)-(lambda/2));
end
%%  Total variation
function opD=TVmatrix(m,n,str)

if str=='H' % This will give matrix for Horizontal Gradient
    D = spdiags([-ones(n,1) ones(n,1)],[0 1],n,n);
    D(n,:) = 0;
    D = kron(D,speye(m));
    
    
elseif str=='V' %This will give matrix for Verticle Gradient
   D = spdiags([-ones(m,1) ones(m,1)],[0 1],m,m);
   D(m,:) = 0;
   D = kron(speye(n),D);
   
end
opD=D;

end
%% PSNR calculation
function [cpsnr,psnr]=myPSNR(org,recon,skip)
%skip : to skip some boundary lines
org=org(skip+1:end-skip,skip+1:end-skip,:);
recon=recon(skip+1:end-skip,skip+1:end-skip,:);
  [m, n,~]=size(org);

if strcmp(class(org),class(recon))
    sse=squeeze(sum(sum((org-recon).^2))); %square sum of error  
    mse=sse./(m*n);  %mean square error of each band.
    maxval=squeeze(max(max(org)));
    psnr= 10*log10( (maxval.^2) ./mse);
    cpsnr=mean(psnr);
end
end

%% histogram equilization of each band
function img=myhisteq(img)
%make each band in zero to one range
for i=1:size(img,3)
    img(:,:,i)=mat2gray(img(:,:,i));
end
end
%%  add Gaussian noise of given SNR
function [noisy,sigma]=addGaussianNoise(img,snr)
%This function will add Gaussian noise of given SNR.
%img is image in size 


noisy=zeros(size(img));
for i=1:size(img,3)
    band=img(:,:,i);
    varNoise= norm(band(:))^2/(length(band(:)) * (10^ (snr/10)));
    noisy(:,:,i)=band+sqrt(varNoise)*randn(size(band));
end
    sigma=sqrt(varNoise);

end

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Hyperspectral Unmixing in the Presence of Mixed Noise using Joint-Sparsity and Total-Variation by Hemant Kumar Aggarwal, Angshul Majumdar, in IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing (JSTARS), 2016

🌈4 Matlab代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用id限定优化mysql分页查询limit偏移量大问题

在工作中可能偶尔会遇到,当使用limit实现分页查询时,当limit的偏移量越大时,sql语句的耗时也越大。 如图: 偏移量为0时,sql语句耗时在35毫秒。 顺便说下偏移量与页码、页大小的关系: 偏移量 (页码 - 1…

Spark的内存管理机制

在执行Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task&#xf…

深度学习基础--神经网络(1)激活函数

文章目录从感知机到神经网络激活函数阶跃函数(感知机的激活函数)sigmoid函数阶跃函数和sigmoid函数绘制和对比ReLU函数本文为学习笔记参考书籍:《深度学习入门 : 基于Python的理论与实现 》/ (日) 斋藤康毅著 ; 陆宇杰译. – 北京 : 人民邮电…

根据水声和摄影测量数据建立数字测深模型

无人船和无人车正越来越多地用于水深地形测量。使用这些平台采集数据的技术得到普遍的应用,但数据的融合仍然需要深入研究,其融合方法通常依赖于所使用的传感器和测量区域的特性。本文提出了一种融合无人艇(USV)和无人机&#xff…

[附源码]java毕业设计基于的前端课程学习网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Mybatis—SqlNode

SqlNode的主要职责就是描述Mapper文件中配置的SQL信息,在Mybatis源代码中随处都能看见其身影,可见SqlNode地位是相当高的。SqlNode接口只定义了一个apply方法,且该方法只有一个DynamicContext对象作为入参。DynamicContext对象中不仅封装了Ma…

抓包工具 Charles 使用手册

Charles 是一款抓包软件,通过代理的形式拦截所有的 HTTP 和 HTTPS 请求,是开发测试的一大利器 下载和激活 在 Charles 下载安装包,在 此处 获得注册码,点击下方输入注册码激活软件 抓主机的 HTTP 包 选中 Proxy > Windows P…

第五章 数组和广义表

数组和广义表 5.1多维数组 5.1.1数组的逻辑结构 数组是我们熟悉的一种数据结构,可以看作线性表的推广。 数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一类型。比如:一维数组可以看作一个线性表&#…

NDepend v2022.2.1.9665 专业版

NDepend 基本上被描述为.NET 托管代码的静态分析工具。这个特定的工具能够支持大量代码度量,允许使用直接图和依赖矩阵来可视化依赖关系。 NDepend 工具还能够通过架构验证过程以及规则及其质量为用户和开发人员执行基于代码的快照比较。有些规则基本上是用户定义的…

联想中国上半财年业绩:转型深入 方案服务同比增24%

11月15日,联想中国举办2022/23财年上半财年工作总结会。会上透露,联想中国经受住诸多不利因素的考验,PC市场份额保持稳定,3S新业务(3S指智能设备、智能基础设施和方案服务)顽强成长、收入占比达到28.6%&…

MCE 虚拟筛选、小分子化合物库

CNS Library &#xff08;含 47,040 种化合物&#xff09;高血脑屏障穿透率的小分子化合物数据库 CNS library 精选具有低极性表面积(TPSA< 70 2)、低 ClogP (平均为1.63)、低氢键形成程度(氢键供体和受体的总数小于 8 )、低 MW(平均为283) 等具有高血脑屏障穿透率的化合物…

css毛玻璃效果/el-progress进度条渐变/axios的基本使用/跨域配置/关闭eslint验证

css磨砂效果 效果图 实现方法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content&qu…

NNG pair 异步通信

一&#xff0c;利用NNG pair模式&#xff0c;实现异步通信。 二&#xff0c;manager端 绑定地址&#xff0c;回调函数里 接收 异步消息&#xff1a; #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <…

HTTP协议中Gzip格式的流量分析与识别

背景 在协议分析过程中&#xff0c;经常会发现gzip压缩的数据&#xff0c;例如在HTTP协议中&#xff0c;在HTTP头中会标示&#xff0c;内容编码为gzip、DEFLATE。 但是&#xff0c;还有很多情况&#xff0c;例如一些非HTTP协议&#xff0c;特别是私有协议中&#xff0c;数据同…

强大的图片处理工具GraphicsMagick

前言 项目中我们经常需要对图片进行压缩、剪切、添加水印、生成缩略图、图片合成等图片处理操作&#xff0c;关于这些图片复杂处理&#xff0c;我们将如何实现呢&#xff0c;本文将介绍GraphicsMagick对图片进行相关处理功能。 简介 GraphicsMagick是一个免费的创建、编辑、…

16.Redis系列之Redisson分布式锁原理

本文学习Redisson分布式锁的原理以及优缺点 1. Redisson分布式锁原理 lua脚本是原子操作&#xff0c;redis会将整个脚本作为一个整体执行&#xff0c;中间不会被其他命令打断 # RedissonLock.tryLockInnerAsync方法内lua脚本加锁 <T> RFuture<T> tryLockInnerAs…

代码随想录算法训练营第三十四天| LeetCode1005. K 次取反后最大化的数组和、LeetCode134. 加油站、LeetCode135. 分发糖果

一、LeetCode1005. K 次取反后最大化的数组和 1&#xff1a;题目描述&#xff08;1005. K 次取反后最大化的数组和&#xff09; 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过…

TNF 又见 《Cell》

现有的研究表明&#xff0c;需要新的机会来增加免疫检查点封锁&#xff08;Immunecheckpoint blockade&#xff0c;ICB&#xff09;的影响。尽管干扰素&#xff08;IFN&#xff09;γ途径同时具有 ICB 抗性因子和治疗机会&#xff0c;但至今为止&#xff0c;研究人员尚未系统地…

采用新项目管理软件的四个步骤

这是采用新项目管理软件的有趣之处&#xff1a;它本身实际上是一个重大项目&#xff0c;而且您的组织越大&#xff0c;这个过程就越艰巨。 当然&#xff0c;成功的项目管理实施最终将有助于简化您的运营并最大限度地提高跨部门的效率——这有利于团队成员的士气、客户满意度…

国内外的免费AI作图工具

1.文心一格 文心一格 - AI艺术和创意辅助平台 “推荐”页面操作比较简单&#xff0c;只需要需要简单的一句话&#xff0c;等几分钟就可以直接生成&#xff1a; 主要可以用来生成不同“氛围感”十足的场景&#xff1a; 美丽的花田&#xff1a; 优点&#xff1a; 1.比较容易…