Considérez ces deux images en niveaux de gris:
La première image montre un modèle de rivière sinueuse. La deuxième image montre un bruit aléatoire.
Je cherche une mesure statistique que je peux utiliser pour déterminer s'il est probable qu'une image montre un modèle de rivière.
L'image de la rivière a deux zones: rivière = valeur élevée et partout ailleurs = valeur faible.
Le résultat est que l'histogramme est bimodal:
Par conséquent, une image avec un motif de rivière devrait avoir une variance élevée.
Cependant, l'image aléatoire ci-dessus fait de même:
River_var = 0.0269, Random_var = 0.0310
D'autre part, l'image aléatoire a une faible continuité spatiale, alors que l'image de la rivière a une continuité spatiale élevée, ce qui est clairement montré dans le variogramme expérimental:
De la même manière que la variance "résume" l'histogramme en un seul nombre, je recherche une mesure de continuité spatiale qui "résume" le variogramme expérimental.
Je veux que cette mesure "punisse" la semi-variance élevée aux petits retards plus durement qu'aux gros retards, j'ai donc trouvé:
Si j'additionne seulement de lag = 1 à 15, j'obtiens:
River_svar = 0.0228, Random_svar = 0.0488
Je pense qu'une image de rivière devrait avoir une variance élevée, mais une variance spatiale faible, donc j'introduis un rapport de variance:
Le résultat est:
River_ratio = 1.1816, Random_ratio = 0.6337
Mon idée est d'utiliser ce ratio comme critère de décision pour savoir si une image est une image de rivière ou non; rapport élevé (par exemple> 1) = rivière.
Des idées sur la façon dont je peux améliorer les choses?
Merci d'avance pour n'importe quelle réponse!
EDIT: Suivant les conseils de whuber et Gschneider, voici le Morans I des deux images calculées avec une matrice de poids à distance inverse de 15x15 en utilisant la fonction Matlab de Felix Hebeler :
J'ai besoin de résumer les résultats en un seul numéro pour chaque image. Selon wikipedia: "Les valeurs vont de -1 (indiquant une dispersion parfaite) à +1 (corrélation parfaite). Une valeur nulle indique un modèle spatial aléatoire." Si je résume le carré du Morans I pour tous les pixels, j'obtiens:
River_sumSqM = 654.9283, Random_sumSqM = 50.0785
Il y a une énorme différence ici, donc Morans semble être une très bonne mesure de continuité spatiale :-).
Et voici un histogramme de cette valeur pour 20 000 permutations de l'image de la rivière:
De toute évidence, la valeur River_sumSqM (654.9283) est peu probable et l'image de la rivière n'est donc pas spatialement aléatoire.
Réponses:
Je pensais qu'un flou gaussien agit comme un filtre passe-bas laissant la structure à grande échelle derrière et supprimant les composants à nombre d'onde élevé.
Vous pouvez également regarder l'échelle des ondelettes nécessaires pour générer l'image. Si toutes les informations vivent dans les ondelettes à petite échelle, ce n'est probablement pas la rivière.
Vous pourriez envisager une sorte d'auto-corrélation d'une ligne de la rivière avec elle-même. Donc, si vous avez pris une rangée de pixels de la rivière, même avec du bruit, et trouvé la fonction de corrélation croisée avec la ligne suivante, vous pouvez à la fois trouver l'emplacement et la valeur du pic. Cette valeur va être beaucoup plus élevée que ce que vous obtiendrez avec le bruit aléatoire. Une colonne de pixels ne produira pas beaucoup de signal à moins que vous ne choisissiez quelque chose de la région où se trouve la rivière.
http://en.wikipedia.org/wiki/Gaussian_blur
http://en.wikipedia.org/wiki/Cross-correlation
la source
C'est un peu tard, mais je ne résiste pas à une suggestion et une observation.
Premièrement, je pense qu'une approche plus "de traitement d'image" peut être mieux adaptée qu'une analyse histogramme / variogramme. Je dirais que la suggestion de "lissage" d'EngrStudent est sur la bonne voie, mais la partie "flou" est contre-productive. Ce qu'il faut, c'est un lisseur préservant les bords , comme un filtre bilatéral ou un filtre médian . Ils sont plus sophistiqués que les filtres à moyenne mobile, car ils sont nécessairement non linéaires .
Voici une démonstration de ce que je veux dire. Vous trouverez ci-dessous deux images rapprochant vos deux scénarios, ainsi que leurs histogrammes. (Les images sont chacune 100 par 100, avec des intensités normalisées).
Pour chacune de ces images, j'applique ensuite un filtre médian 5 x 5 15 fois *, qui adoucit les motifs tout en préservant les bords . Les résultats sont montrés plus bas.
(* L'utilisation d'un filtre plus grand maintiendrait toujours le contraste net sur les bords, mais lisserait leur position.)
Notez comment l'image "rivière" a toujours un histogramme bimodal, mais elle est maintenant bien séparée en 2 composantes *. Pendant ce temps, l'image "bruit blanc" a toujours un histogramme unimodal à un seul composant. (* Facilement seuillé via, par exemple la méthode d'Otsu , pour créer un masque et finaliser la segmentation.)
(Désolé pour la diatribe ... ma formation était en tant que géomorphologue, à l'origine)
la source
Une suggestion qui peut être un gain rapide (ou qui peut ne pas fonctionner du tout, mais qui peut facilement être éliminée) - avez-vous essayé de regarder le rapport de la moyenne à la variance des histogrammes d'intensité d'image?
Prenez l'image de bruit aléatoire. En supposant qu'il est généré par des photons émis de manière aléatoire (ou similaire) frappant une caméra, et que chaque pixel est également susceptible d'être touché, et que vous avez les lectures brutes (c'est-à-dire que les valeurs ne sont pas redimensionnées ou sont redimensionnées de manière connue, vous pouvez annuler) , alors le nombre de lectures dans chaque pixel doit être distribué par poisson; vous comptez le nombre d'événements (photons frappant un pixel) qui se produisent dans une période de temps fixe (temps d'exposition) plusieurs fois (sur tous les pixels).
Dans le cas où il y a une rivière de deux valeurs d'intensité différentes, vous avez un mélange de deux distributions de poisson.
Un moyen très rapide de tester une image pourrait alors consister à examiner le rapport de la moyenne à la variance des intensités. Pour une distribution de poisson, la moyenne sera approximativement égale à la variance. Pour un mélange de deux distributions de poisson, la variance sera supérieure à la moyenne. Vous finirez par avoir besoin de tester le rapport des deux par rapport à un certain seuil prédéfini.
C'est très grossier. Mais si cela fonctionne, vous pourrez calculer les statistiques suffisantes nécessaires en un seul passage sur chaque pixel de votre image :)
la source