如果我理解正确,您有两个代表周长的 3D 体素数组 - 您想要一个体素和另一个体素之间的距离。我的方法是这样的(假设 A 和 B 是初始卷,并且它们的大小相同):
Aperi = bwperim(A,6);
Bperi = bwperim(B,6);
现在我们需要非零体素的坐标:
sz = size(A);
[xx yy zz] = meshgrid(1:sz(1), 1:sz(2), 1:sz(3));
indxA = find(Aperi==1);
posA = [xx(indxA(:)) yy(indxA(:)) zz(indxA(:))]; % a Nx3 matrix of x,y,z positions
indxB = find(Bperi==1);
posB = [xx(indxB(:)) yy(indxB(:)) zz(indxB(:))]; % a Mx3 matrix - note N ~= M
现在您有两个 2D 矩阵,您可以计算点之间的差异 - 但您不知道要比较哪些对,因此您需要做更多工作:
delta = bsxfun(@minus, reshape(posA, 1, [], 3), reshape(posB, [], 1, 3) );
现在delta 的维度为 [M N 3],在 posA 和 posB 中的每对点之间存在差异。距离是
distance = sqrt(sum(delta.*delta, 3));
并且对于A中的每个点,到B中最近点的距离为
closest = min(distance);
这将是一个[1 N] 行向量。
要将这些值放回原始矩阵中,您需要回到开始时的索引:
distMatrix = zeros(size(A));
distMatrix(indxA) = closest;
我认为您现在将 B 周长上的最近点与 A 周长上每个点的距离映射到 A 的表面。
如果这能让你找到你正在寻找的答案,请告诉我......