在Matlab中从URL读取带交错图像



我正在尝试使用映射工具箱(更具体地说,使用WebMapServer对象)从WebMapServer读取w/out。我可以自己构造URL,不存在问题,并且可以只对返回bmp文件的WMS使用imread。但是,其中一个WMS返回BIL文件(Band InterLeaved),imread()无法识别它。

如何使用映射工具箱从URL中读取BIL文件?

编辑:这是一个我想阅读的示例URL:

http://www.nasa.network.com/elev?SERVICE=WMS&LAYERS=mergedAsterElevations&异常=应用程序/vnd.ogc.se_xml&FORMAT=图像%2Bil&透明=假&高度=1113&BGCOLOR=0xFFFFFF&REQUEST=GetMap&宽度=925&BBOX=-118.545692,33.960524,-118.44569200000001,34.060523999999994&STYLES=&SRS=EPSG:4326&版本=1.3.0

此外,如果我试图只获取带有urlread的字节数据,然后将其写入文件,不知何故,一些值会丢失。

bytedata = urlread( mapurl );
fp = fopen( 'tmp.bil', 'w' );
fwrite( fp, bytedata, 'uint8' );
fclose( fp );
fp = fopen( 'tmp.bil', 'r' );
z = fread( fp, 'int16' );
imagesc( reshape( z, 925, 1113 )' );

上面显示的图像类似于映射工具箱返回的图像,但有些区域被设置为不应该是的常数值。

上述问题的解决方案是使用urlwrite()而不是urlread(),因为后者无法正确处理二进制数据。

fname = tempname();
urlwrite(mapurl,fname);
fp = fopen(fname,'r');
map = reshape(fread(fp,'int16=>int16'),Ncols,Nrows)';
fclose(fp);
delete(fname);

最新更新