Guest User

Untitled

a guest
May 22nd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. % generate data
  2. tempdisk = strel('disk',922/2);
  3. tempdisk = double(repmat((1+sqrt(-1)).*tempdisk.Neighborhood,[1 1 15]));
  4. tempnoise = (rand(921,921,15)+sqrt(-1).*rand(921,921,15))./10;
  5. tempim1 = double(imresize(mean(imread('cameraman.tif'),3),[921,921]));
  6. tempim1 = repmat(tempim1./max(tempim1(:)),[1 1 15]);
  7. tempim2 = double(rgb2hsv(imread('fabric.png')));
  8. tempim2 = imresize(tempim2(:,:,1),[921,921]);
  9. tempim2 = repmat(tempim2./max(tempim2(:)),[1 1 15]);
  10. sin1 = repmat(permute(sin(2.*pi.*(0:14)./15),[1 3 2]),[921 921 1]);
  11. cdat = (sin1.*tempim1.*exp(-sqrt(-1).*2.*pi.*sin1.*(tempim2.^2)).*tempdisk+tempnoise);
  12.  
  13. %this is what the mean data looks like
  14. meanm = mean(abs(cdat),3);
  15. meanp = angle(mean(cdat,3));
  16. figure; subplot(1,2,1); imshow(meanm,[]); title('mean magnitude'); subplot(1,2,2); imshow(meanp,[]); title('mean phase')
  17.  
  18. %get all pixel vectors in a single matrix
  19. cvect = reshape(permute(cdat, [3,1,2]), [15, 921*921]);
  20. %k means and eigs dont accept complex, so convert to real here?
  21. cvectT = [real(cvect);imag(cvect)]';
  22.  
  23. %lets say 10000 by 10000 matrices are still ok
  24. nvox = 10000;
  25. nslab = floor(length(cvectT)/nvox);
  26. nrest = rem(length(cvectT), nvox);
  27.  
  28. % spectral clusetring according to http://ai.stanford.edu/~ang/papers/nips01-spectral.pdf
  29. keig = 50;%how many eigenvectors needed? more is better
  30. affinity_sigma = 1;% i dont understand how to calculate this either
  31. tic
  32. for islab = (nslab+1):-1:1;
  33. islab/nslab
  34. toc
  35. if islab>nslab
  36. voxrange = (1:nrest) + ((islab-1)*nvox);;
  37. else
  38. voxrange = (1:nvox) + ((islab-1)*nvox);
  39. end
  40. Aff = exp( -squareform(pdist(cvectT(voxrange,:))).^2/(2*affinity_sigma^2) ); % affinity matrix
  41. Dsq = sparse(size(Aff,1),size(Aff,2)); %degree matrix
  42. for idiag=1:size(Aff,1)
  43. Dsq(idiag,idiag) = sum(Aff(idiag,:))^(1/2);
  44. end
  45. Lap = Dsq * Aff * Dsq; %normalize affinity matrix
  46. [eigVectors(voxrange,1:keig), eigValues] = eigs(Lap, keig); %eigenvectors of normalized aff mat
  47. normEigVectors(voxrange,1:keig) = eigVectors(voxrange,1:keig)./repmat(sqrt(sum(abs(eigVectors(voxrange,1:keig)).^2,2)), [1 keig]); %normalize rows of eigen vectors, normr only works on real numbers
  48. [idx,C,sumd,D] = kmeans([real(normEigVectors(voxrange,1:keig)),imag(normEigVectors(voxrange,1:keig))], 5); %k means on normalized eigenvecotrs
  49.  
  50. idxval(voxrange) = idx;
  51. end
  52. idxim = reshape(idxval, [1280, 1280]);
  53. figure; imshow(idxim,[])
  54. toc
Add Comment
Please, Sign In to add comment