将.mat格式的高光谱图像转换成png或jpg格式

news/2024/7/21 7:04:05 标签: matlab, 图像处理

将.mat格式的高光谱图像转换成png或jpg格式

  1. 使用MATLAB打开.mat文件,并读取高光谱图像数据。

  2. 如果高光谱图像数据为三维矩阵,将其转置为(宽度,高度,波段数)的形式。这是因为MATLAB中高光谱图像通常是以(波段数,高度,宽度)的形式存储的,而我们需要的输出格式是以(宽度,高度,波段数)的形式存储的。

  3. 对每个波段的数据进行归一化处理,以便于可视化。常见的归一化方法包括线性拉伸、直方图均衡化等。

  4. 将归一化后的波段数据堆叠在一起,形成RGB图像数据。这可以通过使用im2uint8函数将归一化后的数据转换为8位整数类型,并将其堆叠在一起实现。

  5. 使用imwrite函数将RGB图像保存为png或jpg格式。根据需要指定输出文件名、图像质量等参数。

matlab">% 读取高光谱图像数据
data = load('hyperspectral_image.mat');
hyperspectral_image = data.hyperspectral_image;

% 转置高光谱图像数据
hyperspectral_image = permute(hyperspectral_image, [2, 1, 3]);

% 对每个波段的数据进行线性拉伸归一化处理
min_val = min(hyperspectral_image(:));
max_val = max(hyperspectral_image(:));
hyperspectral_image = (hyperspectral_image - min_val) / (max_val - min_val);

% 将归一化后的波段数据堆叠在一起,形成RGB图像数据
rgb_image = cat(3, im2uint8(hyperspectral_image(:, :, 29)), ...
                  im2uint8(hyperspectral_image(:, :, 53)), ...
                  im2uint8(hyperspectral_image(:, :, 77)));

% 将RGB图像保存为png格式
imwrite(rgb_image, 'hyperspectral_image.png', 'png');

% 将RGB图像保存为jpg格式,质量设为90%
imwrite(rgb_image, 'hyperspectral_image.jpg', 'jpg', 'Quality', 90);

在这个示例中,我们假设高光谱图像数据存储在名为“hyperspectral_image.mat”的.mat文件中,并使用了线性拉伸归一化方法将每个波段的数据归一化到0到1的范围内。我们选择了29、53、77三个波段的数据,将它们堆叠在一起,形成RGB图像数据。最后,我们将RGB图像分别保存为png和jpg格式,并指定了输出文件名和图像质量参数。


http://www.niftyadmin.cn/n/1846050.html

相关文章

[前端面试套餐css+js+vue+es6]第七天

前端面试套餐css:元素水平垂直居中得方法有哪些?如果元素不定宽高呢?居中元素宽高已知table布局利用定位margin:负值居中元素宽高未知利用定位margin:auto利用定位transformflex布局grid布局js:Javascript中的继承&…

两种websocket实践

以前对websocket能躲则躲,两个项目都被逼着用了websocket之后觉得也算了入了个门,分别记录一下两个项目中的使用方式,好记性不如烂笔头~ 零、基础知识 WebSocket对象的“readyState”属性记录连接过程中的状态值 属性值 属性常量…

java中 this 和 super的区别

2019独角兽企业重金招聘Python工程师标准>>> 1、this 在普通方法:this 代表当前对象 super 代表当前对象的父类对象this.属性 或 this.方法都是访问当前对象的 super.属性 或 super.方法访问的是当前对象的父类对象属性或方法 在构造方法中 this…

【vue cli2 3】 本地代理解决跨域问题

一、vue-cli2 在config/index.js中修改proxyTable: module.exports {dev: {// PathsassetsSubDirectory: static,assetsPublicPath: /,// proxyTable: {},//原来为空proxyTable: {//这里自定义/api: { //自己命名target: "https://xxx.com", //要代理的…

Unity3D之移植学习笔记:移植到Android平台

首先,我们需要一台已经配置好可以开发Android应用的计算机,这里我使用的是Windows系统EclipseADT的开发环境,当然也可以使用Android Studio或者使用Mac系统都可以。 导出到Eclipse 设置U3D工程 首先需要设置游戏的平台为Android: …

el-table懒加载树形数据,实现整行点击的展开

做项目遇到一个需求,根据集团层级展现一组数据,每个层级都可以点开看更详细的拆分数据,第一想法是用el-table的树形数据来展示,大概下面这个样子: 用过这个组件的应该知道这个只能通过点击每一行前面的小箭头实现伸缩&…

Java并发专题 带返回结果的批量任务执行 CompletionService ExecutorService.invokeAll(转)...

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/27250059 一般情况下,我们使用Runnable作为基本的任务表示形式,但是Runnable是一种有很大局限的抽象,run方法中只能记录日志,打印,或者…

OpenGL ES 绘制纹理

在OpenGL ES中绘制一张图片需要使用到纹理(texture),绘制纹理步骤如下: 编写shader 绘制纹理的shader需要顶点数据、纹理顶点数据和纹理。Vertex Shader代码如下: attribute vec4 a_Position; attribute vec2 a_TexCoo…