5

在此处输入图像描述

你好,

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

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

感谢你

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

4

2 回答 2

6
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。这归结为测量两个标量a和的相似性b。让我们假设这些标量来自区间[0, Q],这Q取决于您的图像格式(Q == 1或者Q == 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相关系数向量。

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

于 2012-09-05T07:05:53.637 回答
0

为了得到一个一般的相关系数,我会使用corr2. 从文档

r = corr2(A,B)

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

粗略地说,我相信这只是计算corr(A(:), B(:))

于 2015-05-15T17:01:52.540 回答