一、几点背景知识:
1.matlab提供了许多将影响读写为矩阵的函数,例如imread/imwrite、tiff等;
2.运用imread/imwrite函数能较为方便的处理.jpg, .bmp,.png等格式数据。但是对tiff影像则不适用,系统会出现:“无法输出single的图
像······“的报错提示。若将数据强制转换为double,则在ENVI等软件中显示为空白影像,且无法保存影像的空间位置信息。
二、geotiffread和geotiffwrite
1.运用geotiffread和geotiffwrite对遥感影像进行读写的基本语句为:
[A, R]= geotiffread(’filename‘); % A为影像的矩阵文件,R为影像的地理参考
B = A.* 100; %对原始影像进行操作
geotiffwrite(‘newfilename',B,R); %对操作结果进行写入操作
2.若按照上述程序执行,则会出现如下报错:
Error usinggeotiffwrite>validateR (line 838)
The input, R, is a map.rasterref.MapCellsReference object indicating that you are working in a projected coordinate system. If so, then specify a projected coordinate system by setting the appropriate values for the 'CoordRefSysCode' or 'GeoKeyDirectoryTag' optional parameters.提示为:以投影坐标系作为地理参考,在保存之时geotiffwrite函数中应指明‘CoordRefSysCode’或‘GeoKeyDirectoryTag’,两者二选其一。
3.关于’CoordRefSysCode’或‘GeoKeyDirectoryTag’
官方文档给出的说明是:CoordRefSysCode’指的是一个整型、正数标量,特指数据的投影参考编码。投影编码详见http://geotiff.maptools.org/spec/geotiff6.html#6.3.2.1。使用这种方式的代码如下:
info=geotiffinfo('filename');
‘GeoKeyDirectoryTag’可以从GeoTIFF信息结构获得geotiffinfo返回的当前影像的投影信息,省去了查找投影编码的过程。使用这种方式的代码如下
[A, R]=geotiffread('filename');
info=geotiffinfo('filename');
geotiffwrite('newfilename', image, geo, 'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag)