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 );
ここで、最初の推定値は、2 つのサーフェスがほぼ重なるまで手動で変更したアフィン行列です。この時点で、登録アルゴリズムが来て残りの処理を行います。
問題は、ポイント クラウド (オブジェクト 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);