Date: 2015-06-30 21:53

1. 基本数学描述

薄板样条(Thin Plate Spline)映射根据两幅相关图像中的对应控制点集来决定一个变形函数。它寻找通过所有给定点的饶度最小的光滑曲面。“薄板”这个名字的由来,就表示薄板样条是用来近似的仿真一块金属薄片在通过相同的控制点时的行为特征。

上图是使用薄板样条进行变换的例子,薄板样条插值可表示为多变量插值问题,对于d维空间中提取出的n个特征点对xi和yi,问题描述为在一个合适的Hilbert空间H上寻找连续变换f:Rd→Rd,并满足如下两个条件:

(1)使得既定泛函E(f):H→R最小化;

(2)满足插值条件(通过指定的几个点)。

(这里有一系列的数学推导,一维如何计算,二维如何计算,三维如何计算,四维如何计算,暂时代过 … …)

2. 二维图像配准中的应用

以二维图像配准为例,在2维2阶导数情况下,则f(x,y)在满足插值方程的同时使得能量函数达到最小,即有:

f=argminfEfE(f)=∫∫⎛⎝(∂2f∂x2)2+2(∂2f∂x∂y)2+(∂2f∂y2)⎞⎠dxdy

此即为Bookstein于1989年首次将薄板样条应用于二维图像配准中时所采用的目标函数.使得能量函数取得最优解的

f(x,y)

的表达式为:

f(x,y)=a1+axx+ayy+∑i=1nwiU(∥(xi,yi)−(x,y)∥)

其中

U(r)=r2logr

为径向基函数。

wi,i=1,2,⋯,n

以及

a1,ax,ay

为未知系数。

为了使

f(x,y)

的二阶导数平方可积,必须有:

∑i=1nwi=∑i=1nwixi=∑i=1nwiyi=0

故可得薄板样条函数的系数满足一个线性方程组:

[KPTPO][wa]=[vo]

其中Ki,j=U(∥(xi,yi)−(xj,yj)∥),P的第i行为(1,xi,yi),O为3×3的零矩阵,o为3×1零向量,w和v为由wi和vi得到的列向量,而列向量a中元素为a1,ax,ay。令

L=[KPTPO]

对上述线性方程组求解,可得:

w=L−1M

薄板样条的映射函数可以确定源图像(图像A)到目标图像(图像B)的映射变换关键系数(w1,w2,⋯,wn;a1,ax,ay),然后将图像A中任意一点的坐标代入公式,可得到图像B中对应点的坐标。但是,薄板映射并不是一对一的,通常若干个点会映射到同一个点上。这就需要对整幅图像进行遍历,找到所有漏掉的点,通过插值得到这些点的像素值。插值的过程这里不再过多介绍。

3. 结合Matlab代码说明

主函数如下,基中,Xp和Yp分别指源图像中的特征点,Xs和Ys指参考图像中的特征点:

%% Algebra of Thin-plate splines

% Compute thin-plate spline mapping [W|a1 ax ay] using landmarks

[wL]=computeWl(Xp, Yp, NPs);

% Y = ( V| 0 0 0)' where V = [G] where G is landmark homologous (nx2) ;

% Y is col vector of length (n+3)

wY = [Xs(:) Ys(:); zeros(3,2)];

wW = inv(wL)*wY; % (W|a1 ax ay)' = inv(L)*Y

% Thin-plate spline mapping (Map all points in the plane)

% f(x,y) = a1 + ax * x + ay * y + SUM(wi * U(|Pi-(x,y)|)) for i = 1 to n

[Xw, Yw]=tpsMap(wW, imgH, imgW, Xp, Yp, NPs);

从中可以看出,首先是计算L矩阵,代码如下:

