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

时间:2012-10-15 15:01:01

标签: matlab web-applications

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

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

编辑:这是我想要阅读的示例网址:

http://www.nasa.network.com/elev?SERVICE=WMS&LAYERS=mergedAsterElevations&EXCEPTIONS=application/vnd.ogc.se_xml&FORMAT=image%2Fbil&TRANSPARENT=FALSE&HEIGHT=1113&BGCOLOR=0xFFFFFF&REQUEST=GetMap&WIDTH=925&BBOX=-118.545692,33.960524,-118.44569200000001,34.060523999999994&STYLES=&SRS=EPSG:4326&VERSION=1.3.0

另外,如果我尝试只抓取字节数据w / 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 )' );

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

1 个答案:

答案 0 :(得分:0)

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

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