Вставьте новые контрольные точки над изображением - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь сделать автоматическую нежесткую регистрацию изображения, используя B-сплайны в качестве модели деформации, но у меня возникают некоторые проблемы:

  1. Изначально я поставил несколько контрольных точек (5х5), и спустя долгое время результат хороший, но время обработки непомерно велико.
  2. Я прочитал множество статей по регистрации изображений (Rueckert, et.al, 1999; например), и для повышения производительности авторы используют многоуровневую деформацию B-Spline, но алгоритмы не совсем понятны для я.
  3. В этой статье автор представляет набор формул (раздел 4.2) для увеличения количества контрольных точек без изменения формы B-сплайна, но моя реализация не возвращает то, что я ожидал (например, я ожидал применить это новое преобразование контрольной точки 10x10 и иметь такое же преобразование 5x5).

Вот моя реализация MATLAB:

function ref_coeff = refine_coeff_grid(c, ft, delta)

%c -- Control points
%ft -- image to be transformed
%delta -- spacing between the control points

[X,Y]=ndgrid(-delta:delta:(size(ft, 1) +(delta*2)), -delta:delta:(size(ft, 2)+(delta*2)));

[r, co, s] = size(c);

i = 2:(r-2);
j = 2:(co-2);

new_c = zeros(2*(r-3)+3, 2*(co-3)+3, s);
new_c(:, :, 1) = X;
new_c(:, :, 2) = Y;

new_c(2*i, 2*j, :) = (c(i-1, j-1, :) + c(i-1, j+1, :) + c(i+1, j-1, :) + c(i+1, j+1, :) + ...
                      6*(c(i-1, j, :) + c(i, j-1, :) + c(i, j+1, :) + c(i+1, j, :)) + 36*c(i, j, :))/64;

new_c(2*i, 2*j+1, :) = (c(i-1, j, :) + c(i-1, j+1, :) + c(i+1, j, :) + c(i+1, j+1, :) + 6*c(i, j, :) + 6*c(i, j+1, :))/16;

new_c(2*i+1, 2*j, :) = (c(i, j-1, :) + c(i, j+1, :) + c(i+1, j-1, :) + c(i+1, j+1, :) + 6*c(i, j, :) + 6*c(i+1, j, :))/16;

new_c(2*i+1, 2*j+1, :) = (c(i, j, :) + c(i, j+1, :) + c(i+1, j, :) + c(i+1, j+1, :))/4;    

ref_coeff = new_c;
end

Что я делаю не так?

1 Ответ

1 голос
/ 20 марта 2019

Существует хорошая реализация регистрации b-сплайна Rueckert et al (1999), доступной на matlab central , написанной Дирком-Яном Круном.

Я бы посоветовал вам использовать существующие реализации, подобные этой, поскольку написание классического алгоритма регистрации с нуля означает повторное изобретение колеса.

Обратите внимание, что эта реализация регистрации b-сплайна ожидает грубые (например, жесткие или аффинные) предварительно зарегистрированные данные. Это не будет работать, если ссылка и цель, например, полностью по-разному масштабируется или сильно вращается и т. д. Предварительно зарегистрируйтесь.

...