我認爲你誤解了icasig
矩陣。
什麼是輸出? icasig
是tImage
,而不是的投影行tImage
的估計獨立分量。這些與新投影空間的基本矢量相似(它們不是真正的基本矢量,因爲它們不是正交的,但它們的行爲與基本矢量相同)。我們可以通過一些實驗來證實這一點。我們使用A
來重建第一張圖片。 A
是的投影行tImage
,通常稱爲混合矩陣。 A
的列指定每個組件對每個圖像有多少貢獻。
(我用我的代碼樣本Face Recognition Project圖像)
figure;
subplot(1, 3, 1);
imshow(reshape(tImage(1, :), 128, 128));
title('First Image');
reconstruction = A(1, :)* icasig;
subplot(1, 3, 2);
imshow(reshape(reconstruction, 128, 128));
title('Reconstructed Image');
subplot(1, 3, 3);
imagesc(reshape(abs(tImage(1, :) - reconstruction), 128, 128));
title('Difference');
colorbar;
您可以將差分圖像的重建是原來的近似版本中看到的,但人眼,這兩個圖像看起來完全相同。
因此,您可以使用A
作爲tImage
的低維立場。當你想象的icasig
行圖像,你可視化組件
ICA爲基礎面臨
。您可能已經看到Eigenface可視化。這些圖像可以被認爲是ICAfaces。
這裏的第一9
圖像這些面表示其中圖像改變最常用的功能。
投影測試圖片
對於新的測試圖像,我們想弄清楚多少各組分的混合在一起的投影。基本上,我們想知道它在A
矩陣中的行會是什麼樣子。
從A
重建第一圖像,我們做了以下
reconstruction = A(1, :) * icasig;
現在,A
的測試圖像是未知的,但如果我們對重建替代測試圖像,我們可以解決A
使用線性求解器。
A_test = icasig' \ testImage'; %I had to transpose things so that the dimensions matched
figure;
subplot(1, 3, 1);
imshow(reshape(testImage, 128, 128));
title('Test Image');
reconstruction = A_test' * icasig;
subplot(1, 3, 2);
imshow(reshape(reconstruction, 128, 128));
title('Reconstructed Image');
subplot(1, 3, 3);
imagesc(reshape(abs(testImage - reconstruction), 128, 128));
title('Difference');
colorbar;
結果看起來很像出來原貌重建導致
我用mldivide線性解算器,但你也可以使用linsolve,或任何你喜歡的線性解算器。
爲什麼不使用簡單的投影?
在我的這個答案的初稿中,我建議將測試圖像投影到icasig
上。我在想如何做reprojection with PCA,但我不確定是否可以將相同的技術轉移到ICA,因爲這些組件不是正交的。
在一個小實驗中,結果不如使用線性求解器。這是我使用的投影代碼。
A_test = icasig * testImage';
A_test = A_test ./ sqrt(sum(icasig.^2, 2));
什麼是W代表呢?
我相信這是用於盲源分離。這是ICA的一個非常不同的應用。我不是這項技術的專家,所以我建議在Wikipedia上閱讀。在本文中,他們還使用W
來指代分離或解混矩陣。
該術語令人困惑,因爲in PCAW
通常用於組件,其中icasig
在此處使用。
你能提供一個指向工具箱的鏈接嗎?我的第一個直覺是你可能需要轉置你的tImage矩陣,但我想檢查文檔。 – Cecilia
對不起,以便延遲響應... 我正在使用fastICA,鏈接是 –
對不起,以便延遲響應... 我正在使用fastICA,鏈接是 https://research.ics.aalto.fi/ica/fastica/code /dlcode.shtml –