Search code examples
imagematlabimage-processingbinary-image

matlab find peak images


I have a binary image below:

it's an image of random abstract picture, and by using matlab, what I wanna do is to detect, how many peaks does it have so I'll know that there are roughly 5 objects in it.

As you can see, there are, 5 peaks in it, so it means there are 5 objects in it.

I've tried using imregionalmax(), but I don't find it usefull, since my image already in binary image. I also tried to use regionprops('Area'), but it shows wrong number since there is no exact whitespace between each object. Thanks in advance


Solution

  • As your they are peaks, they are vertical structures. So in this particular case, you case use projection histograms (also know as histogram projection function): you make all the black pixels fall as if they were effected by gravity. Then you will find a curve of black pixels on the bottom of your image. Then you can count the number of peaks.

    Here is the algorithm:

    1. Invert the image (black is normally the absence of information)
    2. Histogram projection
    3. Closing and opening in order to clean the signal and get the final result.
    4. You can add a maxima detection to get the top of the peaks.