How to find the boundaries of the local maxima

2 Ansichten (letzte 30 Tage)
MINA
MINA am 26 Feb. 2018
Kommentiert: Image Analyst am 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.

Antworten (2)

Image Analyst
Image Analyst am 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 Kommentar
MINA
MINA am 26 Feb. 2018
I am not sure how I should use imreconstruct(). Could you please help me in that?

Melden Sie sich an, um zu kommentieren.


MINA
MINA am 26 Feb. 2018
Bearbeitet: MINA am 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 Kommentar
Image Analyst
Image Analyst am 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?

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by