Matlab读取高光谱遥感数据.Mat 和 .tif(2020.12.27)

2023-05-16

Matlab读取高光谱遥感数据

  • 1、高光谱遥感数据简介
  • 2、两个开源的高光谱遥感数据集
  • 3、高光谱遥感数据常用格式
    • 3.1 .Mat
    • 3.2 .Tif
  • 4、Matlab读取高光谱遥感数据
    • 4.1 Matlab读取.Mat格式的高光谱遥感数据
      • 4.1.1 Matlab代码读取.mat
      • 4.1.2 运行结果(整合后):
    • 4.2 Matlab读取.tif格式的高光谱遥感数据
      • 4.2.1 Matlab代码读取.tif
      • 4.2.2 运行结果(整合后):
  • 5 Mat转Tif函数(MATLAB)

1、高光谱遥感数据简介

        遥感影像具有四种分辨率:时间分辨率、空间分辨率、辐射分辨率和光谱分辨率。其中,对于光谱分辨率而言,按照成像传感器波谱通道划分数目的多少,分为多光谱、高光谱和超光谱。通常认为,多光谱波段数目在100以下,高光谱波段数目在100~10000之间,超光谱波段数目在10000以上

2、两个开源的高光谱遥感数据集

        Hyperspectral Remote Sensing Scenes:包含Indian Pines、Salinas、Pavia Centre and University、Cuprite、 Kennedy Space Center、Botswana、anomaly detection(7个地区),在每个地区都会有介绍类型数量、波段数,可直接下载。
在这里插入图片描述

        Hyperspectral Images:Portion of Southern Tippecanoe County, Indiana、Northwest Tippecanoe County, Indiana、Washington DC Mall。
在这里插入图片描述
        这里,我只下载了Washington DC Mall Image的数据,如下图所示:
在这里插入图片描述

3、高光谱遥感数据常用格式

3.1 .Mat

在这里插入图片描述

3.2 .Tif

在这里插入图片描述

4、Matlab读取高光谱遥感数据

4.1 Matlab读取.Mat格式的高光谱遥感数据

        这里以Salinas.mat为例,首先打开Matlab软件,进入下载的高光谱遥感数据目录,作为工作空间;然后修改输入文件名后运行以下代码。
在这里插入图片描述

4.1.1 Matlab代码读取.mat

load('Salinas.mat')
InputMatImg=salinas;
b = size(InputMatImg);
fprintf('输入图像宽度为 %d\n',b(1));
fprintf('输入图像高度为 %d\n',b(2));
fprintf('输入图像波段数为 %d\n',b(3));
i=120;j=180;k=220;%自选三个波段
InputImg_r= InputMatImg(:,:,i);%获取第i个波段
InputImg_g= InputMatImg(:,:,j);%获取第j个波段
InputImg_b= InputMatImg(:,:,k);%获取第k个波段
InputImg_r= uint8(InputImg_r);%将i波段的灰度值转为0~255
InputImg_g= uint8(InputImg_g);%将j波段的灰度值转为0~255
InputImg_b= uint8(InputImg_b);%将k波段的灰度值转为0~255
RGBImg=cat(3,InputImg_r,InputImg_g,InputImg_b);%将i、j、k三个波段进行合成
figure;
subplot(221);imshow(InputImg_r);title('红色波段');
subplot(222);imshow(InputImg_g);title('绿色波段');
subplot(223);imshow(InputImg_b);title('蓝色波段');
subplot(224);imshow(RGBImg);title('合成波段');
imwrite(InputImg_r,['MATBand',num2str(i),'.jpg']);
imwrite(InputImg_g,['MATBand',num2str(j),'.jpg']);
imwrite(InputImg_b,['MATBand',num2str(k),'.jpg']);
imwrite(RGBImg,'compositeMATRGBimg.jpg');

4.1.2 运行结果(整合后):

第120波段
第180波段
第220波段
三波段组合
Salinas_gt

4.2 Matlab读取.tif格式的高光谱遥感数据

        这里以dc.tif(Washington DC Mall)为例,首先进入文件所在目录:
在这里插入图片描述
        Matlab代码功能:获取第i、j、k三个波段,然后合成三个波段.

4.2.1 Matlab代码读取.tif

