【问题标题】:Matlab area calculationMatlab面积计算
【发布时间】:2015-08-03 20:37:08
【问题描述】:

如果我有一个任意形状(附上一个非常简单的模型),我将如何在 Matlab 中估计封闭表面的面积。为了得到沿曲线的一些随机点,我使用 ginput 命令粗略估计曲线,点之间的间距不相等。我想估计面积,但我相信 trapz 命令会由于重叠而高估面积(如果我在这里错了,请纠正我)。有没有更准确的获取面积的方法?

谢谢!

【问题讨论】:

  • 你是如何创建这个形状的?
  • 你有什么数据? trapz 也可以高精度使用。
  • @NKN 我刚刚创建了一个随机绘图作为示例。 trapz 不会高估这个区域吗?

标签: matlab area ginput


【解决方案1】:

好吧,您并没有真正提供足够的信息来完全解决问题,但是您可以采用以下一种方法来自动找到边界以计算面积:

% Get image and convert to logical mask
img = ~im2bw(imread('polyarea.jpg'));

% Fill the hole
img = imfill(img,'holes');

% Get boundary
b = bwboundaries(img);

% Approximate area of boundary
area = polyarea(b{1}(:,1), b{1}(:,2));

% Print area
disp(['Area: ' num2str(area)]); 

imshow(img);
hold on;
plot(b{1}(:,2),b{1}(:,1),'go');

想法是你有一个输入,你形成一个逻辑掩码,得到掩码的边界,然后你可以使用polyarea来近似边界包围的区域。

输出是:

Area: 228003

此外,您还可以使用regionprops(img,'Area') 输出:

ans = 

    Area: 229154

【讨论】:

  • 感谢您的时间和回答。相同的过程是否适用于开放曲线?例如,如果我的测试图像没有“基础”(只是一条曲线),我可以应用 imfill 选项吗?您能说说哪种方法会提供更准确的解决方案吗?
  • @Cyrus 你可以在问题中发布额外的图片吗?
  • 我的意思是如果第一张图片的基础不可用。我添加了第二张图片,底部已擦除。
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 2015-11-05
  • 2012-01-29
  • 2011-02-08
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
相关资源
最近更新 更多