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之间的不匹配一样糟糕.在这种情况下,您可以采用相对于和ab的距离(称为Bray Curtis归一化或归一化欧几里德度量) )
D = abs(A - B) ./ (A + B)
S = 1 - D / max(D(:));
如果两个矩阵在同一位置都有零值像素,则会遇到问题.同样,有几种可能性:你可以用一个小的正值α(例如α= 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的相关矩阵,这两个输入在对角线中具有最大值.