An edge outline segmentation suggestion please
2 views (last 30 days)
Stelios Fanourakis on 8 Aug 2019
Here is a very interesting and challenging task you may contribute to help me.
I have an ultrasound image with annotations (see attached image [annotations.png]) that I'd like to auto segment/outline.
I also attach another image using the method of P. Pandey [https://gitlab.com/prashp/shadow-peak-us-bone-seg/blob/master/readme.md (Pandeysuccess.png)] and a similar approach using a simple Sobel edge command [Sobeledge.png].
As you can see from the annotated image, there are two regions that are interested to me. An upper curve line that is an interface between human skin and a standoff material and the lower small curve which is the bone boundary.
A satisfactory result comes from both Pandey technique and edge technique. However, the edge technique comes with a lot of noise and speckle dots.
I'd like to ask a way to reproduce Pandey's technique somehow, maybe by using a more simplistic method, to get those two outlines as they appear in the image of Pandey's technique. If those two lines at some points come disconnected with gaps, there must be a way, e.g. by using a dijkstra algorithm to find the shortest path between the dots and pieces in order to form a seamless line by connecting them and of course discard all the speckle noise and blobs smaller than a minimum size, to clear the image and isolate those two lines as can be seen by Pandey's technique.
Finally, I am looking for a method to place a contour upon the white pixels of the image. The white pixels of the image ideally should be only the standoff outline and bone outline. All others should be eliminated. The contour lines upon the white pixels should be closed in order to form a 3d reconstructed object.
Any advice from the Matlab experts should be appreciated more than enough.
Subhadeep Koley on 20 Aug 2019
You can return all edges that are stronger than a specified threshold to minimize the effect of noise and speckle dots. Refer the documentation here.
Iedge=edge(rgb2gray(I),'canny',[0.1 0.3]);% define high and low threshold here
Now, to place a contour upon the detected edge use the following code,
Iedge_rgb = cat(3,Iedge,Iedge,Iedge);