0

我有一个关于 MATLAB 的等值面函数的问题。

假设我有一个表示对象 A 的蒙版(一个 bw 体积)和一个表示对象 B 的表面(顶点和面)。我们知道对象 A 和对象 B 是同一事物的不同表示。因此,我们要注册它们。

现在,配准算法返回某个变换 T,从初始猜测 T' 开始。要手动评估初始猜测,我执行以下操作:

[f1,v2] = loadGraphicalTemplate(B);
[f2,v2] = isosurface(mask); % aka object A
v2 = transformPointsForward(InitialGuess,v2);
labels = ( zeros(length(v1),1)'; ones(length(v2),1)' );
showMesh( [f1;f2], [v1;v2], labels );

其中初始猜测是我手动修改的仿射矩阵,直到两个表面几乎重叠。此时,注册算法来了,并完成了剩下的工作。

问题是,当我将转换应用于点云(从对象 B 生成,请参见下面的代码)时,结果没有任何意义!就好像变换矩阵是随机生成的!

%% coordinates of non zero elements
IDX = find(B);
[X,Y,Z] = ind2sub(size(B), IDX);
coords = [X,Y,Z];

%% values of non zero elements
linB = B(:);
vals = linB(IDX);

%% transformation 
coords = transformPointsForward(T,coords);
4

1 回答 1

0

我发现了问题所在。即来自 ind2sub 的 X 和 Y 坐标必须交换。

IDX = find(B);
[X,Y,Z] = ind2sub(size(B), IDX);
coords = [Y,X,Z];
于 2015-05-10T09:29:10.447 回答