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

MATLAB中对tif格式栅格影像读取-保存,点滴学习,贵在记录。

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

在做水质反演的过程中,用到了MATLAB,但对这个工具一无所知。研究的总体思路是先建立整体构架,然后查阅每一步的具体实现的语法,结合MATLAB help,逐渐实现每一步。

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的矩阵

示例

% 影像的读取
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’:结构体,内容有以下

Compression压缩类型,默认‘PackBits’,其他的包括‘LZWZ’,‘Deflate’,‘none’
PhotometricInterpretation一般不需要设置。官方介绍如下:字段名称可以缩短为光度控制。该值是根据输入图像特征设置的,使用以下算法:如果A是[M-by-N-by-3],并且是类类型uint8或uint16,则该值为“RGB”。对于所有其他大小和数据类型,该值为“miniBlack”。如果提供了X,CMAP语法,则值为“palete”。如果该值设置为“RGB”,而A不是[M-by-N-by-3],则会发出错误。允许的值为“miniBlack”、“RGB”、“Palette”、“Separated”。
Software可忽略,,,,文件的软件制造商。该值设置为“MATLAB,Mapping Toolbox,The MathWorks,Inc.”的值。要删除该值,请将标记设置为空字符串或字符向量(’’)。
RowsPerStrip一个标量正整数值,指定输出文件中每个条带所需的行数。如果A的大小小于[160 x 160],geotiffwrite将RowsPerStrip设置为1。如果指定RowsPerStrip和TileWidth,无论是否使用tillelength,geotiffwrite都会发出错误。
TileWidth标量正整数值和16的倍数,指定分片的宽度。如果A的大小大于[160 x 160],则设置平铺宽度。如果是,则该值将创建最多[10×10]个平铺。如果同时指定RowsPerStrip和TileWidth,geotiffwrite将发出错误。
TileLength同上,长度

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

重点!!!

之前跑数据时,发现超过4GB的数据无法写入保存,这是因为geotiff有两种格式,一种是classictiff,另外一种是针对大数据的bigtiff。解决此办法就是加入字段geotiffwrite(name,out,R,....,'TiffType','bigtiff','Tifftags',tifftags)
老版本的没有这个,如果报错,请注意版本问题。目前用的19a没有问题

  • 12
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值