找回密码
 欢迎注册
查看: 15471|回复: 15

[求助] 关于两个对应的非刚体变换的2D点集的匹配,使用Thin Plate Spline,求助

[复制链接]
发表于 2012-5-13 02:34:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
http://en.wikipedia.org/wiki/Thin_plate_spline

假设x为二维向量,那么这里是需要对向量x的x轴分量与y轴分量分别计算Cix和Ciy,而生成一个(2+1)*K的矩阵C吗?
      [C1x  ...  Cix  ...  CKx]
C=[C1y  ...  Ciy  ...  Cky]    ?
      [1  ...  1  ...  1]


这里对||·||中的(2+1)*K矩阵,是如何计算范数?

呵呵,本人只有初中文化,很多东西还没有学会,打扰之处还望大家见谅。
怀疑上述链接的矩阵行和列和通常相比是转置的,可以从以下链接看出:
http://en.wikipedia.org/wiki/Affine_transformation
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-5-15 08:20:47 | 显示全部楼层
1# dianyancao
你给的链接已经做了很明确的解释,如果你英文足够好的话。
||x-w|| 表示求欧氏距离,即坐标分量相减的平方和,再开方。
phi(x) 表示核函数,如高斯核
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-5-16 02:23:03 | 显示全部楼层
感谢wayne的解答,请问上述矩阵的范数是矩阵元 p-范数(p=2)吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-5-16 05:38:10 | 显示全部楼层
不知道我以下的理解是否有误,



ftps(zn)等价于f(xn,yn) = (g(xn), g(yn)),其中

g(xn) = m11·xn + m12·yn + m13 + Ki:Cx

g(yn) = m21·xn + m22·yn + m23 + Ki:Cy



zn= [ xn  yn  1]T

d是一个全局仿射矩阵,提供的参数为:

[m11  m12  m13]

d = [m21  m22  m23]

[0    0    1]

Cx和Cy分别是与向量z相关的x坐标测度和y坐标测度。

Cx = [C1x    C2x    C3x   …...   Cnx]T

Cy = [C1y    C2y    C3y   …...   Cny]T



Ki:为径向基核函数的提供矩阵的第i行矢量

Phi(rij)= rij2·log rij

rij = |zi - zj|

[  0      Phi(r12)  …   Phi(r1n)]

K = [Phi(r21)     0    …    Phi(r2n)]

[  …      …    0 ..     …  ]

[Phi(rn1)   Phi(rn2)  …     0   ]



按上述的链接中指出



等价于



由于不知道该矩阵采用的范数,所以用第二钟方法验证,

但是在计算二阶偏导数(der f2)/(der x2)的时候遇到困难,由于f的值是一个向量,

而x是该向量的x轴坐标,得到的结果:

lim

delta(x) -> 0

(m11·(xn+ delta(x)) + m12·yn + m13 + Ki:Cx ,m21·(xn+ delta(x)) + m22·yn + m23 + Ki:Cy) - (m11·xn + m12·yn + m13 + Ki:Cx ,m21·xn + m22·yn + m23 + Ki:Cy)

(der f)/(der x) =









              

                                                      delta(x)

            

lim

delta(x) -> 0

=

(m11·delta(x), m21·delta(x))

                            delta(x)



  = (m11, m21)



同理得到:

(der f)/(der y) = (m12,m22)

不知道以上结果是否正确,这些一阶偏导数均为常矢量,和x,y无关,

