Изчисляване на 3D афинна трансформация и повторно вземане на проби от обем с помощта на това

Опитвам се да регистрирам два тома (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

person sara_123    schedule 21.08.2015    source източник


Отговори (1)


Форматът на вашата афинна матрица изглежда добре, ако я използвате за работа с колонни вектори, както в [X; Y; Z; 1] = T*[x; y; z; 1]. Причината, поради която примерът на MATLAB е транспониран, е, че той работи с 1x4 редови вектори, както в [X, Y, Z, 1] = [x, y, z, 1]*(T').

Що се отнася до действителните числа в матрицата, не мога да коментирам, тъй като не знам оригиналните изображения. Забелязвам, че има x-превод на -61.6055, което изглежда доста голямо за размерите на изображенията, които имате. Знаете ли със сигурност, че това е правилният отговор?

Бих предложил може би да започнете с проста двойка изображения, където знаете отговора предварително (може би бели квадратчета на черен фон, нарисувани в Paint), за да потвърдите, че алгоритъмът ви за регистрация дава правилния отговор.

person eigenchris    schedule 22.08.2015