【问题标题】:MATLAB calculate area of shape on plotMATLAB计算绘图上的形状面积
【发布时间】:2016-04-05 19:46:07
【问题描述】:

我使用 imagesc 创建一个绘图。 X/Y 轴分别为经度和纬度。 Z 值是下图所示图像的图像强度。我想做的是计算显示的每个多边形的面积。任何人都可以推荐一种简单的(或任何)方法来实现这一点吗?

编辑

忘记添加图片了。

【问题讨论】:

  • 多边形外的Z 值是否是某个唯一值,比如0?或者可以应用阈值吗?

标签: matlab area


【解决方案1】:

下面是一个玩具示例。它取决于Z 值在对象内部与外部不同(这里:不是0)的假设。同样在这里,我假设在第 4 列有一个直线分隔线,但相同的原则(应用掩码)可以应用于其他边界。这也假设这些值沿 xy 轴等距,但问题并未相反。如果不是这种情况,则需要使用bsxfun 进行更多工作。

A = [0     2     0     0     0     2     0
     3     5     3     0     1     4     0
     1     4     0     0     3     2     3
     2     3     0     0     0     4     2
     0     2     6     0     1     6     1
     0     3     0     0     2     3     0
     0     0     0     0     0     0     0];

area_per_pix = 0.5; % or whatever

% plot it 
cm = parula(10);
cm(1, :) = [1 1 1];
figure(1);
clf
imagesc(A);
colormap(cm);

% divider
dv_idx = 4;

left_object = A(:, 1:(dv_idx-1));
left_mask = left_object > 0; % threshold object
num_pix_left = sum(left_mask(:));

% right object, different method
right_mask = repmat((1:size(A, 2)) > dv_idx, size(A, 1), 1);
right_mask = (A > 0) & right_mask;
num_pix_right = sum(right_mask(:));

fprintf('The left object is %.2f units large, the right one %.2f units.\n', ...
    num_pix_left * area_per_pix, num_pix_right * area_per_pix);

【讨论】:

  • 看来达到了目的!但是,我对某些逻辑感到困惑。您如何/为什么选择 area_per_pix?您如何/为什么选择 div_idx?如果我们使用最初在左侧对象上使用的相同方法,将如何选择 A 矩阵?谢谢。
  • @DeeTee area_per_pix 是沿 x 轴的两个数据点之间的距离乘以沿 y 轴的距离。我只是选择了一个任意值。如果不是所有数据点都具有相同的区域,它会变得更加复杂。 div_idx 再次被选中以匹配我的玩具数据。这是分隔两个形状的列。你必须从你的数据中得到它。如果您的数据不能沿一列分离,那么还有其他方法可以定义掩码。
  • @DeeTee 不确定我是否理解最后一个问题。这两种方法的区别在于,在第一种方法中,我们首先选择A 的相关部分(这很容易,因为我们将所有内容都提取到某一列),然后是阈值。这可能等同于应用于右侧(使用(div_idx+1):end 作为索引)。在第二种方法中,我们将其与掩码相结合(这是一种更通用的方法,因为掩码可以是任意的)
  • 全部复制!很好的解决方案!
  • 当然,您可以忽略它。或者,您可以创建一个与A 大小相同的矩阵,并将其与掩码逐元素相乘,然后求和:例如,apix = bsxfun(@times, (1:size(A,1))' * .5, 1:size(A, 2)); weighted=right_mask.*apix; sum(weighted(:)); 这里apix 包含每个坐标对处的区域。
【解决方案2】:

这可能会有所帮助:http://se.mathworks.com/matlabcentral/answers/35501-surface-area-from-a-z-matrix 他没用过imagesc,但也是类似的问题。

【讨论】:

  • 这个问题的不同之处在于要积分的区域是一个四边形。我的更像一团,所以我不能把它切成三角形或其他四边形。
猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 2012-02-20
相关资源
最近更新 更多