张伟
[转载]MATLAB中geotiff栅格影像保存(geotiffwrite)
2021-5-23 19:06
阅读:1695

geotiffwrite

基础语法

geotiffwrite(filename,A,R)

geotiffwrite(filename,X,cmap,R)

geotiffwrite(…,Name,Value)


输入参数变量释义:

filename:输入文件的名称和位置,文件扩展名必须是 “.tif” 或者 “.TIF”,变量类型为字符向量。


A:要导出的影像数据,为MNP的矩阵。坐标系为地理坐标,且默认为WGS-84,指定坐标可通过’GeoKeyDirectoryTag’和’CoordRefSysCode’实现。数据类型

数据类型 double | single | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64 | logical


R:空间参考信息。

空间引用信息,指定为地理栅格引用对象、引用矩阵或引用向量。

如果您正在处理投影坐标系中的图像坐标,而R是一个地图栅格引用对象或引用矩阵,则相应地指定“GeoKeyDirectoryTag”或“CoordRefSysCode”。


X:待补充

cmap:RGB图像,为M*3的矩阵


示例1

% 影像的读取

basename = 'boston_ovr';

imagefile = [basename '.jpg'];

RGB = imread(imagefile);

worldfile = getworldfilename(imagefile);

R = worldfileread(worldfile, 'geographic', size(RGB)); %读取空间参考信息

%导出影像

filename = [basename '.tif'];

geotiffwrite(filename, RGB, R)

% 显示影像

figure

usamap(RGB, R)

geoshow(filename)


示例2 读取tif处理后保存tif

% 读取tif及空间坐标信息

[A, R] = geotiffread('F:\boston.tif');

info = geotiffinfo('F:\boston.tif');

% 保存tif并使用原始数据空间坐标信息

subimage = A;

subR = R;

filename = 'boston_subimage.tif';

geotiffwrite(filename, subImage, subR,  ...

       'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag);

figure

mapshow(filename);

其他参数较多,可以从原始影像中读取,也可以自定义。


‘CoordRefSysCode’ :坐标系,默认EPSG:4326(即WGS84坐标系)

使用方法:'CoordRefSysCode',4326

小知识,EPSG:4326是web map中用来表示地图坐标的代码,每个坐标都有一个对应的EPSG代码,常用的WGS84代码为EPSG:4326,伪墨卡托投影代码为EPSG:3857


‘TiffTags’:结构体,内容有以下

image.png

使用方法:tifftags = sturct('Compression','LZW')

重点!!!

      之前跑数据时,发现超过4GB的数据无法写入保存,这是因为geotiff有两种格式,一种是classictiff,另外一种是针对大数据的bigtiff。解决此办法就是加入字段       geotiffwrite(name,out,R,....,'TiffType','bigtiff','Tifftags',tifftags)

      老版本的没有这个,如果报错,请注意版本问题。目前用的19a,19b没有问题。

【参考】

MATLAB中对tif格式栅格影像读取-保存

点滴分享,福泽你我!Add oil!

转载本文请联系原作者获取授权,同时请注明本文来自张伟科学网博客。

链接地址:https://wap.sciencenet.cn/blog-3428464-1287946.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?