Alternative Segmentation Techniques Other Than Watershed For Soil Particles In Images


Answer :

You could try using Connected Components with Stats already implemented as cv2.connectedComponentsWithStats to perform component labeling. Using your binary image as input, here's the false-color image:

enter image description here

The centroid of each object can be found in centroid parameter and other information such as area can be found in the status variable returned from cv2.connectedComponentsWithStats. Here's the image labeled with the area of each polygon. You could filter using a minimum threshold area to only keep larger polygons

enter image description here

Code

import cv2 import numpy as np  # Load image, Gaussian blur, grayscale, Otsu's threshold image = cv2.imread('2.jpg') blur = cv2.GaussianBlur(image, (3,3), 0) gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY) thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]  # Perform connected component labeling n_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(thresh, connectivity=4)  # Create false color image and color background black colors = np.random.randint(0, 255, size=(n_labels, 3), dtype=np.uint8) colors[0] = [0, 0, 0]  # for cosmetic reason we want the background black false_colors = colors[labels]  # Label area of each polygon false_colors_area = false_colors.copy() for i, centroid in enumerate(centroids[1:], start=1):     area = stats[i, 4]     cv2.putText(false_colors_area, str(area), (int(centroid[0]), int(centroid[1])), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 1)  cv2.imshow('thresh', thresh) cv2.imshow('false_colors', false_colors) cv2.imshow('false_colors_area', false_colors_area) cv2.waitKey() 

I used U-Net for another application, and your case is very similar to what U-Net do. You can find more information here. But generally, it is a convolutional neural network for medical image segmentation.

enter image description here

To start using U-Net, you can find a pre-trained model and apply it on your images and see the result.


Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable