How to get connected component from adjacency matrix
显示 更早的评论
The adjacency matrix is already known.
what I want to do is showed in the picture below.
I don't care about the order of the vertex.

采纳的回答
更多回答(1 个)
Image Analyst
2016-8-13
编辑:Image Analyst
2016-8-13
Use bwlabel() and regionprops:
[labeledMatrix, numberOfRegions] = bwlabel(A);
props = regionprops(labeledMatrix, 'PixelList');
labeledMatrix gives an ID number to each connected region. props has all the information on all the elements in each connected region. You can get indexes (rows and columns), values, areas, etc. depending on what you ask regionprops() for.
7 个评论
lingfeng zhou
2016-8-13
Image Analyst
2016-8-13
Yeah, I got it. I'm not sure you understand so I'll do the full blown demo with both of your cases so that you can see it tells you all the nodes that are connected:
% Example 1
adjacencyMatrix = false(6);
adjacencyMatrix(2, 3:4) = true;
adjacencyMatrix(3:4, 2) = true;
adjacencyMatrix(5, 6) = true;
adjacencyMatrix(6, 5) = true
[labeledMatrix, numberOfRegions] = bwlabel(adjacencyMatrix)
props = regionprops(labeledMatrix, 'PixelList');
for regions = 1 : numberOfRegions
fprintf('All these nodes are connected: ');
fprintf('%d ', unique(props(regions).PixelList));
fprintf('\n');
end
% Example 2
adjacencyMatrix = false(6);
adjacencyMatrix(1, 3) = true;
adjacencyMatrix(2, 3:4) = true;
adjacencyMatrix(3, [1,2,4]) = true;
adjacencyMatrix(4, 2:3) = true;
adjacencyMatrix(5, 6) = true;
adjacencyMatrix(6, 5) = true
[labeledMatrix, numberOfRegions] = bwlabel(adjacencyMatrix)
props = regionprops(labeledMatrix, 'PixelList');
for regions = 1 : numberOfRegions
fprintf('All these nodes are connected: ');
fprintf('%d ', unique(props(regions).PixelList));
fprintf('\n');
end
In the command window you'll see this for example 1:
adjacencyMatrix =
0 0 0 0 0 0
0 0 1 1 0 0
0 1 0 0 0 0
0 1 0 0 0 0
0 0 0 0 0 1
0 0 0 0 1 0
labeledMatrix =
0 0 0 0 0 0
0 0 1 1 0 0
0 1 0 0 0 0
0 1 0 0 0 0
0 0 0 0 0 2
0 0 0 0 2 0
numberOfRegions =
2
All these nodes are connected: 2 3 4
All these nodes are connected: 5 6
and this for example 2:
adjacencyMatrix =
0 0 1 0 0 0
0 0 1 1 0 0
1 1 0 1 0 0
0 1 1 0 0 0
0 0 0 0 0 1
0 0 0 0 1 0
labeledMatrix =
0 0 1 0 0 0
0 0 1 1 0 0
1 1 0 1 0 0
0 1 1 0 0 0
0 0 0 0 0 2
0 0 0 0 2 0
numberOfRegions =
2
All these nodes are connected: 1 2 3 4
All these nodes are connected: 5 6
Isn't that what you want to know? Which nodes are all part of the same group? I thought it was. Correct me if I'm wrong.
By the way, bwlabel does not ignore single isolated nodes, but you can remove those in advance if you want with the bwmorph()'s "Clean" option.
lingfeng zhou
2016-8-14
lingfeng zhou
2016-8-14
Image Analyst
2016-8-14
You can't get that with regionprops. You'll have to look at graph/node/network functions. I'm not familiar with those.
lingfeng zhou
2016-8-14
Image Analyst
2016-8-14
Unaccept my Answer and see if Guillaume's gives you the answer and if it does, accept his answer to give him credit.
类别
在 帮助中心 和 File Exchange 中查找有关 Graph and Network Algorithms 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


