1

我使用的是FastICA MATLAB toolbox如何將新圖像投影到ICA空間?

我的培訓圖像在tImage其中每行是一個觀察。矩陣是30x35200,30個特徵長度(像素)的臉部圖像。

當我運行[icasig, A, W] = fastICA(tImage)時,輸出icasig是30x35200,A是30x30和W是30x30。我所學到的是icasig是投影圖像,因此不需要進一步處理。

現在我正在準備測試圖像並將其投影到W上。我的難處是尺寸。我的測試圖像是1x35200(一個具有35200功能的圖像)。我該如何投影W這是30x30?

+0

你能提供一個指向工具箱的鏈接嗎?我的第一個直覺是你可能需要轉置你的tImage矩陣,但我想檢查文檔。 – Cecilia

+0

對不起,以便延遲響應... 我正在使用fastICA,鏈接是 –

+0

對不起,以便延遲響應... 我正在使用fastICA,鏈接是 https://research.ics.aalto.fi/ica/fastica/code /dlcode.shtml –

回答

0

我認爲你誤解了icasig矩陣。

什麼是輸出? icasigtImage,而不是的投影行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; 

Comparison of Reconstruction to Original

您可以將差分圖像的重建是原來的近似版本中看到的,但人眼,這兩個圖像看起來完全相同。

因此,您可以使用A作爲tImage的低維立場。當你想象的icasig行圖像,你可視化組件

ICA爲基礎面臨

。您可能已經看到Eigenface可視化。這些圖像可以被認爲是ICAfaces。

這裏的第一9

ICAfaces

圖像這些面表示其中圖像改變最常用的功能。

投影測試圖片

對於新的測試圖像,我們想弄清楚多少各組分的混合在一起的投影。基本上,我們想知道它在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; 

結果看起來很像出來原貌重建導致

Test image reconstruction

我用mldivide線性解算器,但你也可以使用linsolve,或任何你喜歡的線性解算器。

爲什麼不使用簡單的投影?

在我的這個答案的初稿中,我建議將測試圖像投影到icasig上。我在想如何做reprojection with PCA,但我不確定是否可以將相同的技術轉移到ICA,因爲這些組件不是正交的。

在一個小實驗中,結果不如使用線性求解器。這是我使用的投影代碼。

A_test = icasig * testImage'; 
A_test = A_test ./ sqrt(sum(icasig.^2, 2)); 

Projection comparison

什麼是W代表呢?

我相信這是用於盲源分離。這是ICA的一個非常不同的應用。我不是這項技術的專家,所以我建議在Wikipedia上閱讀。在本文中,他們還使用W來指代分離或解混矩陣。

該術語令人困惑,因爲in PCAW通常用於組件,其中icasig在此處使用。

+0

謝謝你的回覆,80%去吧,但仍然混淆在投影... 你可以請舉例與我的變量... 謝謝 –

+0

謝謝你的回覆,80%明白了,但仍然混淆投影......你可以請示例與我的變量......謝謝 –

+0

@Affan我回來完成並提供更多的例子。祝你好運。 – Cecilia