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