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

jar*_*ead 5 matlab matrix correlation

在此输入图像描述

嗨,

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

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

感谢你

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

Meh*_*olf 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?
Run Code Online (Sandbox Code Playgroud)

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

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

S = 1 - abs(A - B) / Q;
Run Code Online (Sandbox Code Playgroud)

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

S(A == 0 | B == 0) = 0;
Run Code Online (Sandbox Code Playgroud)

你也可以说它的相似性是未定义的,并将相似性设置为NaN:

S(A == 0 | B == 0) = nan;
Run Code Online (Sandbox Code Playgroud)

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

D = abs(A - B) ./ (A + B)
S = 1 - D / max(D(:));
Run Code Online (Sandbox Code Playgroud)

如果两个矩阵在同一位置都有零值像素,则会遇到问题.同样,有几种可能性:你可以用一个小的正值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(:));
Run Code Online (Sandbox Code Playgroud)

你看,有很多可能性.

1. I would like to create a correlation matrix [...]
Run Code Online (Sandbox Code Playgroud)

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

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

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