2011-03-19 55 views
0

我正在写一个关于图像识别和聚类的项目。在发布这是我的项目的基础有这个等式图像聚类 - matlab函数的问题

enter image description here

变量描述如下

RJ给出 - 是一个旋转矩阵第j个 集群

t_j - 是第j个的平移向量 集群

p * ij - 是来自第j个的第i个点 集群

X_I - 是从图像

我有写这个功能有点问题,第i个点,所以我问出版物的作者,如果他能分担我的源代码。下面是我得到

ddx=D.x-Q.translation(1); 
ddy=D.y-Q.translation(2); 
st=sin(Q.theta); ct=cos(Q.theta); R=[ct -st; st ct]; % rotation matrix 
qq=R*[ppx0; ppy0]; 
qqd2=sum(qq.*qq,1); 
Q.scale=sum((ddx.*qq(1,:)+ddy.*qq(2,:)).*Um)/sum(qqd2.*Um); 

这里D.xD.y是数据点

Q.translation(矢量),Q.scale的坐标,并Q.theta是变换参数

ppx0ppy0是在x-y-坐标* p ** ij

Um是含有矩阵[Ù IJ]

但是我有很难与理解这种解决方案。首先,我不明白为什么他使用的不是矩阵乘法(运营商*)是什么数组乘法(运营商.*)更似乎他只需要一个/第一点p*

我希望有人能够帮我试试这个源代码。在此先感谢

回答

1

它看起来像ppx0ppy0不是坐标,而是矢量或坐标。这样一来,

R*[ppx0; ppy0] = 
[ct -st ; st ct] * [x_0 x_1 ... x_N-1 ; y_0 y_1 ... y_N-1] 

因此qq是一个2×N个载体,就像[ppx0; ppy0]

qqd2=sum(qq.*qq,1)中,使用.*运算符,因为实际上是对矩阵的每个值进行平方以找出其后每个坐标对的平方距离。

ddx.*qq(1,:)+ddy.*qq(2,:).*运算符用作替换双和的快捷方式。换句话说,不是单独获取每个矩阵乘积的总和(其本身就是乘法的总和),它们首先执行所有必要的乘法运算,然后进行求和。 (我希望这是有道理的)。你可以用一些基本的矩阵代数来证明所有这些工作。