InputTIFImage = importdata('dc.tif');
Info=imfinfo('dc.tif')
i=130;j=160;k=190;%自选三个波段
InputImage_r= InputTIFImage(:,:,i);%获取第i个波段
InputImage_g= InputTIFImage(:,:,j);%获取第j个波段
InputImage_b= InputTIFImage(:,:,k);%获取第k个波段
Image_r= uint8(InputImage_r);%将i波段的灰度值转为0~255
Image_g= uint8(InputImage_g);%将j波段的灰度值转为0~255
Image_b= uint8(InputImage_b);%将k波段的灰度值转为0~255
RGBImg=cat(3,Image_r,Image_g,Image_b);%将i、j、k三个波段进行合成
figure;
subplot(221);imshow(Image_r);title('红色波段');
subplot(222);imshow(Image_g);title('绿色波段');
subplot(223);imshow(Image_b);title('蓝色波段');
subplot(224);imshow(RGBImg);title('合成波段');
imwrite(Image_r,['TIFBand',num2str(i),'.jpg']);
imwrite(Image_g,['TIFBand',num2str(j),'.jpg']);
imwrite(Image_b,['TIFBand',num2str(k),'.jpg']);
imwrite(RGBImg,'compositeRGBTIFimg.jpg');

4.2.2 运行结果(整合后):

第130波段
第160波段
第190波段
三波段组合

5 Mat转Tif函数(MATLAB)

Mat2Tif.m函数脚本文件

%InputMatFileName如D:/360极速浏览器下载/Pavia.mat
%OutputTifFilename如D:/360极速浏览器下载/PaviaTIF.tif
% Mat2Tif('D:/360极速浏览器下载/Pavia.mat','D:/360极速浏览器下载/TifPavia.tif');
function Mat2Tif(InputMatFileName,OutputTifFilename)
    load(InputMatFileName);
    InputMatImg=pavia;
    t = Tiff(OutputTifFilename,'w');
    if size(InputMatImg,3) == 3
        t.setTag('Photometric',Tiff.Photometric.RGB);
    else
        t.setTag('Photometric',Tiff.Photometric.MinIsBlack);%颜色空间解释方式
    end
    t.setTag('Compression',Tiff.Compression.None);%无压缩
    t.setTag('BitsPerSample',64);% 由于输入.mat为double类型,所以选择了64位
    t.setTag('SamplesPerPixel',size(InputMatImg,3));% 每个像素的波段数目
    t.setTag('SampleFormat',Tiff.SampleFormat.IEEEFP);% 配合BitsPerSample64位double类型,选择IEEEFP来对应
    t.setTag('ImageLength',size(InputMatImg,1));% 影像宽度
    t.setTag('ImageWidth',size(InputMatImg,2));% 影像高度
    t.setTag('PlanarConfiguration',Tiff.PlanarConfiguration.Chunky);%平面配置选择集中式
    t.write(InputMatImg);% 准备好了头文件,开始写影像数据
    t.close();% 关闭影像
%下面的代码仅为了测试显示结果
%tdc = Tiff('D:/360极速浏览器下载/TifPavia.tif','r');
%TifPavia = read(tdc);
%close(tdc);
% i=12;j=55;k=89;%自选三个波段
% InputImg_r= TifPavia(:,:,i);%获取第i个波段
% InputImg_g= TifPavia(:,:,j);%获取第j个波段
% InputImg_b= TifPavia(:,:,k);%获取第k个波段
% InputImg_r= uint8(InputImg_r);%将i波段的灰度值转为0~255
% InputImg_g= uint8(InputImg_g);%将j波段的灰度值转为0~255
% InputImg_b= uint8(InputImg_b);%将k波段的灰度值转为0~255
% RGBImg=cat(3,InputImg_r,InputImg_g,InputImg_b);%将i、j、k三个波段进行合成
% figure;
% subplot(221);imshow(InputImg_r);title('红色波段');
% subplot(222);imshow(InputImg_g);title('绿色波段');
% subplot(223);imshow(InputImg_b);title('蓝色波段');
% subplot(224);imshow(RGBImg);title('合成波段');

        转换前Mat三波段与转换后Tif三波段显示效果对比如下图所示。
在这里插入图片描述

原始Mat的三个波段影像展示

在这里插入图片描述

