将矩阵转换为数组

时间:2018-04-27 05:36:06

标签: matlab

我希望在使用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    

1 个答案:

答案 0 :(得分:0)

来自documentation to pca

  

coeff的每列包含一个主成分的系数,列按成分方差的降序排列。

所以,在

之后
coeff = pca(fmap);

您可以简单地保留coeff的前10列以获得10个最大的主要组件:

coeff = coeff(:,1:10);