Computes region adjacency graph of a labeled 2D or 3D image.
Two regions are considered as neighbor if they are separated by a small number of pixel in the horizontal or vertical direction, as well as depth direction for 3D images.
The result is a N*2 array, containing 2 indices for each couple of neighbor regions.
usage:
ADJ = imRAG(IMG);
ADJ has the format [LBL1 LBL2], LBL1 and LBL2 being vertical arrays the same size.
LBL1 is given in ascending order, LBL2 is given in ascending order for each LBL1. Ex :
[1 2]
[1 3]
[1 4]
[2 3]
[2 5]
[3 4]
Alternative syntax:
[NODES, ADJ] = imRAG(IMG);
Return two arrays: the first one is a [N*2] array containing centroids of the N labeled region, and ADJ is the adjacency previously described.
For 3D images, the node array is [N*3].
The algorithm proceed in scanning each line (horizontal, vertical, and in z-direction for 3D images), and by detection transitions in the labels. A background gap of width 1 pixel/voxel is assumed to exist between regions. It is possible to specify different gaps:
ADJ = imRAG(IMG, GAP);
* gap = 0 if regions are contiguous (no background),
* gap = 1, when considering the result of a watershed, for example
* gap > 1 if regions are separated by thick background (some neignborhoods can be missed)
David Legland (2021). Region Adjacency Graph (RAG) (https://www.mathworks.com/matlabcentral/fileexchange/16938-region-adjacency-graph-rag), MATLAB Central File Exchange. Retrieved .
Inspired: Microscopy Image Browser (MIB), Microscopy Image Browser 2 (MIB2)
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Create scripts with code, output, and formatted text in a single executable document.
Works well.
Good tool
Great tool, thank you for sharing!
helpfull to compute adjacency relationship between 3D regions segmented via watershed methods.
Hi Kerem,
I have submitted an updated version, in which you can control the "gap" between two regions. If you chosse a gap value equal to 2, it should fit your needs (hopefully !).
Any help for the extension to 8-connected neighborhood of this implementation is appreciated.
Very useful.
Very efficient. Some example of use would be of interest, for accessing data.