原始Mat转换为Tif后的三个波段影像展示
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab读取高光谱遥感数据.Mat 和 .tif(2020.12.27) 的相关文章

  • 通过 h5py 将 matlab v7.3 文件读入 python numpy 数组列表

    我知道以前已经有人问过这个问题 但在我看来 仍然没有答案可以解释正在发生的事情 并且不适用于我的情况 我有一个 matlab v7 3 文件 其结构如下 gt rank lt 1x454 cell gt gt each element is
  • 在 3d 空间中的两个平面之间进行插值

    我正在开发一种工具 可以让您在 3D 体积 上圈出 包围事物 我想通过标记 切片 1 和 3 并从该信息 填充 切片 2 来节省时间 两个简单的解决方案是 1 slice2 slice1 AND slice3 gets the overla
  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • 两个 y 轴与相同的 x 轴[重复]

    这个问题在这里已经有答案了 可能的重复 在单个图中绘制 4 条曲线 具有 3 个 y 轴 https stackoverflow com questions 1719048 plotting 4 curves in a single plo
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • 在另一列中添加具有特定条件的一列,如 excel 的 sumif

    我有一个像这样的矩阵 A 1 2 2 3 3 4 4 5 5 6 6 8 7 9 8 5 9 4 现在我想添加第二列 条件是如果 limit 0 interval 3 且 limit limit interval 或者换句话说 当第 1 列
  • 如何在 Matlab 中使用谷歌翻译?

    我正在编写一个程序 使用 Matlab 列出电影字幕文件中的所有唯一单词 现在我有一个独特的单词列表 我想将其翻译成我的语言并在观看电影之前了解其含义 有谁知道如何在 Matlab 中使用 Google Translate 以便完成我的脚本
  • Matlab没有优化以下内容吗?

    我有一个很长的向量 1xrv 和一个很长的向量w1xs 和一个矩阵Arxs 它是稀疏的 但维度非常大 我期望 Matlab 对以下内容进行优化 这样我就不会遇到内存问题 A v w 但看起来 Matlab 实际上是在尝试生成完整的v w矩阵
  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 在 Matlab 中将 datenum 转换为 datetime 的最快方法

    我在 Matlab 中将 datenum 转换为 datetime 时遇到问题 Given dnum floor now floor now 1 我尝试了以下方法 datenum dnum 但这没有用 我发现有效的方法是 datetime
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any

