Как ограничить регистрацию изображения Matlab только вращением с нулевым переводом?

Я использую функцию imregtform() Matlab для регистрации двух изображений 3D MRI друг с другом. Я знаю, что оба изображения связаны вращением вокруг центра изображения, и я использую «жесткий» тип преобразования для выполнения регистрации. Однако сгенерированные преобразования имеют небольшой, но ненулевой (менее 0,5 пикселя) поступательный компонент. Есть ли способ указать, что перевод должен быть точно нулевым? При необходимости я готов использовать другие инструменты за пределами Matlab.


person hbraunDSP    schedule 21.08.2018    source источник
comment
Вы уверены, что это единственная ротация? Пробовали ли вы удалить перевод и посмотреть, подходит ли он лучше?   -  person Ander Biguri    schedule 21.08.2018
comment
Удалите меня, если я ошибаюсь, но я предполагаю, что когда вы имеете в виду, что он только повернут, вы имеете в виду, что он вращается вокруг центра. В этом случае аффинная матрица будет включать поступательный элемент, поскольку точкой вращения в аффинной матрице является верхняя левая точка? В этом случае вам все равно понадобится элемент перевода.   -  person Durkee    schedule 22.08.2018
comment
@Durkee Я использую объекты пространственной привязки, чтобы указать систему координат, которая начинается в центре объема. Вращение происходит примерно в том же самом начале координат, поэтому наземный вектор перевода действительно равен нулю.   -  person hbraunDSP    schedule 26.08.2018


Ответы (1)


Я предполагаю, что преобразование основано на реперных маркерах, верно? Процедура вычисления жесткого преобразования методом наименьших квадратов выглядит следующим образом: сначала вы вычисляете матрицу вращения методом наименьших квадратов (R), затем используете R как коэффициент масштабирования (s) и, наконец, используете как R, так и s вектор переноса (t).

Пусть fid1 и fid2 будут xy-координатами реперных маркеров их соответствующих МРТ. Тогда вектор переноса рассчитывается как:

t = mean(fid1) - s*R*mean(fid2)

Обратите внимание, что вы должны были бы иметь абсолютно идеальную точность при выборе реперных маркеров, чтобы иметь нулевой перевод.

Однако вы можете удалить перевод после преобразования, поскольку оценка R и s не зависит от t. Чтобы удалить перевод, сделайте следующее:

tform = imregtform(....)

% Set the last row except the last element of the transformation 
% matrix to zero. This removes the translation.
tform.T(end,1:end-1) = 0;

% Register the two images
movingRegistered = imwarp(...,tform,...);

надеюсь это поможет

person Lasse    schedule 30.08.2018
comment
Я не использую реперные маркеры; Я регистрируюсь на основе всего изображения. Что еще более важно, я не уверен, что ваша претензионная оценка R и s не зависит от t точна. В качестве контраргумента рассмотрим однородную сферу с центром в координатах (1,0,0) на изображении 1 и (0,1,0) на изображении 2. Это может быть поворот на 90 градусов вокруг начала координат без смещения или может быть переводом (-1,1,0) без поворота. Простой случай, который я придумал, недоопределен, но, надеюсь, вы видите, как это обобщается. - person hbraunDSP; 06.09.2018
comment
Я имел в виду, что R, s и t рассчитываются независимо. См., например: igl.ethz.ch/projects/ARAP/svd_rot.pdf - person Lasse; 29.09.2018