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 );

ここで、最初の推定値は、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);
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 に答える