图像聚类 - matlab函数的问题

时间:2011-03-19 13:17:53

标签: matlab image-processing cluster-analysis

我正在写一个关于图像识别和聚类的项目。在作为我的项目基础的出版物中有这个等式

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.scaleQ.theta是转换参数

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

Um是包含[ U m ij ]的矩阵

但是我很难理解这个解决方案。首先,我不明白为什么他使用数组乘法(运算符.*)而不是矩阵乘法(运算符*)更多似乎他只使用一个/第一个点{{1} }

我希望有人能帮我试试这个源代码。提前致谢

1 个答案:

答案 0 :(得分:1)

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

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

因此qq是一个2xN向量,就像[ppx0; ppy0]一样。

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

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