matlabimage-processingimage-segmentationboundarymathematical-morphology

Efficient segment boundary marking after segmentation of an image


One can mark the boundary of a binary image by bwboundaries function of MATLAB.

What should be done for obtaining boundaries of all segments as a binary image?

I have segmented an image and want to know if there is a way to mark boundaries between each neighbouring segment without applying morphological operations on each segment.

I have added images to illustrate what i want to do. Actually i want to obtain a binary image that keeps pink boundary marker pixels between all segments. Thus, I can overlay them with original image by the help of imoverlay function of Steve Eddins.

Random colored labeling of segmentation result:

enter image description here

Roughly-marked pink boundaries between segments:

enter image description here


Solution

  • You can find the region boundaries using a range filter, which finds the intensity range within each pixel's neighborhood. This takes advantage of the fact that the label matrix only has non-zero range at the region boundaries.

    im = imread('https://i.sstatic.net/qPiA3.png');
    boundaries = rangefilt(im,ones(3)) > 0;
    imoverlay(label2rgb(im),boundaries,[0 0 0]);
    

    These edges are also two pixels wide. Actually, I think the edges have to be two pixels wide; otherwise the regions will "lose" pixels to the border non-uniformly.