Browse Source

Init mySpectralClustering

master
Apostolos Fanakis 6 years ago
parent
commit
7b3a3df01c
  1. 36
      Assignment_2/Image2Graph.m~
  2. 15
      Assignment_2/mySpectralClustering.m

36
Assignment_2/Image2Graph.m~

@ -1,36 +0,0 @@
function myAffinityMat = Image2Graph (imIn)
%Image2Graph produces a graph, in the form of a matrix, from an image
% Usage myAffinityMat = Image2Graph (imIn), where:
% Inputs
% - imIn is the input image
% Output
% - myAffinityMat is the graph produced
imageWidth = size(imIn, 2);
imageHeight = size(imIn, 1);
imageChannels = size(imIn, 3);
%myAffinityMat = 1 / exp(norm(imIn(:, :)));
myAffinityMat = zeros(imageWidth * imageHeight, imageWidth * imageHeight);
for row = 1:imageHeight
for column = 1:imageWidth
diff = imIn - imIn(row, column, :);
%diffT = permute(diff, [2 1 3]);
dist = sum(diff .^ 2, 3) .^ 0.5;
% dist = zeros(imageWidth, imageHeight);
% for channel = 1:imageChannels
% dist = dist + sqrt(sum (diff(:, :, channel) * diffT(:, :, channel)));
% dist = dist + sqrt(diff(:, :, channel) * diffT(:, :, channel));
% end
som = 1 ./ exp(dist);
som2 = reshape(som, 1, []);
som2 = reshape(som.', 1, []);
myAffinityMat((row - 1) * imageWidth + column, :) = reshape((1 ./ exp(dist), 1, []);
end
end
end

15
Assignment_2/mySpectralClustering.m

@ -0,0 +1,15 @@
function clusterIdx = mySpectralClustering (anAffinityMat, k)
%Implementation of spectral clustering
% Usage clusterIdx = mySpectralClustering (anAffinityMat, k), where:
% Inputs
% - anAffinityMat is a rectagular, symmetrical affinity matrix
% representation of an image
% - k is the desired number of clusters
% Output
% - clusterIdx is a vector storing the cluster Id of each node
L = diag(sum(anAffinityMat, 2)) - anAffinityMat;
[eigenvectorsMatrix, ~] = eigs(L, k, 'sm');
clusterIdx = kmeans(eigenvectorsMatrix, k);
end
Loading…
Cancel
Save