Расчет трехмерного аффинного преобразования и повторная выборка объема с использованием этого

Пытаюсь зарегистрировать два тома (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, я вычислил трехмерное аффинное преобразование 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, который вычисляет трехмерное аффинное преобразование, имеет столбец нулей вместо строки нулей (как в 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