# Determine adjacent points in a logical matrix

5 views (last 30 days)

Show older comments

I have a 2-D matrix of logical values, eg

000000000

010000000

000000000

000000000

000000000

000001000

000000000

000000000

100000000

How can I create a similar sized matrix with True in all the locations adjacent to the Trues in the first matrix, eg

111000000

101000000

111000000

000000000

000011100

000010100

000011100

110000000

010000000

If a location is assigned True from two or more adjacent locations, then it should be True.

### Accepted Answer

John D'Errico
on 4 Sep 2023

Edited: John D'Errico
on 4 Sep 2023

Trivial. Learn to think in terms of MATLAB operations. I've added another 1 in there, just to make it clear what the problem is.

A = [0 0 0 0 0 0 0 0 0

0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 1 1 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 0];

For example, what does this do? Does it get you close to what you want?

B = conv2(A,ones(3),'same')

Close, but we can fix that.

B = conv2(A,[1 1 1;1 0 1;1 1 1],'same')

Next, we need to be careful, as two elements near each other can create something bigger than 1 due to the convolution. This next will correct that.

B = conv2(A,[1 1 1;1 0 1;1 1 1],'same') ~= 0

The ones are adjacent to each other in the original array, and that meant that it filled in the ones in the result. We can zap them out too.

B = (conv2(A,[1 1 1;1 0 1;1 1 1],'same') ~= 0) & (~A)

##### 2 Comments

John D'Errico
on 4 Sep 2023

### More Answers (1)

DGM
on 4 Sep 2023

This can also be done succinctly with image processing tools:

% a logical array

A = [0 0 0 0 0 0 0 0 0

0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 1 1 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 0];

A = logical(A);

% output is a logical array

B = imdilate(A,ones(3)) & ~A

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!