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

Finding 2D contour area when contour contains edges of domain

假设我们在 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]);

如何估算白色区域的面积?

这是一个测试用例,通常我不知道水平集的方程

注意水平集与边界相交,我不能仅仅增加域大小来避免这种情况(在非测试用例中)。

编辑: 如果你想近似白色区域也超出边界,那么下面的方法显然是行不通的。我才发现,你的措辞还有解释的余地​​。


如果你至少知道阈值等高线水平(这里似乎是 60),那么你可以计算低于该阈值的 "pixels" 的数量,并计算相对于xy.

下面是一些示例代码(我也修改了你的代码):

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

然后输出是:

a_pixels_total =  1002001
a_pixels_perc =  952233
a_unit_total =  10000
a_unit_perc =  9503.3

希望对您有所帮助!