我目前正在使用PCA和ICA算法進行實驗。我現在非常自在地使用PCA來創建一組特徵臉,選擇最佳特徵臉並重建圖像,並且我還能夠使用PCA執行臉部幻覺。我希望對ICA也這樣做,但我不確定如何做到這一點。使用ICA和PCA的圖像重建
到目前爲止,我採取的步驟是,執行PCA,找到表示特徵臉的正交特徵向量。目前實驗上耶魯ORL和PIE數據庫
然後我對這些特徵向量進行的FastICA像這樣
%Perform ICA on eigenvectors transposed
%icasig = source matrix
%A denotes unknown mixing matrix
%W denotes unmixing matrix - inverse of A
%Variable R are the orthogonal eigenvectors
[icasig A W] = fastica(R');
然後我實現了ICA結構1,找到ICA係數。可以在這裏找到
http://www.sciencedirect.com/science/article/pii/S1077314203000778
算法ICA建築1只是向下滾動到第2.3.1節
%centeredMatrix is the image matrix of my training set minus the mean so here
%I take out one of the mean centered images
x = centeredMatrix(:,1);
%Calculate Independent basis images
U = W * R';
%Calculate PCA Coefficients
C = x' * R;
%Calculate ICA Coefficients
B = C * inv(W);
% plot first 16 PCA faces
figure; hold on;
for i=1:16
subplot(4,4,i);
comp = reshape(R(:,i), width, height);
imagesc(comp),colormap('gray')
title(sprintf('PCAFace #%i', i));
end
% plot first 16 ICAFaces
figure; hold on;
for i=1:16
subplot(4,4,i);
comp = reshape(U(i,:), width, height);
imshow(comp);
title(sprintf('ICAFace #%i', i));
end
我知道我能做到從PCA重建這個
%-----------------PCA Reconstruction----------
%Eigenvectors * pcaCoefficients + mean image
pcaRecon = (R * C') + mu;
pcaRecon = uint8(pcaRecon);
pcaRecon = reshape(pcaRecon,width,height);
figure, imshow(pcaRecon), title('PCA Recon');
但我不確定我將如何去做ICA重建。通過實施ICA結構1,我已經能夠進行重建,這樣做
%-----------------ICA Reconstruction----------
icaRecon = (icasig' * B') + mu;
icaRecon = uint8(icaRecon);
icaRecon = reshape(icaRecon,width,height);
figure, imshow(icaRecon), title('ICA Recon');
,但我不能確定這是否是重建一個很好的方法,它似乎並不相比,PCA是非常有效的。以上代碼在耶魯數據庫上進行了測試,該數據庫有165張圖片使用PCA我可以使用大約80個特徵臉,並且仍然可以獲得非常高質量的圖像 ,而在此處使用ICA方法時,我必須使用105-110左右才能獲得相似質量的圖像。同樣的,其中包含400個圖像,可以執行PCA,創特徵臉,然後用大約120個特徵臉重建並獲得非常高品質的圖像,而與ICA ORL數據庫,需要的組件大約380獲得了類似的提質改造
我還是ICA新手,所以還有很多需要學習的東西,但是如果可能的話,我想回答幾個問題:
1:這是我用ICA方法重建一個好方法嗎?還是有更好的方法,你會建議。我有
2:爲什麼我需要使用這麼多的組件與ICA做重建,我猜測這是我的方法有問題?
如果有人能指出我正確的方向或向我解釋一個更好的重建方法,我將非常感激。
預先感謝
編輯:從數據庫ORL
實施例的結果,比較用原有的PCA和ICA重建。使用200個本徵面完成PCA重建,使用200個IC完成ICA重建。正如你所看到的ICA重建是相當差的比較
是的,這是真的。我想也許在這種情況下,PCA會更好,因爲訓練集的面孔都是對齊的,背景也是一樣的。我認爲ICA的表現會更好,如果我有一個訓練集,其中姿勢和背景圖像的變化更大 – AdamM
我認爲選擇PCA還是ICA無關緊要:兩種情況下的關鍵特徵都是您在原始像素值上線性運行。將人臉與彼此對齊將對使用該方法的*任何*產生巨大影響。對於任何更復雜(不同姿勢等)的東西,都需要不同的特徵基礎。 Blanz和Vetter使用「流場」方法在PCA之前將臉部表示標準化,並使各種魔法成爲可能。 http://www.mpi-inf.mpg.de/~blanz – jez