You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改进isosurface方法,实现与regionprops3相当的3D表面积计算精度?

3D二值掩码的球形度计算:改进非各向同性体素下的表面积精度

我需要在MATLAB中计算3D物体(二值掩码)的球形度(sphericity),尤其是针对**非各向同性体素间距(non-isotropic voxel spacing)的场景,因此必须获得精确的表面积(surface area)**测量结果。

我在各向同性体素的同一二值球体上对比了两种计算方法(代码见下文)。原本预期如果第二种方法在各向同性体素图像上能达到与regionprops3一致的结果,那么它在非各向同性体素图像上也能给出正确结果,但实际对比结果显示两者精度差异很大:

对比结果

regionprops3法

  • 体积 = 4169
  • 表面积 = 1262.5112
  • 球形度 = 0.99221

isosurface + 叉积法

  • 体积 = 4169
  • 表面积 = 1366.8365
  • 球形度 = 0.91648

可以看到,第二种方法的表面积精度远低于regionprops3,对应的球形度精度也更低。

问题

能否在不修改输入3D二值掩码的前提下改进第二种方法,使其精度接近regionprops3?

clc; clear; close all;

% ----------------------
% 创建二值球体
% ----------------------
N = 50;                  % 体素尺寸 (50x50x50)
mask = zeros(N, N, N);   % 3D二值矩阵
radius = 10;             % 球体半径
center = [25, 25, 25];   % 球体中心
% 创建3D网格
[x, y, z] = ndgrid(1:N, 1:N, 1:N);
mask(((x-center(1)).^2 + (y-center(2)).^2 + (z-center(3)).^2) <= radius^2) = 1;

% ----------------------
% regionprops3方法
% ----------------------
stats = regionprops3(mask, 'Volume', 'SurfaceArea');
V_rp = stats.Volume;
A_rp = stats.SurfaceArea;
psi_rp = (pi^(1/3) * (6 * V_rp)^(2/3)) / A_rp;

disp('--- regionprops3 method ---');
disp(['Volume = ', num2str(V_rp)]);
disp(['Surface Area = ', num2str(A_rp)]);
disp(['Sphericity = ', num2str(psi_rp)]);

% ----------------------
% isosurface + 叉积法
% ----------------------
dx = 1; dy = 1; dz = 1;  % 各向同性体素间距 
fv = isosurface(mask, 0.5);

% 将顶点缩放至真实世界单位
fv.vertices(:,1) = fv.vertices(:,1) * dx;
fv.vertices(:,2) = fv.vertices(:,2) * dy;
fv.vertices(:,3) = fv.vertices(:,3) * dz;

% 计算体积
V_iso = nnz(mask) * dx * dy * dz;

% 计算表面积
A_iso = 0;
for i = 1:size(fv.faces,1)
    v1 = fv.vertices(fv.faces(i,1),:);
    v2 = fv.vertices(fv.faces(i,2),:);
    v3 = fv.vertices(fv.faces(i,3),:);
    A_iso = A_iso + 0.5 * norm(cross(v2-v1, v3-v1));
end

psi_iso = (pi^(1/3) * (6 * V_iso)^(2/3)) / A_iso;

disp('--- isosurface + cross method ---');
disp(['Volume = ', num2str(V_iso)]);
disp(['Surface Area = ', num2str(A_iso)]);
disp(['Sphericity = ', num2str(psi_iso)]);

内容的提问来源于stack exchange,提问作者Ellie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:17:22