2 つのボリューム (vol1
およびvol2
) を登録しようとしています。のサイズはvol1
です40x40x24
。のサイズはvol2
です64 x64x11
。
ここまでで、それらの特徴を抽出して照合しました。pairs
これで、サイズの行列が格納されている 2 つのボリュームに対応する点のセットがあります100x6
( の各行はpairs
、のボクセルの座標であり[x y z X Y Z]
、の対応するボクセルです)。次に、RANSAC アルゴリズムを使用して、3D アフィン変換 T を計算しました。たとえば、T は次のようなものです。(x,y,z)
vol1
[X Y Z]
vol2
T=
2.7791 0.8204 0.7561 -61.6055
-0.4418 2.2663 -1.9882 29.0375
-0.2120 0.6568 -0.7041 6.2702
0 0 0 1.0000
いくつか質問があります。まず、このアフィン変換行列は正しく見えますか? 私には正しいように見えます。それが正しい場合、3D アフィン変換を計算する MATLAB の関数affine3dがゼロの行ではなくゼロの列を持っているのはなぜですか (上記の T のように)? 私の変換 T の転置のように見えます。
私の変換が正しい場合、別の問題が発生します。変換 T を使用して vol1 をリサンプリングしようとしましたが、計算されたボクセル座標が負です!!! 私はとても混乱しています。この問題の原因はわかりません。
これが私のコードです。何か問題がありましたらお知らせください。
function [ vol1R ] = resampling(vol1, vol2, T)
[size1, size2, size3] = size(vol2);
vol1R = zeros(size1,size2,size3); % Initializing registered vol1
for i= 1:size1
for j= 1:size2
for k = 1:size3
V = [i;j;k;1]; % V is the coordinates of a voxel on the registered vol1
% correspoding to voxel v on the vol1
% V = T * v : Relationship between v and V
v = T\V; % Problem occurs here!!!!!!! v has some negative values
% v (coordinates in vol1)
% continue
end
end
end