您好之間,
我想創建上面給出的兩個數據集之間的相關性矩陣將忽略零的任何外觀(在上面的圖片,綠色),任何人都知道什麼是最有效的方式,會產生一個平穩的結果?
是否有任何相關方法可以逐點識別相似度,從而使結果具有原始矩陣的「形狀」?
感謝ü
注:我沒有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
取決於您的圖像格式(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
。
但是,我不知道如何從尺寸爲m x m
的兩個輸入中計算尺寸爲m x m
的相關矩陣,該尺寸在對角線上具有最大值。
tnx,我會與你提供的東西一起工作,看看它是如何發展的 – jarhead
要得到一個通用的相關係數,我會使用corr2
。 From the docs:
r = corr2(A,B)
返回A和B,其中A和B是矩陣或相同 大小的向量之間的相關係數r 。 r是一個標量雙。
粗略地說,我相信這只是計算corr(A(:), B(:))
。
我不確定我是否關注你。你是什麼意思「_ignore zeros_的任何外觀」? –
如果你會看看上面的圖片,除了圖片左上方的「零」,零點都是零點,我不想從用於相關的數據中排除它們 – jarhead
尺寸應該是多少1的結果?我在問,因爲相關通常需要兩個向量並從中計算單個標量。 – Mehrwolf