Removing bordered labeled refers to removing border regions in a labeled image. A labeled image consists of distinct regions that are assigned unique labels.
A border region of a labeled image refers to regions present along the edges (boundaries) of an image.
Border regions often make it difficult to analyze an image and, in some cases, represent significant noise.
Hence, it is important to remove border regions to improve accuracy of image segmentation algorithms and to reduce the overall size of the image.
Removing Bordered Labeled in Mahotas
In Mahotas, we can use mahotas.labeled.remove_bordering() function to remove border labels from an image. It analyzes the image to check for presence of any border label. If it finds a border label, it determines the value associated with that border label.
The value of the border label is then updated to 0, to remove it from the image. Since, value 0 is associated with the background, all the border labels become part of the background.
Sometimes, a border label can be far away from the image boundary. If we want to retain these border labels, we need to specify the minimum distance between a border region and the boundary. Any border region that exceeds this distance will be retained by the function.
The mahotas.labeled.remove_bordering() function
The mahotas.labeled.remove_bordering() function takes a labeled image as an input and returns a labeled image as output without having any border regions.
The function remove borders of all sizes, hence the output image consumes significantly less space than the input image.
Syntax
Following is the basic syntax of the remove_bordering() function in mahotas −
mahotas.labeled.remove_bordering(labeled, rsize=1, out={np.empty_like(im)})
Where,
-
labeled − It is the input labeled image.
-
rsize (optional) − It determines the minimum distance that regions must have from the image boundary in order to avoid being removed (default is 1).
-
out (optional) − It specifies where to store the output image (default is an array of same size as labeled).
Example
In the following example, we are removing border regions from an image by using the mh.labeled.remove_bordering() function.
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # Loading the image image = mh.imread(''nature.jpeg'') # Converting it to grayscale image = mh.colors.rgb2gray(image) # Applying gaussian filtering image = mh.gaussian_filter(image, 4) # Thresholding the image image = image > image.mean() # Labeling the image labeled, num_objects = mh.label(image) # Removing bordering labels remove_border = mh.labeled.remove_bordering(labeled) # Creating a figure and axes for subplots fig, axes = mtplt.subplots(1, 2) # Displaying the original image axes[0].imshow(image) axes[0].set_title(''Original Image'') axes[0].set_axis_off() # Displaying the image without borders axes[1].imshow(remove_border) axes[1].set_title(''Border Removed Image'') axes[1].set_axis_off() # Adjusting spacing between subplots mtplt.tight_layout() # Showing the figures mtplt.show()
Output
Following is the output of the above code −
Removing Regions at a Specific Distance
We can also remove bordered regions that are at a specific distance, away from the image boundary. This allows us to remove any region that may have been considered as the bordered region because of its closeness to the image boundary.
In mahotas, the rsize parameter determines how far away a border region must be to be retained in the image. We need to set an integer value for this parameter and then pass it to the mh.labeled.remove_bordering() function.
For example, let’s say we have set ‘200’ as the value for rsize. Then, only the bordered regions that are at least 200 pixels away from the image boundary will be retained.
Example
In the example mentioned below, we are removing border regions that are within a specific distance of the image boundary.
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # Loading the image image = mh.imread(''sun.png'') # Converting it to grayscale image = mh.colors.rgb2gray(image) # Applying gaussian filtering image = mh.gaussian_filter(image, 4) # Thresholding the image image = image > image.mean() # Labeling the image labeled, num_objects = mh.label(image) # Removing bordering labels remove_border = mh.labeled.remove_bordering(labeled, rsize=200) # Creating a figure and axes for subplots fig, axes = mtplt.subplots(1, 2) # Displaying the original image axes[0].imshow(image) axes[0].set_title(''Original Image'') axes[0].set_axis_off() # Displaying the image without borders axes[1].imshow(remove_border) axes[1].set_title(''Border Removed Image'') axes[1].set_axis_off() # Adjusting spacing between subplots mtplt.tight_layout() # Showing the figures mtplt.show()
Output
Output of the above code is as follows −
Removing Regions from a Specific part of an Image
Another way of removing bordered regions is to remove them from a specific part of an image.
Specific parts of an image refer to a small portion of the larger image obtained by cropping the larger image.
In mahotas, to remove regions from a specific part of an image, we first identify a region of interest from the original image.
Then, we crop the identified part of the image. We then remove the border regions from this part.
For example, if we specify the values as [:800, :800], then the region will start from 0 pixel and go up to 800 pixels in both the vertical (y−axis) and horizontal (x−axis) direction.
Example
In here, we are removing bordered regions from a specific part of an image.
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # Loading the image image = mh.imread(''tree.tiff'') # Converting it to grayscale image = mh.colors.rgb2gray(image) image = image[:800, :800] # Applying gaussian filtering image = mh.gaussian_filter(image, 4) # Thresholding the image image = image > image.mean() # Labeling the image labeled, num_objects = mh.label(image) # Removing bordering labels remove_border = mh.labeled.remove_bordering(labeled) # Creating a figure and axes for subplots fig, axes = mtplt.subplots(1, 2) # Displaying the original image axes[0].imshow(image) axes[0].set_title(''Original Image'') axes[0].set_axis_off() # Displaying the image without borders axes[1].imshow(remove_border) axes[1].set_title(''Border Removed Image'') axes[1].set_axis_off() # Adjusting spacing between subplots mtplt.tight_layout() # Showing the figures mtplt.show()
Output
After executing the above code, we get the following output −