将MATLAB poly2mask()与shapefile一起使用的正确步骤是什么?

时间:2014-03-07 18:30:55

标签: matlab

我有一个shapefile(例如here),我想使用MATLAB poly2mask()将其转换为感兴趣的二进制区域(ROI)掩码。

MATLAB的描述如下:

BW = poly2mask(x, y, m, n)
  

BW = poly2mask(x,y,m,n)计算感兴趣的二进制区域(ROI)   来自ROI多边形的掩模BW,由向量x和y表示。该   BW的大小是m-by-n。 poly2mask设置BW内的像素   polygon(X,Y)为1,并将多边形外部的像素设置为0。

     

如果多边形尚未关闭,它将自动关闭多边形。

这是我用来转换shapefile的脚本:

s = 'D:\path\to\studyArea.shp'

shp = shaperead(s)
x = [shp.X];
y = [shp.Y];

% use bounding box to define m and n
m = shp.BoundingBox(2) - shp.BoundingBox(1)
n = shp.BoundingBox(3) - shp.BoundingBox(1) 

mask = poly2mask(x,y, m, n)

导致以下错误:

  

使用poly2mask时出错预期的输入数字1,X是有限的。

     

poly2mask出错(第49行)   validateattributes(X,{ '双重'},{ '真正的', '载体', '有限'},mfilename, 'X',1);

     

createMask(第11行)中的错误mask = poly2mask(x,y,m,n)

我怀疑UTM坐标可能存在问题,而不是Lat / Long,但是,我可以使用具有相关经验的人的一些输入。我在哪里错了?

2 个答案:

答案 0 :(得分:1)

您的x和y值将NaN作为最后一个坐标。 如果坐标中有NaN,poly2mask将不起作用。 (因此错误'值必须是有限的')。

如果是这种情况,您可以使用快速修复..

x = length(x)-1;
y = length(y)-1;

更多信息

http://www.mathworks.com/help/map/understanding-vector-geodata.html

-James

答案 1 :(得分:1)

请在此处查看更改 -

s = 'studyArea.shp' %// Copy this file to working directory

shp = shaperead(s)
x = [shp.X];
y = [shp.Y];

%// Threw error before because there were NaNs there in x or y or both. So one assumption could be that you want to remove all x and y where any x or y is a NaN.  
cond1 = isnan(x) | isnan(y); 
x(cond1)=[];
y(cond1)=[];

% use bounding box to define m and n
m = shp.BoundingBox(2) - shp.BoundingBox(1)
n = shp.BoundingBox(3) - shp.BoundingBox(1) 

%mask = poly2mask(x,y, m, n); %// Threw error
mask = poly2mask(x,y, round(m/20), round(n/20)); %//Worked fine for smaller 3rd and 4th arguments