views:

243

answers:

1

How do you go about figuring our multiple max in a 2D image where the max aren't necessarily all the same height? I have found that the imregionalmax(), imextendedmax(), and findpeaks() functions aren't necessarily that helpful because they give many local max that are really just maxes within the background noise. I tried

bw=array>imdilate(array,[1 1 1; 1 0 1; 1 1 1])

but that also is kind of limited for the same reasons (same thing with expanding the matrix that it uses). I'd definitely appreciate some help..

+1  A: 

Noise is indeed a problem in image analysis where you try and find intensity maxima. As with any other task in image analysis, you can improve the final results with pre-processing of the image and post-processing of the results of the algorithm.

As pre-processing step before the local maximum detection, you de-noise the image, i.e. you filter the image to suppress some of the spurious maxima (imfilter is a function you may want to look into).

The de-noising never gets rid of all the noise, so when you do the local maximum detection, you still pick up a number of unwanted maxima. Thus, you apply some kind of heuristic to distinguish between 'good' and 'bad' local maxima. For example, you can apply an intensity threshold, below which you discard all maxima.

You find a nice review of this here: Smal et al. Quantitative comparison of spot detection methods in fluorescence microscopy. IEEE Trans Med Imaging (2010) vol. 29 (2) pp. 282-301

Jonas