matlab中两个矩阵之间的相关性

时间:2012-09-04 04:35:53

标签: matlab matrix correlation

enter image description here

您好,

  1. 我想在上面提到的两个数据集之间创建一个相关矩阵,它将忽略任何零的出现(在上图中,绿色),任何人都知道什么是最有效的方式顺利的结果?

  2. 是否有任何相关方法可以逐点识别相似性,因此结果将具有原始矩阵的“形状”?

  3. 谢谢你

    注意:我没有matlab统计工具箱

2 个答案:

答案 0 :(得分:5)

2. Is there any correlation method that can identify the similarity point by 
   point  and by thus the results will have the "shape" of the original matrix?

让我们从你的第二点开始,因为它更清楚,你想要什么。您希望对两个图像进行逐点比较,例如AB。这可以归结为测量两个标量ab的相似度。我们假设这些标量来自[0, Q]区间,其中Q取决于您的图像格式(Q == 1Q == 255在Matlab中很常见。)

现在,最简单的距离测量是差异d = |a - b|。您可能希望将此规范化为[0, 1],并将值反转以测量相似度而不是距离。在Matlab中:

S = 1 - abs(A - B) / Q;

你提到忽略图像中的零。那么,你需要定义你期望零的相似度量。一种可能性是,只要一个像素为零,就将相似性设置为零:

S(A == 0 | B == 0) = 0;

您还可以说相似性未定义,并将相似度设置为NaN

S(A == 0 | B == 0) = nan;

当然,你也可以说10和11之间的不匹配与100和110之间的不匹配一样糟糕。在这种情况下,你可以取相对于总和a + b的距离(称为Bray Curtis归一化或归一化欧几里德度量)

D = abs(A - B) ./ (A + B)
S = 1 - D / max(D(:));

如果两个矩阵在同一位置都有零值像素,则会遇到问题。同样,有几种可能性:您可以使用小的正值alpha(例如alpha = 1e-6)来增加总和,从而防止除以零:D = abs(A - B) ./ (alpha + A + B)

另一种选择是忽略D中的无限值,并在此添加'零处理',即

D = abs(A - B) ./ (A + B)
D(A == 0 | B == 0) = nan;
S = 1 - D / max(D(:));

你知道,有很多可能性。

1. I would like to create a correlation matrix [...]

你应该明确地考虑这一点,并想出更好的计算内容。如果您的矩阵大小为m x m,则您有m^2个变量。由此您可以计算相关矩阵m^2 x m^2,该矩阵测量每个像素与每个其他像素的相关性。该矩阵在对角线中也具有最大值(这些是方差)。但是,如果您只有两个实现,我建议不要计算相关矩阵。

另一种选择是测量两个图像中行或列的相似性。然后你得到一个相关系数的向量1 x m

但是,我不知道如何从两个大小为m x m的输入计算大小为m x m的相关矩阵,该输入在对角线中具有最大值。

答案 1 :(得分:0)

要获得一般相关系数,我会使用corr2From the docs

  

r = corr2(A,B)

     

返回相关系数r   在A和B之间,其中A和B是相同的矩阵或向量   尺寸。 r是标量的双倍。

粗略地说,我认为它只是在计算corr(A(:), B(:))