77 lines
No EOL
3.2 KiB
Matlab
77 lines
No EOL
3.2 KiB
Matlab
function [ SimilarityMatrix ] = similarity_neighbor_grid_further( x, side, types, dist)
|
|
%SIMILARITYNEIGHBOR Summary of this function goes here
|
|
% Detailed explanation goes here
|
|
|
|
% this assumes that the patch is laid out with first column, then second
|
|
% column, ... final column (column major)
|
|
|
|
% dist = 2;
|
|
SimilarityMatrix = eye(side*side);
|
|
|
|
% types - 1 - horizontal, 2 - vertical, 3 - diagonal (bl-tr), 4 -
|
|
% diagonal (br - tl)
|
|
for t=1:numel(types)
|
|
|
|
if(types(t) == 1)
|
|
|
|
% for horizontal we want to link both neighbours
|
|
% (which are offset from the points by height)
|
|
i = 1:(side*side-side*dist);
|
|
% create the neighboring links for i
|
|
SimilarityMatrix(sub2ind([side^2, side^2], i, i+side*dist)) = 1;
|
|
SimilarityMatrix(sub2ind([side^2, side^2], i+side*dist, i)) = 1;
|
|
|
|
% visualise
|
|
% vis = zeros(height, width)
|
|
% [i, j] = ind2sub([sz, sz], find(SimilarityMatrix(:)==1));
|
|
% i_2 = mod(i-1, width)+1;
|
|
% j_2 = floor((j-1)/height)+1;
|
|
% vis(sub2ind([width, height], i_2, j_2) = 1;
|
|
% imagesc(vis);
|
|
end
|
|
if(types(t) == 2)
|
|
|
|
% for vertical we want to link both neighbours except at edge
|
|
% cases which are mod(y_loc,side) = 0 as they are at the edges
|
|
i = 1:side*side;
|
|
i_to_rem =[];
|
|
for s=1:dist
|
|
i_to_rem = union(i_to_rem, i(mod(i+s-1, side) == 0));
|
|
end
|
|
i_both = setdiff(i, i_to_rem);
|
|
% create the neighboring links for i
|
|
SimilarityMatrix(sub2ind([side^2, side^2], i_both+dist, i_both)) = 1;
|
|
SimilarityMatrix(sub2ind([side^2, side^2], i_both, i_both+dist)) = 1;
|
|
|
|
end
|
|
if(types(t) == 3)
|
|
|
|
% for diagonal to top right, and bottom left don't use right most column
|
|
i = 1:(side^2)-dist * side;
|
|
i_to_rem = [];
|
|
for s=1:dist
|
|
i_to_rem = union(i_to_rem,i(mod(i-s, side) == 0));
|
|
end
|
|
i_both = setdiff(i, i_to_rem);
|
|
% create the neighboring links for i
|
|
SimilarityMatrix(sub2ind([side^2, side^2], i_both+dist*side-dist, i_both)) = 1;
|
|
SimilarityMatrix(sub2ind([side^2, side^2], i_both, i_both+dist*side-dist)) = 1;
|
|
end
|
|
if(types(t) == 4)
|
|
|
|
% for diagonal to top left, and bottom right don't use right most column
|
|
i = 1:(side^2)-dist*side;
|
|
i_to_rem = [];
|
|
for s=1:dist
|
|
i_to_rem = union(i_to_rem, i(mod(i+s-1, side) == 0));
|
|
end
|
|
i_both = setdiff(i, i_to_rem);
|
|
% create the neighboring links for i
|
|
SimilarityMatrix(sub2ind([side^2, side^2], i_both+dist*side+dist, i_both)) = 1;
|
|
SimilarityMatrix(sub2ind([side^2, side^2], i_both, i_both+dist*side+ dist)) = 1;
|
|
|
|
end
|
|
|
|
end
|
|
assert(isequal(SimilarityMatrix, SimilarityMatrix'));
|
|
end |