在图像上插入新的控制点

Insert new control points over an image

我正在尝试使用 B 样条曲线作为变形模型进行自动非刚性图像配准,但我遇到了一些问题:

  1. 最初,我放了几个控制点(5x5),时间长了,效果不错,但处理时间太长了。
  2. 我看了很多关于图像配准的文章(例如Rueckert, et.al, 1999;)为了提高性能,作者使用了多级B样条变形,但是算法是我不太清楚。
  3. this article中,作者提出了一组公式(4.2节)来增加控制点的数量而不改变B样条的形状,但我的实现没有return我所期望的(例如,我期望应用这个新的 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

我做错了什么?

matlab central 上有一个很好的 Rueckert 等人 (1999) b 样条配准的实现,由 Dirk-Jan Kroon 编写。

我建议您像这样使用现有的实现,因为从头开始编写经典的注册算法意味着重新发明轮子。

请注意,此 b 样条配准实现需要粗略(例如刚性或仿射)预配准数据。如果参考和目标是例如,它将不起作用完全不同的比例或强烈旋转等。所以请先预注册。