%% [L] = [[K P];[P' 0]]

% np - number of landmark points

% (xp, yp) - coordinate of landmark points

function [wL]=computeWl(xp, yp, np)

rXp = repmat(xp(:),1,np); % 1xNp to NpxNp

rYp = repmat(yp(:),1,np); % 1xNp to NpxNp

wR = sqrt((rXp-rXp').^2 + (rYp-rYp').^2); % compute r(i,j)

wK = radialBasis(wR); % compute [K] with elements U(r)=r^2 * log (r^2)

wP = [ones(np,1) xp(:) yp(:)]; % [P] = [1 xp' yp'] where (xp',yp') are n landmark points (nx2)

wL = [wK wP;wP' zeros(3,3)]; % [L] = [[K P];[P' 0]]

return

得以L矩阵后,下面一行代码用来对w求解:

wW = inv(wL)*wY;

最后利用下面一行代码实现源图像到目标图像的变换:

[Xw, Yw]=tpsMap(wW, imgH, imgW, Xp, Yp, NPs);

其中,tpsMap的代码如下:

%% Mapping: f(x,y) = a1 + ax * x + ay * y + SUM(wi * U(|Pi-(x,y)|)) for i = 1 to n

% np - number of landmark points

% (xp, yp) - coordinate of landmark points

function [Xw, Yw]=tpsMap(wW, imgH, imgW, xp, yp, np)

[X Y] = meshgrid(1:imgH,1:imgW); % HxW

X=X(:)'; % convert to 1D array by reading columnwise (NWs=H*W) Y=Y(:)'; % convert to 1D array (NWs)

NWs = length(X); % total number of points in the plane

% all points in plane

rX = repmat(X,np,1); % Np x NWs

rY = repmat(Y,np,1); % Np x NWs

% landmark points

rxp = repmat(xp(:),1,NWs); % 1xNp to Np x NWs

ryp = repmat(yp(:),1,NWs); % 1xNp to Np x NWs

% Mapping Algebra

wR = sqrt((rxp-rX).^2 + (ryp-rY).^2); % distance measure r(i,j)=|Pi-(x,y)|

wK = radialBasis(wR); % compute [K] with elements U(r)=r^2 * log (r)

wP = [ones(NWs,1) X(:) Y(:)]'; % [P] = [1 x' y']'

wL = [wK;wP]'; % [L] = [w1 w2 ... wn 1 x y]

Xw = wL*wW(:,1); % [Pw] = [L]*[W]

Yw = wL*wW(:,2); % [Pw] = [L]*[W]

return

薄板样条插值用于图像配准的原理是非常容易理解的。此外,代码中还有一些是用于插值填图像孔洞 ,这里就不介绍了

注意:这个代码中的X,Y和我们传统图像处理中的X,Y是反的,也就是说,X是行,Y是列,作者为什么这么写,不清楚了

其它细节可以参考如下论文:

F.L. Bookstein, “Principal Warps: Thin-Plate Splines and the Decomposition of Deformations,” IEEE TPAMI, 1989.

张春生, 基于CT图像的肺部轮廓非刚性配准方法[D], 哈尔滨工业大学 2012.

李菁菁, 基于控制点平滑的人脸变形算法及其在人脸动画中的应用[D], 湘潭大学 2008.

薄板样条函数 matlab,基于薄板样条插值图像配准的Matlab实现相关推荐

  1. 【图像配准】基于互信息的图像配准算法:MI、EMI、ECC算法

    简介:         基于互信息的图像配准算法以其较高的配准精度和广泛的适用性而成为图像配准领域研究的热点之一,而基于互信息的医学图像配准方法被认为是最好的配准方法之一.基于此,本文将介绍简单的基于 ...

  2. 干货 | 基于特征的图像配准用于缺陷检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 特征提取 基于特征的图像配准,具有非常广泛的应用,大致流程可以如下 ...

  3. matlab图像分类器,Matlab 基于svm的图像物体分类

    Matlab 基于svm的图像物体分类 发布时间:2018-05-16 20:27, 浏览次数:1623 , 标签: Matlab svm 本周工作日志,老师布置了一个小作业,让我们使用matlab实 ...

  4. 图像配准融合(一)——基于互信息的图像配准方法(c++)

    1.内容简介 图像配准方法按照其算法原理可以分为:基于灰度信息的配准.基于变换域信息的配准.基于特征信息的配准 (本人实验主要集中在基于灰度信息的配准以及基于特征信息的配准两类方法,对基于变换域信息的 ...

  5. 基于GAN的图像配准汇总

    基于GAN的图像配准汇总 1. Adversarial Similarity Network for Evaluating Image Alignment in Deep Learning based ...

  6. matlab实现sobel边缘检测图像,基于Sobel算子图像边缘检测的MATLAB实现

    <基于Sobel算子图像边缘检测的MATLAB实现>由会员分享,可在线阅读,更多相关<基于Sobel算子图像边缘检测的MATLAB实现(3页珍藏版)>请在人人文库网上搜索. 1 ...

  7. 计算机视觉与深度学习 | 基于控制点的投影畸变图像配准(matlab源码)

    ============================================== github:https://github.com/MichaelBeechan CSDN:https:/ ...

  8. 基于小波变换的图像边缘检测(matlab祖传代码注释)

    基于小波变换的图像边缘提取应用展示 上图为针对png格式无背景原图的边缘检测,对比各种边缘检测算子,小波变化的优势体现并不明显. 上图为针对含背景图片的边缘检测,小波变化的优势这里体现的比较明显. m ...

  9. matlab 三维图像配准,[转载]Matlab实现多种图像配准(转)

    本文讲述如何利用Matlab Image Processing Toolbox中的图像配准工具实现线性正投影.仿射.投影.多项式.分段线性.局部加权平均配准的过程. 实验平台 X86 PC,Windo ...

最新文章

  1. catia如何测量毛料尺寸_浅谈线束尺寸测量基准点的定义
  2. synchronized锁的升级
  3. 文件上传功能-本地存储、阿里OSS、七牛云
  4. Unity5 GI与PBS渲染从用法到着色代码
  5. python实习生面试题_大数据分析实习生面试题库
  6. Spring、SpringMVC、Spring Boot、Spring Cloud 概念、关系及区别
  7. python办公自动化博客_最全总结 | 聊聊 Python 办公自动化之 Word(下)
  8. verilog 生成块_Verilog数字系统设计教程之学习摘要
  9. 计算机二级-C语言-对标志位的巧妙使用。对二维数组数据进行处理。对文件进行数据输入。...
  10. React context 丢失问题
  11. 这是一个定时器,定时执行一次,用在定时发送邮件
  12. jdbc mysql 偶发空指针_JDBC连接执行MySQL存储过程报空指针或权限错误
  13. I学霸官方免费教程四十二 :Java流之字节流 输入流和输出流 InputStream和OutputStream...
  14. 人口增长模型 源代码
  15. 分享最新win7旗舰版/专业版企业版激活密钥和激活方法哦
  16. c语言窗体编辑框框函数,请教:下面c语言是创建口的小程序,函数MessageBox(NULL,,,,MB_OK);中的4个参数各起什么作用?...
  17. 程序员的未来之路[转]
  18. 无法重命名,文件不可信,后台被自动关闭,“Notebook Untitled.ipynb is not trusted jupyter”
  19. matlab加载xls文件报错,服务器出现意外情况,远程过程调用失败
  20. Hadoop数据本地化

热门文章

  1. kali-工具集之Httrack:复制网站
  2. Android开发笔记之简易画画板的制作
  3. Cannot deserialize value of type `java.util.ArrayList<com.trunk.common.core.po.xxx>` fr
  4. 【题库】上海市学校心理咨询师-普通心理学-考点解析 11.2 智力理论
  5. matlab矩阵求逆:inv pinv \ / 斜线运算符的选择
  6. 《Drools 规则引擎视频教程》相关事宜
  7. 如何证明非方阵的矩阵是否可逆
  8. Chrome黑暗模式
  9. 《暧昧的日本人》--李兆忠
  10. EasyExcel导出有下拉框的模板