当轮廓包含域的边缘时查找二维轮廓区域

时间:2019-11-18 22:28:59

标签: matlab area

假设我们在MATLAB中具有以下内容:

xs = -50:50;
ys = -50:50;
[X,Y] = meshgrid(xs,ys);
rs = (X.^2 + Y.^2).^(1/2);
c = contourf(X,Y,rs,[60,60]);

我如何估计白色区域的面积?

这是一个测试用例,通常我不知道级别设置的方程。

请注意,级别集与边界相交,并且我不能仅仅增加域大小来避免这种情况(在非测试情况下)。

enter image description here

1 个答案:

答案 0 :(得分:1)

编辑:如果您想也超出边界来逼近白色区域,则以下方法显然行不通。我刚刚意识到,关于您的措词有很多解释。


如果您至少知道阈值轮廓级别(这里看起来是60),那么您可以只计算该阈值以下的“像素”数量,然后计算相对于{{1} }和x

这是一些示例代码(我也修改了您的代码):

y

输出为:

x = -50:0.1:50;
y = -50:0.1:50;
[X, Y] = meshgrid(x, y);
Z = (X.^2 + Y.^2).^(1/2);
c = contourf(X, Y, Z, [60, 60]);
colorbar();

% Total amount of pixels representing the area
a_pixels_total = length(x) * length(y)

% Amount of pixels below given contour level
a_pixels_below = sum(Z(:) <= 60)

% Total area in units
a_unit_total = (x(end) - x(1)) * (y(end) - y(1))

% Percentage of area below the given contour level in units 
a_unit_perc = a_pixels_below / a_pixels_total * a_unit_total

希望有帮助!