Search code examples
matlabimage-processingphotoshopmatlab-figureadobe-illustrator

Fill an outline which is incomplete


Consider that I have a colored image like this in which the outline is not complete (There are gaps between lines). I want to be able to fill the area between the lines with one color or another. This actually is a binary image which I got after applying canny edge detector on a corresponding gray scale image.

I tried first dilating the image and then eroding it, but the result is not good enough. I want to be able to preserve the thickness of the root

Any help would be greatly appreciated

Original Image Original Image

Image after edge detection and some manual removal of pixels Image after edge detection and some manual removal of pixels

Using the information in the edge image, I thought I would try to extract pixels from the original image of a certain color. For every white pixel in the edited image, I used a search space in the original image along the same horizontal line. I used different thresholds for R, G and B and I ended up with this

Using pixel info from original and edited image


Solution

  • I'll add a third approach now that I have seen the image. It looks like most of the information is in the green channel.

    Green channel image green channel image

    This image gives you a decent result if you simply apply a threshold. Thresholded image with a somewhat arbitrary threshold thresholded image

    You can then either clean this image up by itself or use your edge image. To clean it up with the edge image you produced remove any white pixels that are more than a certain distance from one of your detected edges (create a Euclidean distance map from your edge image and use that to set any white pixels greater than a certain distance from an edge to black).

    If you are still collecting images you may want to try to position the camera in a way to avoid the bottom of the jar (or whatever this is).