在附带的Matlab脚本中,生成随机位置并为其指定值1-12。假设每个位置> = 1(即阵列中的值)是树位置,并且每个值是树冠层半径。我有兴趣计算1 ac(例如63.614 x 63.614)移动分析窗口中的冠层面积百分比。我们还假设结果图像中的一个像素等于1m。在ArcGIS中,我将使用Focal Statistics进行此类计算。对于所有真正的程序员:我应该如何使用Matlab进行这种类型的计算?
% Generate a totally black image to start with.
m = zeros(300, 400, 'uint8');
% Generate 1000 random "tree" locations.
numRandom = 1000;
linearIndices = randi(numel(m), 1, numRandom);
% Assign a radius value of 1-12 for each tree
m(linearIndices) = randi(12, [numel(linearIndices) 1]);
% Display it.
image(m);
colormap(gray);
答案 0 :(得分:1)
不完全确定如何计算百分比面积(不确定1ac的含义),但一种方法是使用nlfilter。例如,
percentAreaImage = nlfilter(double(m), [63 63], @myfun);
其中:
function pArea = myfun(block)
% block is 63 x 63 pixles.
sumRadii = sum(block(:)); % sum of canopy radii
blockArea = size(block, 1)*size(block, 2);
pArea = sumRadii / blockArea;
代码显然可能需要一些修改,关于块大小和百分比面积的计算(pArea
)。 blockArea
是常量,所以当然,它可以在myfun
之外声明一次以提高性能。为了清晰起见,我把它留下来了。