当轮廓包含域的边缘时查找二维轮廓区域
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" 的数量,并计算相对于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
然后输出是:
a_pixels_total = 1002001
a_pixels_perc = 952233
a_unit_total = 10000
a_unit_perc = 9503.3
希望对您有所帮助!
假设我们在 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" 的数量,并计算相对于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
然后输出是:
a_pixels_total = 1002001
a_pixels_perc = 952233
a_unit_total = 10000
a_unit_perc = 9503.3
希望对您有所帮助!