教程:批量将 .tif 文件转换为 .mat 文件

2024-08-26 19:20
文章标签 教程 转换 批量 tif mat

本文主要是介绍教程:批量将 .tif 文件转换为 .mat 文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

教程:批量将 .tif 文件转换为 .mat 文件

引言

在遥感图像处理、地理信息系统(GIS)等领域,.tif(Tagged Image File Format)是一种常用的文件格式,尤其适用于存储栅格数据。栅格数据是一种用来表示空间信息的方式,常用于遥感图像、地形模型等数据。

相比之下,在数据科学和机器学习领域,.mat(MATLAB 文件格式)则是一种非常流行的数据存储格式,特别适用于存储多维数组、矩阵等数据类型。

问题描述

你可能有一批 .tif 文件,这些文件可能包含卫星图像、地理信息数据或其他需要处理的栅格数据,但为了在 MATLAB 或 Python 中使用这些数据,你需要将它们转换为 .mat 格式。手动转换大量文件既费时又容易出错,因此我们需要编写一个 Python 脚本来自动完成这一任务。

解决方案

通过编写一个简单的 Python 脚本,我们可以自动将指定文件夹中的所有 .tif 文件转换为 .mat 文件。接下来我们会一步步解释这段代码的工作原理和实现方法。

提示: 完整代码文件请在公众号Python与遥感后台回复关键词“tifmat”自动获取。

所需的工具和库

在开始之前,你需要安装以下 Python 库:

  • os: 这是 Python 的标准库之一,用于处理文件和目录。
  • gdal: 用于读取和处理栅格地理数据。
  • numpy: 一个强大的科学计算库,用于处理多维数组。
  • scipy.io: 其中的 savemat 函数可以将数据保存为 .mat 格式。

如果你还没有安装这些库,可以使用以下命令进行安装:

pip install numpy scipy gdal

代码讲解

1. 导入必要的库

import os
from osgeo import gdal
import numpy as np
import scipy.io as sio
  • os: 用于处理文件路径和目录。
  • gdal: 用于打开和读取 .tif 文件,GDAL 是一个强大的地理空间数据处理库。
  • numpy: 用于数组操作,是科学计算的基础库。
  • scipy.io: 用于将数据保存为 .mat 文件,MATLAB 用户最熟悉的格式。

2. get_img 函数

def get_img(dataset_img):width = dataset_img.RasterXSize  # 获取图像的列数height = dataset_img.RasterYSize  # 获取图像的行数bands = dataset_img.RasterCount  # 获取图像的波段数print("行数为:", height)print("列数为:", width)print("波段数为:", bands)# 将图像数据读取为一个 numpy 数组img = dataset_img.ReadAsArray(0, 0, width, height)# 转置数组,使得数据的顺序符合我们通常的格式(行,列,波段)new_img = np.transpose(img, (1, 2, 0))return new_img
  • RasterXSizeRasterYSize 分别获取图像的列数和行数。
  • RasterCount 获取图像的波段数,例如 RGB 图像通常有 3 个波段,而高光谱图像可能有几十甚至上百个波段。
  • ReadAsArray 将图像数据读取为一个 NumPy 数组。
  • np.transpose 函数用于调整数组的维度顺序,使其符合我们常用的格式(行、列、波段),这对于后续的处理非常重要。

3. tiftomat 函数

def tiftomat(input_folder, output_folder, name):# 确保输出文件夹存在,不存在则创建if not os.path.exists(output_folder):os.makedirs(output_folder)# 遍历输入文件夹中的所有文件for file_name in os.listdir(input_folder):if file_name.endswith('.tif'):  # 检查文件是否是 .tif 格式# 构建完整的输入文件路径input_file = os.path.join(input_folder, file_name)# 使用 get_img 函数读取图像数据image = get_img(gdal.Open(input_file))# 构建输出文件的路径,将 .tif 后缀替换为 .matoutput_file = os.path.join(output_folder, file_name.replace('.tif', '.mat'))# 将图像数据保存为 .mat 文件sio.savemat(output_file, {name: image})
  • tiftomat 函数用于遍历指定文件夹中的所有 .tif 文件,并将它们逐一转换为 .mat 文件。
  • os.listdir(input_folder) 返回文件夹中所有文件的列表。通过 if file_name.endswith('.tif') 检查文件是否为 .tif 格式。
  • 使用 os.path.join 构建输入和输出文件的完整路径。
  • sio.savemat 函数将图像数据保存为 .mat 文件。name 参数指定了保存到 .mat 文件中的变量名。

注意: name 是保存到 .mat 文件中的变量名。MATLAB 用户在加载 .mat 文件时会看到这个名字。如果你的 .mat 文件中有多个变量,这个名字能帮助你识别存储的内容。

4. 主程序

if __name__ == '__main__':root = r'F:\datasets\TEST\540'  # 数据文件夹的根路径x_path = root + '\X'  # .tif 文件所在的文件夹out_x = root + '\X_mat'  # .mat 文件输出的文件夹tiftomat(x_path, out_x, name='hrhsi')  # 执行转换
  • if __name__ == '__main__': 是 Python 的标准写法,确保代码仅在直接运行脚本时才会执行,而不是被其他模块导入时。
  • root 是数据文件夹的根路径,你可以根据自己的文件存储位置进行修改。
  • x_path 是存放 .tif 文件的文件夹路径。
  • out_x 是用于保存 .mat 文件的输出文件夹路径。
  • tiftomat 函数会遍历 x_path 文件夹中的所有 .tif 文件,并将它们转换为 .mat 文件,保存到 out_x 文件夹中。

运行脚本

保存代码为 tif_to_mat.py 文件,然后在命令行中运行该脚本:

python tif_to_mat.py

运行后,脚本将自动遍历指定文件夹中的所有 .tif 文件,并将它们转换为 .mat 文件,保存在输出文件夹中。

如何读取 .mat 文件

如果你想在 MATLAB 或 Python 中读取转换后的 .mat 文件,可以参考以下方法。

在 MATLAB 中读取

data = load('文件路径.mat');
disp(data.hrhsi);  % 显示变量 'hrhsi' 的内容

在 Python 中读取

import scipy.io as siomat_data = sio.loadmat('文件路径.mat')
print(mat_data['hrhsi'])  # 打印变量 'hrhsi' 的内容

总结

通过这篇教程,你学习了如何使用 Python 编写一个脚本,将 .tif 文件批量转换为 .mat 文件。这种自动化方法不仅节省了大量时间,还可以避免手动转换可能带来的错误。此外,我们还解释了 .tif 和 .mat 文件格式的基本知识,并提供了如何在 MATLAB 和 Python 中读取 .mat 文件的示例。希望你在学习的过程中有所收获,如果有任何问题,欢迎在评论区交流!

这篇关于教程:批量将 .tif 文件转换为 .mat 文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109457

相关文章

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种