我希望在使用Matlab将PCA应用于图像后获得最高系数。为此,我将把像素矩阵转换为数组,然后对其进行排序。怎么做?或者是否有更好的方法来排序最高的10个PCA系数?
示例代码如下。
close all
clear all
imIdx = 8;
cropCorner = [100 100];
resampleRatio = 1.25;
N = 2; % window size
M = 64; % block size
im = imread('kodim06.png');
[H,W,~] = size(im);
for k = 1:length(resampleRatio)
r = resampleRatio(k);
cropWidth = floor(M/r);
img = double(im(cropCorner(1):cropCorner(1)+cropWidth-1, ...
cropCorner(2):cropCorner(2)+cropWidth-1));
%img = imresize(img,[M M],'bilinear');
pmap = emresample(img,N,'verbose');
fmap = fft2c(pmap);
% display p-map
figure;
subplot(131)
imshow(img,[])
subplot(132)
imshow(pmap,[])
subplot(133)
imshow(abs(rmcenter(fmap)),[]);
filename = sprintf('F:/Project/ImgPro/EM/im%i_r%.2f.png',imIdx,(r-1)*100);
imwrite(fmap,filename)
%disp(fmap);
coeff = pca(fmap);
eigval = eig(coeff);
disp(eigval);
end
答案 0 :(得分:0)
coeff
的每列包含一个主成分的系数,列按成分方差的降序排列。
所以,在
之后coeff = pca(fmap);
您可以简单地保留coeff
的前10列以获得10个最大的主要组件:
coeff = coeff(:,1:10);