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