高光谱影像信息熵/信噪比计算

基于matlab实现了高光谱影像个波段信噪比和信息熵的计算

  1. 文件导入:影像格式使用的ENVI导出的img+hdr格式,参考的Matlab实现高光谱读取进行的修改。时间伧俗,程序适用性不强,影像的参数需要用记事本打开hdr文件,手动修改程序。
    —— "Float"修改成你的img文件名,例如example.img
    —— bands 、lines 、samples 、interleave可以从hdr文件里找到
    —— ‘float32=>float32’ 对应hdr 里的data type =4。代表数据不同的数据格式,此处参数不同的话需修改,可以参考此处switch datatype case位置的代码 进行对应修改。

  2. 波段信息熵计算:因为导入的数据时float型,所以将其分为N组离散化统计组概率,进而才可以套用公式计算波段信息熵。
    注:imhist函数对于doubel类型分组的范围为0-1之间,所以需要数据的值在这个范围内。

  3. 波段信噪比计算:主要参考ENVI IDL波段信噪比计算实现的matlab版本,详细的原理还可参考这篇论文

-------------有问题可互相探讨交流--------------

程序

%% 文件导入
tic
fprintf("正在打开。。。");
fid = fopen("Float", 'r');
bands = 274;
lines = 2437;
samples =  2379;
interleave = 'bsq';
data = multibandread("Float" ,[lines, samples, bands],'float32=>float32',0,interleave,'ieee-le');
data= double(data);
fprintf('文件导入用时%f s\n', toc)
%%  显示某波段
imshow(data(:,:,100));
%%  计算信息熵
% dataMin = min(min(min(data)));
% dataMax = max(max(max(data)));
N = 2^14; %直方分组数量
Entropy = [];
for i = 1:bandstictemp = data(:,:,i);% 统计单波段直方图,并计算每个区间内的出现概率,0区间是背景不参与统计[counts,x] = imhist(temp , N);P = counts(2:end)/sum(counts(2:end));% 使用公式进行计算,L2P = log2(P);L2P(L2P==-inf)=0;H = -sum(P.*L2P);fprintf('第%d个波段用时%f s\n',i,toc)Entropy = [Entropy,H];
end
%归一化到0-1之间
Entropy = Entropy/max(Entropy);
%可视化
bar(Entropy)
%% 计算信噪比SNR ---基于局部方差法计算遥感影像的信噪比 使用ENVI IDL
% 遥感影像计算信噪比的方法不太一样
% 参考资料:
% https://blog.csdn.net/qq_33356563/article/details/82081081
% https://www.docin.com/p-1473544620.html
fprintf("正在计算信噪比。。。");
width=4;
SNR = [];
for k = 1:bandstictemp = data(:,:,k);% 1.边缘提取--------基于Canny算子对图像进行边缘提取,结果为二值图像mask=edge(temp,'canny');%[0.4,0.6],0.6% 2.边缘块剔除--------按照规定字块尺寸(4x4)对整个图像进行分块,%   统计每一个子块中是否包含有边缘值,若有则将该子块剔除,不再参加后面的信噪比估算。%逐块计算标准差和均值nosie_subset =zeros(uint16(lines/width),uint16(samples/width));singal_subset = zeros(uint16(lines/width),uint16(samples/width));for i=0:uint16(lines/width)-2for j=0:uint16(samples/width)-2%如果当前块含有边缘,则进入下一像元tmask=mask(i*width+1:(i+1)*width,j*width+1:(j+1)*width);if sum(sum(tmask)) ==0  %当前分块数据的标准差及均值tdata=temp(i*width+1:(i+1)*width,j*width+1:(j+1)*width);nosie_subset(i+1,j+1) = std2(tdata);singal_subset(i+1,j+1) = mean2(tdata);endendend% 3.局部方差法估算噪声值singal_subset = singal_subset(singal_subset~=0);nosie_subset = nosie_subset(nosie_subset~=0);% 在局部标准差最小值与平均值的1.2倍之间划分150个区间,% 按标准差大小将各子块落入到相应的区间,以此计算得到直方图。binstart = min(nosie_subset);binend = mean(nosie_subset)*1.2; binsize =(binend-binstart)/150;bincount = [];for i=1:150bin = sum((nosie_subset>=binstart+binsize*(i-1))&(nosie_subset<binstart+binsize*i));bincount = [bincount,bin]; end% 根据直方图统计出包含子块最多的区间,计算区间内标准差的平均值作为噪声估计值。 [~,i]= max(bincount);noise = mean(nosie_subset((nosie_subset>=binstart+binsize*(i-1))&(nosie_subset<binstart+binsize*i)));% 4.信噪比计算--------统计剔除边缘块后的像元平均值作为估计值;波段平均标准差除以该波段的平均值,得到信噪比singal = mean(singal_subset(singal_subset~=0));%信号估计值sn = 10*log(singal/noise);% 单位dBfprintf('第%d个波段用时%f s\n',k,toc)SNR = [SNR ,sn];
end
%可视化
bar(SNR)

