How can I link edges in crystal boundaries
Mostra commenti meno recenti
Dear all,
I am trying to determine the size of crystals from images. In order to determine the crystal sizes with the "bwboundaries" function, I applied prior to this step a few edge detection steps (e.g. canny) as well as some thresholding steps. The attached image shows the final image from which i would like to extract the crystal sizes with bwboundaries. Thereby the crystal contours are displayed in white and the background in black. The 'noholes" option in bwboundaries was chosen to erase any unwanted holes in the crystal-agglomerates. However, since some of the contours of some crystals are not closed, bwboundaries does not fill out the holes in the crystals and therefore the crystal is not detected. I wonder how to link the not connected edges together in order to detect their area as well? Dont worry about the images which are intercepting with the image boundary, they will be negelcted anyways.
Thank you very much for your help in advance!!!

10 Commenti
Image Analyst
il 30 Dic 2020
I don't see any crystals that I know of. I see a red square with a red spot inside it. Is that what you're talking about? I don't see any boundaries or contours, either closed or not closed.
Frederik Link
il 31 Dic 2020
Star Strider
il 31 Dic 2020
All I see is a blank rectangle.
There is some kind of problem with the .jpeg and nothing shows on either Firefox or Edge.
Frederik Link
il 31 Dic 2020
Image Analyst
il 31 Dic 2020
I see a binary image where some items are hollow and some are solid. Have those been segmented properly? Which do you want to extract, the hollow or the solid blobs? If not, then attach the original gray scale version.
Frederik Link
il 31 Dic 2020
KALYAN ACHARJYA
il 2 Gen 2021
Have you tried, something like invese way of Hit-and-Miss Transform?
Frederik Link
il 2 Gen 2021
Image Analyst
il 2 Gen 2021
Modificato: Image Analyst
il 2 Gen 2021
So let's be clear. Do you want
- only the hollow outlines, but filled in (and not the solid blobs)
- only the solid blobs (not the outlines)
- both the solid blobs plus the outline blobs (filled in)
??? Which case is it? Sounds like you want just case 1. Is that true? Or do you want case 3?
You can try bwconvhull() but I think you'd be better off with a better segmentation algorithm than trying to fix a bad one.
And what do you plan on doing with the blobs, once you have segmented out the blobs of your choice?
Frederik Link
il 4 Gen 2021
Risposte (1)
Sanchari
il 21 Mag 2024
Hello Frederik,
I understand that you’re trying to determine the size of crystals from an image where the crystal contours are displayed in white against a black background. However, some contours are not fully connected, which is causing issues with the ‘bwboundaries’ function in MATLAB when it tries to detect their area.
A possible solution could be to consider applying morphological operations such as ‘dilation’ followed by ‘erosion’ (also known as ‘closing’) to close the gaps in the contours. This process can help connect nearby edges and create a continuous boundary that can be detected by “bwboundaries”.
Here’s a sample code snippet in MATLAB:
%Assuming BW is your binary image as attached
BW = imread("crystals.jpeg");
se = strel('disk',3);
BW_closed = imclose(BW, se);
BW_dilated = imdilate(BW_closed, se);
BW_filled = imfill(BW_closed, 'holes');
imshow(BW_filled);
This code will perform a ‘closing’ operation on the image, which is a dilation followed by an erosion. The ‘disk’ structuring element with a radius of 3 pixels is used here, but you can adjust this based on the size of the gaps in your contours.
Output:

Do remember to consider the following:
- Parameter Tuning: The choice of structuring element size in morphological operations (strel) significantly affects the result. You might need to experiment with different sizes and shapes to find the best fit for your images.
- Image Quality: The effectiveness of these techniques can be influenced by the quality and resolution of your images. Preprocessing steps like noise reduction might be necessary.
- Object Separation: If dilating merges separate crystals, you might need more sophisticated segmentation techniques, such as watershed segmentation, to separate them properly.
Please refer to the following references to know further about:
- bwboundaries (MathWorks Documentation): https://www.mathworks.com/help/images/ref/bwboundaries.html?searchHighlight=bwboundaries&s_tid=srchtitle_support_results_1_bwboundaries
- imclose (MathWorks Documentation): https://www.mathworks.com/help/images/ref/imclose.html
- morphologicl operations (MathWorks Documentation): https://www.mathworks.com/help/images/morphological-dilation-and-erosion.html
- Detecting a cell using image segmentation (MathWorks Documentation Examples): https://www.mathworks.com/help/images/detecting-a-cell-using-image-segmentation.html
- Watershed segmentation (MathWorks Documentation): https://www.mathworks.com/help/images/ref/watershed.html
- Marker-controlled watershed segmentation: https://www.mathworks.com/help/images/marker-controlled-watershed-segmentation.html?searchHighlight=watershed%20segmentation&s_tid=srchtitle_support_results_1_watershed%2520segmentation
- Separate segmentation operations (ML Answer): https://www.mathworks.com/matlabcentral/answers/165022-when-working-with-an-image-and-filling-in-gaps-do-you-only-choose-one-imerode-imdilate-imopen-i?s_tid=answers_rc1-2_p2_MLT
Hope this helps!
Categorie
Scopri di più su Crystals in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
