2010-05-06 4 views
1

J'utilise imtophat pour appliquer un filtre à un tableau m x n. Je trouve alors le maximum local en utilisant imextendedmax(). Je reçois la plupart des 0 partout sauf pour 1 dans les zones générales où je m'attends à un maximum local. La chose étrange est, cependant, que je ne reçois pas un maximum local. Au lieu de cela dans ces endroits que je reçois de nombreux éléments avec des 1 tels queTransformation de maxima étendu dans Matlab

00011100000 
00111111000 
00000110000 

encore les valeurs il y a près mais pas égaux donc j'attendre qu'il y aurait un qui est supérieur à tout le reste. Je me demande donc:

  1. si cela est un bug et comment je pourrais corriger
  2. comment vous choisiriez choisir l'élément de ces 1 de la plus haute valeur.

Répondre

2

a) Ceci est une caractéristique. Vous appelez imextendedmax avec deux arguments d'entrée. La seconde entrée est une mesure de la façon dont les différents pixels peuvent être compris dans le maximum et être toujours comptés pour le maximum étendu.

b) Vous pouvez choisir les éléments ayant la valeur la plus élevée en utilisant max sur les pixels du groupe.

%# for testing, create a mask with two groups and an image of corresponding size 
msk = repmat([00011100000;... 
00111111000;... 
00000110000],1,2); 

img = rand(size(msk)); 
imSize = size(img); 

%# to find groups of connected ones, apply connected component labeling 
cc = bwconncomp(msk); 

%# loop through all groups and find the location of the maximum intensity pixel 
%# You could do this without loop, but it would be much less readable 
maxCoordList = zeros(cc.NumObjects,2); 
for i = 1:cc.numObjects 
    %# read intensities corresponding to group 
    int = img(cc.PixelIdxList{i}); 

    %# find which pixel is brightest 
    [maxInt,maxIdx] = max(int); 

    %# maxIdx indexes into PixelIdxList, which indexes into the image. 
    %# convert to [x,y] 
    maxCoordList = ind2sub(imSize,cc.PixelIdxList{i}(maxIdx)); 
end 

%# confirm by plotting 
figure 
imshow(img,[]) 
hold on 
plot(maxCoordList(:,2),maxCoordList(:,1),'.r')