MATLAB等值面顶点坐标与体积的对应关系

时间:2015-05-08 23:05:55

标签: matlab volume mesh surface image-registration

我对MATLAB的isosurface函数有疑问。

假设我有一个表示对象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);

1 个答案:

答案 0 :(得分:0)

我发现了什么问题。即必须交换ind2sub的X和Y坐标。

IDX = find(B);
[X,Y,Z] = ind2sub(size(B), IDX);
coords = [Y,X,Z];