【问题标题】:Image clustering - problem with matlab function图像聚类 - matlab 函数的问题
【发布时间】:2011-07-18 18:03:19
【问题描述】:

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

变量说明如下

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**ijx-y- 坐标子>

Um是包含[Umij]的矩阵

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

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

【问题讨论】:

    标签: matlab image-processing cluster-analysis


    【解决方案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,:) 中,.* 运算符用作替换双和的快捷方式。换句话说,他们不是单独对每个矩阵乘积求和(其本身就是乘法的和),而是首先执行所有必要的乘法,然后求和。 (我希望这是有道理的)。您可以使用一些基本的矩阵代数来证明所有这些工作。

    【讨论】:

      猜你喜欢
      • 2013-10-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多