How to find the boundaries of the local maxima

3 visualizzazioni (ultimi 30 giorni)
MINA
MINA il 26 Feb 2018
Commentato: Image Analyst il 27 Feb 2018
I have a 2D image (matrix). I have found the local maxima of this image. Now I want to define the boundaries around each local maxima in such a way that I want all the pixels around the local maxima that has the value above 85% of the maximum. Any help would be appreciated.

Risposte (2)

Image Analyst
Image Analyst il 26 Feb 2018
I think you're going to have to use imreconstruct(). Use the maxima binary image as the marker for a mask that is thresholded at 85% of it. If you don't use imreconstruct then you risk getting values selected by the threshold that aren't local maxima. Attach your original image, and local max image if you need more help. How did you get the local maxima? Did you use imregionalmax() or imdilate()?
  1 Commento
MINA
MINA il 26 Feb 2018
I am not sure how I should use imreconstruct(). Could you please help me in that?

Accedi per commentare.


MINA
MINA il 26 Feb 2018
Modificato: MINA il 26 Feb 2018
This is the function I wrote to find the local maxima. Once I find those maxima I have to draw a boundary around them and take only those pixels which are at least 85% of the peak. And then As you see some peaks are very close to each other so I have to merge them and make only one peak (if they have some shared pixels within their boundaries).
function [location]= Mfind_peak_2D( Image,varargin )
%This function finds the Peak in 2D
p = inputParser;
addParamValue(p,'max_n_loc_max',5);
addParamValue(p,'nb_size',3);
addParamValue(p,'thre',0);
addParamValue(p,'drop',0.15);
parse(p,varargin{:});
p=p.Results;
if sum(isnan(Image(:)))>0
Image(isnan(Image))=0;
end
hLocalMax = vision.LocalMaximaFinder;
hLocalMax.MaximumNumLocalMaxima = p.max_n_loc_max;
hLocalMax.NeighborhoodSize = [p.nb_size p.nb_size];
hLocalMax.Threshold = p.thre;
location = step(hLocalMax, Image);
imagesc(Image); hold on
plot(location(:,1),location(:,2),'rX')
colorbar;
end
%
  1 Commento
Image Analyst
Image Analyst il 27 Feb 2018
You want a boundary around a single pixel? OK, so I'm guessing that the 5 red x's are the local maxima pixels. So you have up to 5 maxima values. When you say 85% of the maxima, which of the 5 maxima are you talking about?
And why didn't you simply use imregionalmax() instead of all that?

Accedi per commentare.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by