matlabimage-processingstatisticshistogramdistribution

Matlab Image Histogram Analysis: how do I test for an underlying bimodal distribution?


I am working with image processing in MATLAB. I have two different images whose histogram plots are as shown below.

Image 1:

enter image description here

and Image 2:

enter image description here

I have multiple images like those and the only distinguishing(separating) features is that some have single peak and others have two peaks.

In other words some can be thresholded (to generate good results) while others cannot. Is there any way I can separate the two images? Are there any functions that do so in MATLAB or any reference code that will help?

The function used is imhist()


Solution

  • If you mean "distinguish" by "separate", then yes: The property you describe is called bimodality, i.e. you have 2 peaks that can be seperated by one threshold. So your question is actually "how do I test for an underlying bimodal distribution?"

    One option to do this programmatically is Binning. This is not the most robust method but the easiest. It might work, it might not.

    Kernel Smoothing is probably the more robust solution. You basically shift and scale a certain function (e.g. Gaussian) to fit the data. This can be done with histfit in matlab.

    There's more solutions for this problem which you can research for yourself since you now know the terms needed. Be aware though that your problem is not a trivial one if you want to do it properly.