matlab中两个矩阵之间的相关性
嗨matlab中两个矩阵之间的相关性,matlab,matrix,correlation,Matlab,Matrix,Correlation,嗨 我想在上面显示的两个数据集之间创建一个相关矩阵,该矩阵将忽略零的任何外观(在上面的图片中,绿色),谁知道产生平滑结果的最有效方法是什么 是否有任何相关方法可以逐点识别相似性,从而使结果具有原始矩阵的“形状” 谢谢你 注意:我没有matlab统计工具箱 2. Is there any correlation method that can identify the similarity point by point and by thus the results will have
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
取决于图像格式(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归一化或归一化欧几里德度量)
如果两个矩阵在同一位置都有零值像素,则会遇到问题。同样,也有几种可能性:你可以用一个小的正值来增加总和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
,该矩阵测量每个像素与其他像素的相关性。该矩阵在对角线中也将具有最大值(这些是方差)。然而,如果你只有两种认识,我不建议计算相关矩阵
另一个选项是测量两个图像中行或列的相似性。然后得到相关系数的向量1xm
但是,我不知道如何从两个大小为
mxm
的输入中计算出大小为mxm
的相关矩阵,这两个输入在对角线中具有最大值。要获得一般相关系数,我将使用corr2
:
r=corr2(A,B)
返回相关系数r
在A和B之间,其中A和B是相同的矩阵或向量
尺寸。r是一个标量双精度
大致上,我认为这只是在计算
corr(A(:),B(:)
我不确定我是否在跟踪你。你说的“忽略任何零的出现”是什么意思?如果你看看上面的图片,除了图片左上角的“零”之外,这些零都是分散在周围的,我不想从用于相关性的数据中排除它们。1中结果的维数应该是多少。?我这样问是因为一个相关性通常需要两个向量,并从中计算出一个标量。@Mehrwolf,结果应该是一个m*m矩阵,其对角线系数最高。m是列
1. I would like to create a correlation matrix [...]