Thanks everyone. I knew it would be trivial, but I don't have much experience with manipulating 2D arrays.
Determine adjacent points in a logical matrix
3 ビュー (過去 30 日間)
古いコメントを表示
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.
採用された回答
John D'Errico
2023 年 9 月 4 日
編集済み: John D'Errico
2023 年 9 月 4 日
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 件のコメント
John D'Errico
2023 年 9 月 4 日
Thank you. I hope the explanations made sense. The important point is to think of conv and conv2 when you have problems like this.
その他の回答 (1 件)
DGM
2023 年 9 月 4 日
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!