gpt4 book ai didi

matlab - PrincipalAxisLength 测量值是否等于 regionprops3 输出中的对象直径?

转载 作者:太空宇宙 更新时间:2023-11-03 20:19:42 25 4
gpt4 key购买 nike

我正在使用 regionprops3在 MATLAB 中计算对象属性的命令。我以为 PrincipalAxisLength 是我的对象的直径,但事实并非如此。

我创建了一个二进制图像 I,其中包含一个半径为 (40, 10, 10) 的椭圆体。我从 regionprops3 获取这些值:

sum(I(:)) = 16741
stats.volume = 16741
stats.EquivDiameter = 31.739 % 4/3*pi*(31.739/2)^3=16741
stats.PrincipalAxisLength = [71.535, 17.936, 17.908]

如果 PrincipalAxisLength 是椭圆体的 3 个直径,那么它的体积是:

4/3*pi*71.535/2*17.936/2*17.908/2 = 12031

这不等于上述音量。

那么,如何计算椭球体的半径?

最佳答案

documentation对于 PrincipalAxisLength 形状测量将其描述为(强调我的):

Length (in voxels) of the major axes of the ellipsoid that have the same normalized second central moments as the region, returned as 1-by-3 vector. regionprops3 sorts the values from highest to lowest.

换句话说,它将多元概率分布拟合到该区域并计算central moments对于该分布,返回 PrincipalAxisLength 测量的第二中心矩(即方差)。

您看到的体积差异是由于这些中心矩没有定义与该区域数据拟合的边界椭球,只是概率拟合的方差数据分布在其中。对于您的区域包含椭圆体形状的情况,它将低估椭圆体的范围(以及总体积)。下面是一些可视化代码:

% Create 3D binary data containing ellipsoid:
[X, Y, Z] = meshgrid(-50:50, -20:20, -20:20);
R = [40 10 10];
I = ((X./R(1)).^2 + (Y./R(2)).^2 + (Z./R(3)).^2 <= 1);

% Calculate statistics with regionprops3:
stats = regionprops3(I, 'all');
L = stats.PrincipalAxisLength./2;

% Create ellipsoid surface from second central moments and plot:
[x, y, z] = ellipsoid(0, 0, 0, L(1), L(2), L(3), 100);
surf(x, y, z, 'FaceAlpha', 0.5, 'FaceColor', 'r', 'EdgeColor', 'none');
axis equal;
hold on;

% Create image of middle slice through ellipsoid and plot:
imageSlice = 256.*uint8(I(:, :, 21));
imageSlice = cat(3, imageSlice, imageSlice, imageSlice);
image(-50:50, -20:20, imageSlice);
view(0, 90);

这是你得到的最终情节:

enter image description here

如果您想要将椭球面拟合到您的二进制对象,您可以使用 PrincipalAxisLength 测量作为真实轴长度​​的初始猜测。有 this function在进行椭圆体拟合的文件交换上,但它使用一组表面点而不是二进制体积。也许您可以调整该代码以满足您的需求。

更新

link provided by Cris在评论中表明,可以确定第二中心矩和椭圆半径之间的关系的清晰数学关系。虽然我还没有机会完成数学运算,但我注意到简单地将 PrincipalAxisLength 缩放 sqrt(5/16) 给出的值非常接近 R:

>> sqrt(5/16).*stats.PrincipalAxisLength

ans =

40.008372204885049 9.970908565527971 9.970908565527971

关于matlab - PrincipalAxisLength 测量值是否等于 regionprops3 输出中的对象直径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56564648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com