如果我有一个任意形状(附件是一个非常简单的模拟),我如何估计Matlab中封闭表面的面积。为了获得沿曲线的一些随机点,我使用ginput命令对曲线进行粗略估计,两点之间的间距不等。我想得到一个区域的估计,但我相信trapz命令会因重叠而高估该区域(如果我错了,请纠正我)。是否有更准确的方法来获得该区域?
答案 0 :(得分:0)
嗯,你没有提供足够的信息来完全解决问题,但是你可以采取一种方法来自动找到边界以计算面积:
% 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