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