To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / _FullBNT / BNT / graph / mk_2D_lattice.m @ 8:b5b38998ef3b
History | View | Annotate | Download (1.71 KB)
| 1 |
function G = mk_2D_lattice(nrows, ncols, con) |
|---|---|
| 2 |
% MK_2D_LATTICE Return adjacency matrix for nearest neighbor connected 2D lattice |
| 3 |
% G = mk_2D_lattice(nrows, ncols, con) |
| 4 |
% G(k1, k2) = 1 iff k1=(i1,j1) is a neighbor of k2=(i2,j2) |
| 5 |
% (Two pixels are neighbors if their Euclidean distance is less than r.) |
| 6 |
% Default connectivity = 4. |
| 7 |
% |
| 8 |
% WE ASSUME NO WRAP AROUND. |
| 9 |
% |
| 10 |
% This is the neighborhood as a function of con: |
| 11 |
% |
| 12 |
% con=4,r=1 con=8,r=sqrt(2) con=12,r=2 con=24,r=sqrt(8) |
| 13 |
% nn 2nd order 4th order |
| 14 |
% x x x x x x |
| 15 |
% x x x x x x x x x x x x |
| 16 |
% x o x x o x x x o x x x x o x x |
| 17 |
% x x x x x x x x x x x x |
| 18 |
% x x x x x x |
| 19 |
% |
| 20 |
% Examples: |
| 21 |
% Consider a 3x4 grid |
| 22 |
% 1 4 7 10 |
| 23 |
% 2 5 8 11 |
| 24 |
% 3 6 9 12 |
| 25 |
% |
| 26 |
% 4-connected: |
| 27 |
% G=mk_2D_lattice(3,4,4); |
| 28 |
% find(G(1,:)) = [2 4] |
| 29 |
% find(G(5,:)) = [2 4 6 8] |
| 30 |
% |
| 31 |
% 8-connected: |
| 32 |
% G=mk_2D_lattice(3,4,8); |
| 33 |
% find(G(1,:)) = [2 4 5] |
| 34 |
% find(G(5,:)) = [1 2 3 4 6 7 8 9] |
| 35 |
|
| 36 |
% meshgrid trick due to Temu Gautama (temu@neuro.kuleuven.ac.be) |
| 37 |
|
| 38 |
if nargin < 3, con = 4; end |
| 39 |
|
| 40 |
switch con, |
| 41 |
case 4, r = 1; |
| 42 |
case 8, r = sqrt(2); |
| 43 |
case 12, r = 2; |
| 44 |
case 24, r = sqrt(8); |
| 45 |
otherwise, error(['unrecognized connectivity ' num2str(con)]) |
| 46 |
end |
| 47 |
|
| 48 |
|
| 49 |
npixels = nrows*ncols; |
| 50 |
|
| 51 |
[x y]=meshgrid(1:ncols, 1:nrows); |
| 52 |
M = [x(:) y(:)]; |
| 53 |
M1 = repmat(reshape(M',[1 2 npixels]),[npixels 1 1]); |
| 54 |
M2 = repmat(M,[1 1 npixels]); |
| 55 |
%D = squeeze(sum(abs(M1-M2),2)); % Manhattan distance |
| 56 |
M3 = M1-M2; |
| 57 |
D = sqrt(squeeze(M3(:,1,:)) .^2 + squeeze(M3(:,2,:)) .^2); % Euclidean distance |
| 58 |
G = reshape(D <= r,npixels,npixels); |
| 59 |
G = setdiag(G, 0); |