我有一个关于 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);