我有一个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,但是,我可以使用具有相关经验的人的一些输入。我在哪里错了?
答案 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