首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在图像上插入新控制点

在图像上插入新控制点
EN

Stack Overflow用户
提问于 2019-03-18 20:06:59
回答 1查看 41关注 0票数 0

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

  1. 最初,我放置了几个控制点(5x5),经过很长时间,结果是好的,但处理时间是禁止的。
  2. 我读过很多关于图像配准的文章(例如,Rueckert,et.al,1999年),为了提高图像配准的性能,作者使用了多级B样条变形,但算法对我来说并不完全清楚。
  3. 这篇文章中,作者提出了一组公式(第4.2节),以在不改变B样条形状的情况下增加控制点的数目,但我的实现没有返回我所期望的结果(例如,我期望应用这个新的10x10控制点转换,并且具有相同的5x5转换)。

下面是我的MATLAB实现:

代码语言:javascript
复制
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

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 13:45:51

matlab中心上很好地实现了Rueckert等人(1999年)b样条登记,由Dirk编写。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55229265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档