Опитвам се да регистрирам два тома (vol1
и vol2
). Размерът на vol1
е 40x40x24
. Размерът на vol2
е 64 x64x11
.
Досега съм извличал характеристиките им и след това съм ги съпоставял. Сега имам набор от съответстващи точки в два тома, които се съхраняват в pairs
, което е матрица с размер 100x6
(всеки ред от pairs
е [x y z X Y Z]
, където (x,y,z)
са координатите на воксел в vol1
, а [X Y Z]
е съответният воксел в vol2
) . След това, използвайки алгоритъма RANSAC, изчислих 3D афинната трансформация, T. Например, T е нещо като по-долу:
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
имам няколко въпроса Първо, тази матрица на афинна трансформация изглежда ли правилна? Изглежда ми правилно. Ако е правилно, тогава защо функцията affine3d< /strong> в MATLAB, който изчислява 3D афинната трансформация, има колона с нули вместо ред с нули (както в T по-горе)? Изглежда като транспониране на моята трансформация T.
Ако моята трансформация е правилна, възниква друг проблем. Опитах се да преобразувам vol1 с помощта на трансформация T, но изчислените вокселни координати са отрицателни!!! Толкова съм объркан. Не знам на какво се дължи този проблем.
Ето го моят код. Моля, уведомете ме, ако видите някакъв проблем с него.
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