2010-04-23 14 views
1

J'ai une question spécifique et une question plus générale ... Pourquoi imextendedmax() ne donne pas par exemple 9 dans A (3,3) comme un max? Généralement ... quel est le meilleur moyen de trouver plusieurs maxes/pics? La bonne chose à propos de max max est qu'il permet un seuil où probablement tout ce qui est sous ce seuil n'est pas compté alors que le max imregional et le findpeaks sont plus généraux, moins efficaces.boîte à outils de traitement d'image dans matlab

A = round (rand (5) * 10)

A =

1  5  4  8  3 
5  1  8  8  3 
9  3  9  1  2 
9  7  3  5  9 
6  3  5  6  8 

B = imextendedmax (A, 8)

B =

1  1  1  1  1 
1  1  1  1  1 
1  1  1  1  1 
1  1  1  1  1 
1  1  1  1  1 

Répondre

0

D'après ce que je comprends, imextendedmax(A,x) premier supprime tous les maxima qui sont x ou moins au-dessus de leur environnement, et il appelle imregionalmax.

Ainsi, vous voulez appeler

imextendedmax(A,1) 

ans = 

    0  0  0  1  0 
    0  0  1  1  0 
    1  0  1  0  0 
    1  0  0  0  1 
    0  0  0  0  1 

Si vous voulez trouver tous les domaines qui sont x ou plus dans une image, vous pouvez aussi simplement appeler (pour x = 8)

x = 8; 
A >= x 
ans = 

     0  0  0  1  0 
     0  0  1  1  0 
     1  0  1  0  0 
     1  0  0  0  1 
     0  0  0  0  1 

Ainsi, le seuil de l'image.

En fin de compte, tout se résume à ce que vous voulez faire. Si vous considérez votre image comme ayant des pics et des vallées, voulez-vous trouver l'emplacement des pics? Ensuite, utilisez imdilate pour la détection maximale locale (voir ci-dessous). Voulez-vous savoir quelles parties des sommets et des vallées resteraient sèches si vous remplissiez tout à un niveau x avec de l'eau? Ensuite, utilisez A>x etc.


EDIT

Toutes mes excuses sur findpeaks. J'ai supposé que vous l'avez mentionné parce que cela a fonctionné pour 2D et je n'ai pas vérifié. Pour la détection maximale locale, d'une manière très agréable est d'utiliser imdilate comme ce

locMaxMask = A > imdilate(A,[1,1,1;1,0,1;1,1,1]); 

L'appel à imdilate remplace chaque pixel avec le maximum de ses environs. Ainsi, la comparaison donnera tous les pixels qui ont une valeur plus élevée que les 8 pixels environnants. A propos du bruit: Il y a eu une question similaire à la vôtre, donc je vous relie au answer que j'ai donné là.