主要内容

使用Procrustes分析比较手写形状

这个例子展示了如何使用Procrustes分析来比较两个手写的数字3。视觉和分析地探索强迫大小和反射变化的影响。

加载和显示原始数据

输入两个手写数字3的地标数据。

A = [11 39;17 42;25 42;25 40;23 36;19 35;30 34;35 29;...30 20;18 19];B = [15 31;20 37;30 40;29 35;25 29;29 31;31 31;35 20;...29 10;25 18];

创建X而且Y一个而且B、移动B移到一边,使每个形状更明显。

X = a;Y = B + repmat([25 0], 10,1);

画出图形,用字母标出地标点。图中的线条将点连接起来,以指示每个形状的绘制路径。

情节(X (: 1) X (:, 2),的r -, y (:,1), y (:,2),“b -”);文本(X (: 1) X (:, 2), (“abcdefghij”)') text(Y(:,1), Y(:,2),(“abcdefghij”)”)传说('X =目标'“Y =比较”“位置”“本身”xlim([0 65]);55 ylim ([0]);

图中包含一个轴对象。axis对象包含22个类型为line, text的对象。这些对象表示X =目标,Y =比较。

计算最佳变换

使用Procrustes分析来寻找使地标数据点之间距离最小化的转换。

[d,Z,tr] = procrustes(X,Y);

函数的输出为d(一种标准化的不相似度测量),Z(转换后的地标矩阵),以及tr(包含字段的计算转换的结构数组Tb,c对应于变换方程)

想象一下变换后的形状,Z,使用蓝色虚线。

情节(X (: 1) X (:, 2),的r -, y (:,1), y (:,2),“b -”...Z(: 1)、Z (:, 2),”乙:“);文本(X (: 1) X (:, 2), (“abcdefghij”)') text(Y(:,1), Y(:,2),(“abcdefghij”)') text(Z(:,1), Z(:,2),(“abcdefghij”)”)传说('X =目标'“Y =比较”...'Z =变形'“位置”“西南”xlim([0 65]);55 ylim ([0]);

图中包含一个轴对象。axis对象包含33个类型为line, text的对象。这些对象表示X =目标,Y =比较,Z =转换。

检查两个形状的相似性

使用两个不同的数值,即不相似度量d还有缩放方法b,以评估目标形状与变换后形状的相似度。

不相似度测量d给出一个0到1之间的数字,描述目标形状和转换后的形状之间的差值。接近0的值表示更相似的形状,而接近1的值表示不相似。

d
D = 0.1502

的小值d在这种情况下,说明这两个形状是相似的。普罗克汝斯忒斯计算d通过比较集合点之间的偏差平方和与原始点的列均值的偏差平方和。

分子= sum(sum(X-Z).^2))
分子= 166.5321
分母= sum(sum(bsxfun(@minus,X,mean(X)).^2)))
分母= 1.1085e+03
比率=分子/分母
比率= 0.1502

所得到的度量d与形状大小的尺度无关,只考虑地标数据的相似性。

检查形状的大小相似度。

tr.b
Ans = 0.9291

前面图中目标的大小和比较形状看起来相似。的价值强化了这种视觉印象b= % 0.93,这意味着最好的转换结果是将比较形状缩小了0.93(仅7%)。

限制转换的形式

探索手动调整缩放和反射系数的影响。

b等于1 (set“缩放”To false)用于检查目标和转换后的图形在大小上的不同程度。

ds = procrustes(X,Y,“缩放”假)
Ds = 0.1552

在本例中,设置的比例的计算值增加d只有0.0049,这进一步支持了两个数字3在大小上的相金宝app似性。更大的增长d会显示出更大的尺寸差异。

这个例子只需要旋转,而不需要反射来对齐形状。你可以通过观察矩阵的行列式来证明这一点T在这个分析中是1。

依据(tr.T)
Ans = 1.0000

如果你需要变换中的反射,行列式T是1。您可以按照下面的方法将反射强制到转换中。

[dr,Zr,trr] = procrustes(X,Y,“反射”,真正的);博士
Dr = 0.8130

d值急剧增大,说明强制反射导致地标点转换较差。转换后的图形显示了类似的结果。

情节(X (: 1) X (:, 2),的r -, y (:,1), y (:,2),“b -”...锆(:1)、锆(:,2),”乙:“);文本(X (: 1) X (:, 2), (“abcdefghij”)') text(Y(:,1), Y(:,2),(“abcdefghij”)') text(Zr(:,1), Zr(:,2),(“abcdefghij”)”)传说('X =目标'“Y =比较”...'Z =变形'“位置”“西南”xlim([0 65]);55 ylim ([0]);

图中包含一个轴对象。axis对象包含33个类型为line, text的对象。这些对象表示X =目标,Y =比较,Z =转换。

标志性数据点现在离目标数据点更远了。变换后的3现在是目标3的一个不受欢迎的镜像。

如果将转换后的形状上下翻转,似乎形状可能会更好地匹配。然而,翻转形状会使转换变得更糟糕,因为地标数据点将离它们的目标对应点更远。从这个例子中,很明显手动调整缩放和反射参数通常不是最优的。

另请参阅