随机推荐

  • Linux节点理解

    一 inode是什么 xff1f 理解inode xff0c 要从文件储存说起 文件储存在硬盘上 xff0c 硬盘的最小存储单位叫做 扇区 xff08 Sector xff09 每个扇区储存512字节 xff08 相当于0 5KB xff0
  • OSSempend();OSSemPost();函数的解析

    浅析 COS II v2 span class hljs number 85 span 内核OSSemPend 和OSSemPost 函数工作原理 文章来源 http span class hljs comment gliethttp cu
  • 矩阵键盘时钟

    span class hljs preprocessor include lt reg52 h gt span class hljs comment 包含头文件 xff0c 一般情况不需要改动 xff0c 头文件包含特殊功能寄存器的定义 s
  • opencv上gpu版surf特征点与orb特征点提取及匹配实例

    一 前言 本文主要实现了使用opencv里的gpu版surf特征检测器和gpu版orb检测器 xff0c 分别对图片进行特征点提取及匹配 xff0c 并对寻获的特征点进行了距离筛选 xff0c 将匹配较为好的特征点进行展示 二 实现代码 我
  • while(c = getchar() != '\n')和while((c = getchar()) != '\n')区别

    在利用while循环和getchar 读取缓存中的数据时 xff0c 发现了一些问题 在最初 xff0c 我利用while c 61 getchar 61 n 的时候 xff0c 发现总是不能将我想要读取的值正确的赋值给c xff0c 在我
  • C++template模板

    模板 xff08 Template xff09 指C 43 43 程序设计设计语言中采用类型作为参数的程序设计 xff0c 支持通用程序设计 C 43 43 的标准库提供许多有用的函数大多结合了模板的观念 xff0c 如STL以及IO St
  • Linux Ubuntu 14.04平台下安装EDK2

    Linux Ubuntu 14 04平台下安装EDK2 博客是基于https github com tianocore tianocore github io wiki Common instructions和 UEFI原理和编程 完成的
  • ubuntu下安装和使用

    在ubuntu下完善代码的时候 会遇到想要跳转到函数定义处 或者跳转到其他相关文件的情况下 此时要借助linux下的ctags工具 在这里 xff0c 我会尽我所能细致地讲清楚如何把vim变成source insight 然而你仍然需要积极
  • STM32 嵌入式系统开发分层设计思想简谈

    简介 开始之前自我介绍一下 xff0c 我在大学学的是物联网工程专业 xff0c 可惜的是发现嵌入式并不好找工作 于是后面自学了前端 xff0c 并到美团从事了1年相关的开发工作 xff0c 但是发现嵌入式才是真爱 xff0c 于是又转到嵌
  • 基于51单片机的智能导盲杖语音播报积水检测温度提示灯光照明proteus仿真原理图

    功能介绍 xff1a 0 本系统采用STC89C52作为单片机 1 导盲仗的上部和底部分别设置超声波传感器 xff0c 利用超声波测距原理分别测得盲人面部和脚底离障碍物的距离 xff0c 并将障碍信息通过语音播报传递给盲人 2 导盲杖设有光
  • 我是如何在2个小时用智能CCD图像检测系统实现一个零件的自动分选项目

    项目实例完整代码可以下载Examples xff1a https pan baidu com s 1YPjR TPJYLmriXNVnNbgZg 提取码 xff1a 52ai 有一种水表的塑料齿轮 xff0c 是有注塑机大批量生产出来 xf
  • keil找不到芯片型号的解决方法

    1 上官网下载对应的固件包 http www keil com dd2 Pack eula container 例如 2 点击 Pack installer 3 点击 File gt Import xff0c 选中下载的固件包 如果选择后左
  • 基于llibcurl库做基本http GET/POST操作代码demo

    libcurl库详细解说请欣赏 xff1a https www cnblogs com xietianjiao p 13260021 html libcurl是一个跨平台的网络协议库 xff0c 支持http https ftp gophe
  • 网络-udp—代码

    01 socket的基本使用 py import socket def main 创建一个udp套接字 udp socket 61 socket socket socket AF INET socket SOCK DGRAM 可以使用套接字
  • Nginx 获取自定义请求header头和URL参数

    一 获取 header 请求头 在 ngx lua 中访问 Nginx 内置变量 ngx var http HEADER 即可获得请求头HEADER的内容 在 nginx配置中 xff0c 通过 http HEADER 即可获得请求头HEA
  • QT与C程序编译问题extern C

    最近在调测试程序 xff0c 小师妹的QT程序与我的C语言的测试程序 xff0c 编译时有问题 xff0c 在小城的帮助下 xff0c 解决了问题 xff0c 网上的帖子是这样的 因为C编译的时候会在函数名前面加一个 xff0c 比如f1
  • ArcGIS将Tif文件导出为高清图片的一种方法,亲测有效

    ArcGIS将Tif文件导出为高清图片的一种方法 xff0c 亲测有效 总共分如下三个步骤第一步 xff0c 打开ArcGIS xff0c 添加tif数据 xff0c 保存为mxd地图文档第二步 xff0c 导出图片 xff0c 点击Fil
  • 重装正版Windows 10和Microsoft office home and student 2019教程(2020.10.29)

    目录 环境准备 xff1a 一个U盘 xff08 至少8G xff09 步骤 第一步 利用微软下载工具制作U盘启动盘 到微软官网下载Windows 10 界面 xff0c 点击立即下载工具 后会弹出一个下载界面 xff0c 下载此文件Med
  • 禁忌搜索算法求解TSP旅行商问题C++(2020.11.19)

    TS算法求解TSP问题C 43 43 1 禁忌搜索算法1 1 基本思想及主要特点1 2 基本概念1 3 算法流程 2 TS求解TSP问题的C 43 43 实现2 1 输入数据文件 xff1a bayg29 tsp2 2 头文件2 3 所需的
  • Matlab读取高光谱遥感数据.Mat 和 .tif(2020.12.27)

    Matlab读取高光谱遥感数据 1 高光谱遥感数据简介2 两个开源的高光谱遥感数据集3 高光谱遥感数据常用格式3 1 Mat3 2 Tif 4 Matlab读取高光谱遥感数据4 1 Matlab读取 Mat格式的高光谱遥感数据4 1 1 M