Apostolos Fanakis
6 years ago
2 changed files with 15 additions and 36 deletions
@ -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 |
@ -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…
Reference in new issue