接下来如何求其二阶偏导数 (der ((der f)/(der x))/der x)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-5-16 05:53:05 | 显示全部楼层
还是发图片吧...
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-5-18 23:15:32 | 显示全部楼层
上面计算偏导数时的Ki:Cx是不正确的,借助与Matlab,得到:
Etps=symsum(8*symsum((CX(i)*(XX(i)-XX(n))*(YY(i)-YY(n)))/(XX(i)^2+YY(i)^2+XX(n)^2+YY(n)^2-2*XX(i)*XX(n)-2*YY(i)*YY(n)),i,1,M)^2+8*symsum((CY(i)*(XX(i)-XX(n))*(YY(i)-YY(n)))/(XX(i)^2+YY(i)^2+XX(n)^2+YY(n)^2-2*XX(i)*XX(n)-2*YY(i)*YY(n)),i,1,M)^2+symsum(CX(i)+log((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)*CX(i)+(2*CX(i)*(XX(i)-XX(n))*(2*XX(i)-2*XX(n)))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)-(3*CX(i)*(XX(i)-XX(n))^2*((XX(i)-XX(n))^2/2+(YY(i)-YY(n))^2/2))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)^2,i,1,M)^2+symsum(CY(i)+log((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)*CY(i)+(2*CY(i)*(XX(i)-XX(n))*(2*XX(i)-2*XX(n)))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)-(3*CY(i)*(XX(i)-XX(n))^2*((XX(i)-XX(n))^2/2+(YY(i)-YY(n))^2/2))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)^2,i,1,M)^2+symsum(CX(i)+log((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)*CX(i)+(2*CX(i)*(YY(i)-YY(n))*(2*YY(i)-2*YY(n)))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)-(3*CX(i)*(YY(i)-YY(n))^2*((XX(i)-XX(n))^2/2+(YY(i)-YY(n))^2/2))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)^2,i,1,M)^2+symsum(CY(i)+log((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)*CY(i)+(2*CY(i)*(YY(i)-YY(n))*(2*YY(i)-2*YY(n)))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)-(3*CY(i)*(YY(i)-YY(n))^2*((XX(i)-XX(n))^2/2+(YY(i)-YY(n))^2/2))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)^2,i,1,M)^2,n,1,i-1)+symsum(8*symsum((CX(i)*(XX(i)-XX(n))*(YY(i)-YY(n)))/(XX(i)^2+YY(i)^2+XX(n)^2+YY(n)^2-2*XX(i)*XX(n)-2*YY(i)*YY(n)),i,1,M)^2+8*symsum((CY(i)*(XX(i)-XX(n))*(YY(i)-YY(n)))/(XX(i)^2+YY(i)^2+XX(n)^2+YY(n)^2-2*XX(i)*XX(n)-2*YY(i)*YY(n)),i,1,M)^2+symsum(CX(i)+log((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)*CX(i)+(2*CX(i)*(XX(i)-XX(n))*(2*XX(i)-2*XX(n)))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)-(3*CX(i)*(XX(i)-XX(n))^2*((XX(i)-XX(n))^2/2+(YY(i)-YY(n))^2/2))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)^2,i,1,M)^2+symsum(CY(i)+log((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)*CY(i)+(2*CY(i)*(XX(i)-XX(n))*(2*XX(i)-2*XX(n)))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)-(3*CY(i)*(XX(i)-XX(n))^2*((XX(i)-XX(n))^2/2+(YY(i)-YY(n))^2/2))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)^2,i,1,M)^2+symsum(CX(i)+log((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)*CX(i)+(2*CX(i)*(YY(i)-YY(n))*(2*YY(i)-2*YY(n)))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)-(3*CX(i)*(YY(i)-YY(n))^2*((XX(i)-XX(n))^2/2+(YY(i)-YY(n))^2/2))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)^2,i,1,M)^2+symsum(CY(i)+log((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)*CY(i)+(2*CY(i)*(YY(i)-YY(n))*(2*YY(i)-2*YY(n)))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)-(3*CY(i)*(YY(i)-YY(n))^2*((XX(i)-XX(n))^2/2+(YY(i)-YY(n))^2/2))/((XX(i)-XX(n))^2+(YY(i)-YY(n))^2)^2,i,1,M)^2,n,i+1,M)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-5-19 07:18:33 | 显示全部楼层
以下是对每个对应点求和,不知道能不能代替反常积分?
i != n
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-5-21 12:15:27 | 显示全部楼层
楼主研究这个好像有什么图谋,能说说吗
不介意我这样问吧。呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-5-21 21:42:48 | 显示全部楼层
额..是有的,可以用来对需要变形的形状进行插值,提高形状匹配的准确率,比如识别验证码之类的(干坏事,呵呵),但是也不局限于此,还可以用于医学图像配准,地质建模等
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-5-21 21:56:39 | 显示全部楼层
杯具啊,单求一个全局最优的仿射矩阵就难倒我了
以下是Mathematica的代码,貌似求那个最高次数为2次的多项式很复杂

In[2]:= m = {{m11, m21, 0}, {m12, m22, 0}, {m13, m23, 1}}

Out[2]= {{m11, m21, 0}, {m12, m22, 0}, {m13, m23, 1}}

In[3]:= a = Table[{ax[i], ay[i], 1}, {i, 1, 4}]

Out[3]= {{ax[1], ay[1], 1}, {ax[2], ay[2], 1}, {ax[3], ay[3], 1}, {ax[4], ay[4], 1}}

In[4]:= b = Table[{bx[i], by[i], 1}, {i, 1, 4}]

Out[4]= {{bx[1], by[1], 1}, {bx[2], by[2], 1}, {bx[3], by[3], 1}, {bx[4], by[4], 1}}


In[5]:= s = 0

Out[5]= 0

In[6]:= Norm[a.m - b, 2]^2

Out[6]= Out[6]



In[7]:= For[i = 1, i < 5, i++,
s += (m13 + m11 ax[i] + m12 ay[i] - bx[i])^2 + (m23 + m21 ax[i] + m22 ay[i] -
       by[i])^2]

In[8]:= s

Out[8]= (m13 + m11 ax[1] + m12 ay[1] - bx[1])^2 + (m13 + m11 ax[2] + m12 ay[2] -
   bx[2])^2 + (m13 + m11 ax[3] + m12 ay[3] - bx[3])^2 + (m13 + m11 ax[4] +
   m12 ay[4] - bx[4])^2 + (m23 + m21 ax[1] + m22 ay[1] - by[1])^2 + (m23 +
   m21 ax[2] + m22 ay[2] - by[2])^2 + (m23 + m21 ax[3] + m22 ay[3] -
   by[3])^2 + (m23 + m21 ax[4] + m22 ay[4] - by[4])^2





In[9]:= Minimize[s, {m11, m21, m12, m22, m13, m23}]

During evaluation of In[15]:=

No more memory available.
Mathematica kernel has shut down.
Try quitting other applications and then retry.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-19 16:35 , Processed in 0.068546 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表