您好,
我想在上述两个数据集之间创建一个相关矩阵,该矩阵将忽略任何零的出现(在上图中为绿色),有没有人知道最有效的方法,可以产生平滑的结果?
是否有任何相关方法可以逐点识别相似性点,从而结果将具有原始矩阵的“形状”?
谢谢!
注:我没有matlab统计工具箱。
您好,
我想在上述两个数据集之间创建一个相关矩阵,该矩阵将忽略任何零的出现(在上图中为绿色),有没有人知道最有效的方法,可以产生平滑的结果?
是否有任何相关方法可以逐点识别相似性点,从而结果将具有原始矩阵的“形状”?
谢谢!
注:我没有matlab统计工具箱。
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?
A
和B
。这归结为测量两个标量a
和b
的相似性。假设这些标量来自区间[0, Q]
,其中Q
取决于你的图像格式(在Matlab中,Q == 1
或Q == 255
很常见)。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之间的不匹配程度一样糟糕。在这种情况下,您可以根据总和(称为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
相关矩阵。如果只是想得到一个一般的相关系数,我会使用 corr2
。文档:
r = corr2(A,B)
返回 A 和 B 之间的相关系数 r,其中 A 和 B 是相同大小的矩阵或向量。r 是标量 double。
大致上,我相信它只是计算了 corr(A(:), B(:))
。