https://blog.csdn.net/qq_33356563/article/details/82081081
https://www.docin.com/p-1473544620.html

Matlab 高光谱影像信息熵/信噪比计算相关推荐

  1. 基于MATLAB读取高光谱影像每个像素的光谱信息

    1.安装高光谱工具箱 首先,利用MATLAB对高光谱影像进行处理需要安装高光谱工具箱,这要求MATLAB版本至少为2020版本及以上,否则会出现不兼容的问题. 下载地址:https://ww2.mat ...

  2. matlab 光谱噪声,环境小卫星高光谱影像条纹噪声去除程序IDL版

    前言 源代码 PRO stripe_remove1 ENVI,/Restore_Base_Save_Files ENVI_Batch_init file = DIALOG_PICKFILE(/READ ...

  3. Matlab高光谱遥感数据处理与混合像元分解实践技术

    光谱和图像是人们观察世界的两种方式,高光谱遥感通过"图谱合一"的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测 ...

  4. Matlab高光谱遥感、数据处理与混合像元分解实践技术应用

    光谱和图像是人们观察世界的两种方式,高光谱遥感通过"图谱合一"的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测 ...

  5. Matlab 高光谱遥感数据处理与混合像元分解

    教程从基础.方法.实践三方面对高光谱遥感进行讲解.基础篇,站在学员的角度去理解"高光谱",用大家能听的懂的语言去讲述高光谱的基本概念和理论,帮助学员深入理解这项技术的底层科学机理. ...

  6. Matlab高光谱遥感、数据处理与混合像元分解及典型案例

    站在学员的角度去理解"高光谱",用大家能听的懂的语言去讲述高光谱的基本概念和理论,帮助学员深入理解这项技术的底层科学机理.方法篇,将高光谱技术与MATLAB工具结合起来,采用MAT ...

  7. Matlab高光谱遥感数据处理

    光谱和图像是人们观察世界的两种方式,高光谱遥感通过"图谱合一"的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测 ...

  8. Matlab高光谱遥感数据处理与混合像元分解

    光谱和图像是人们观察世界的两种方式,高光谱遥感通过"图谱合一"的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测 ...

  9. Matlab高光谱遥感数据

    光谱和图像是人们观察世界的两种方式,高光谱遥感通过"图谱合一"的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测 ...

最新文章

  1. cesium坡度坡向分析_景观设计分析图制作技巧到底是什么?
  2. python链表定长翻转_python实现单链表翻转
  3. C语言 extern
  4. 关于properties.load()出现的空指针异常
  5. [转]Banner设计“点横竖撇捺”
  6. ASD: Average Surface Distance
  7. R语言、Meta分析、MATLAB在生态环境领域里的应用
  8. wp文章增加部分内容隐藏功能 -- 微信公众号吸粉
  9. dfs应用,迷宫地图解救小哈
  10. 仿苹果桌面Android,iLauncher(仿苹果桌面)安卓版
  11. 纯CSS实现图片百叶窗展示效果
  12. 用python实现一个自动保存复制图片的功能
  13. 关于《人月神话》的读后感
  14. python PIL图片拼接
  15. TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵
  16. kso经验积累 -- c#发送邮件
  17. 苹果id登录_英雄联盟手游是用苹果ID好还是拳头好 账号选择建议
  18. HDU 1043 Eight(八数码第七境界|A*+哈希+曼哈顿距离)
  19. win10平台下搭建python-pcl环境
  20. 《Cortex-CM3权威指南》——存储器系统

热门文章

  1. 查看当前使用的数据库的版本
  2. 基于Springboot微信点餐系统的开发与实现
  3. SeaMonkey 2.33 正式发布,Mozilla 浏览器套件
  4. slackware linux,seamonkey引起的rpm2tgz问题
  5. 全球及中国磷酸燃料电池行业销售状况及供需前景分析报告2022-2028年版
  6. Python基于Pyecharts 1.X的世界地图、省、市、县(区)地图、热力图和飞行航线图
  7. 回顾一下去年定的小目标
  8. YOLOV7调试的bug
  9. 【娇娘内核】完整解密
  10. Flash Builder 入门