0

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
4

1 に答える 1

1

のように、アフィン行列を使用して列ベクトルを操作する場合、アフィン行列の形式は適切に見えます[X; Y; Z; 1] = T*[x; y; z; 1]1x4MATLAB の例が転置されているのは、 のように行ベクトルを操作するため[X, Y, Z, 1] = [x, y, z, 1]*(T')です。

マトリックスの実際の数字については、元の画像がわからないのでコメントできません。の x 変換があることに気付きました。これは-61.6055、あなたが持っている画像のサイズに対してかなり大きいようです。これが正しい答えだと確信していますか?

登録アルゴリズムが正しい答えを返すことを確認するために、事前に答えがわかっている単純な画像のペア (ペイントで描かれた黒い背景に白い四角形など) から始めることをお勧めします。

于 2015-08-22T17:17:25.520 に答える