La meilleure façon de le faire (à mon avis) serait d'utiliser un buffer circulaire pour stocker vos images. Dans un buffer circulaire ou en anneau, l'élément de données le plus ancien du tableau est écrasé par l'élément le plus récent introduit dans le tableau. Les bases de la réalisation d'une telle structure sont décrites dans la courte vidéo de Mathworks. Implémentation d'un tampon circulaire simple. Pour chaque itération de votre boucle principale qui traite d'une seule image, il suffit de charger une nouvelle image dans le buffer circulaire, puis d'utiliser MATLAB s construit dans la fonction moyenne pour prendre la moyenne efficacement. Si vous devez appliquer une fonction de fenêtre aux données, puis faire une copie temporaire des cadres multiplié par la fonction de fenêtre et prendre la moyenne de la copie à chaque itération de la boucle. A répondu 6 août à 10:11 calcule une sorte de moyenne mobile pour chacun des 10 bandes sur toutes vos images. Cette ligne calcule une moyenne mobile de la valeur moyenne sur vos images: Pour les deux, vous voulez ajouter une structure de tampon qui ne conserve que les 10 dernières images. Pour simplifier, vous pouvez également tout garder en mémoire. Voici un exemple pour Yout: Changez cette ligne: (Ajouter une dimension) Et changez ceci: Ensuite, pour afficher l'utilisation Vous ferez sth. Similaire à meanvalue29 septembre, 2013 Moyenne mobile par convolution Qu'est-ce que la moyenne mobile et à quoi sert-elle? Comment la moyenne mobile se fait-elle en utilisant la convolution? La moyenne mobile est une opération simple utilisée habituellement pour supprimer le bruit d'un signal: À la moyenne des valeurs dans son voisinage. Par une formule: Ici x est l'entrée et y est le signal de sortie, tandis que la taille de la fenêtre est w, supposé être impair. La formule ci-dessus décrit une opération symétrique: les échantillons sont prélevés des deux côtés du point réel. Voici un exemple de vie réelle. Le point sur lequel la fenêtre est posée est en fait rouge. Les valeurs en dehors de x sont censées être des zéros: Pour jouer et voir les effets de la moyenne mobile, jetez un oeil à cette démonstration interactive. Comment le faire par convolution Comme vous l'avez peut-être reconnu, calculer la moyenne mobile simple est semblable à la convolution: dans les deux cas une fenêtre est glissée le long du signal et les éléments dans la fenêtre sont résumés. Donc, essayez de faire la même chose en utilisant la convolution. Utilisez les paramètres suivants: La sortie souhaitée est: Comme première approche, essayons ce que nous obtenons en convolvant le signal x par le noyau k suivant: La sortie est exactement trois fois plus grande que la valeur attendue. On peut également voir que les valeurs de sortie sont le résumé des trois éléments de la fenêtre. C'est parce que pendant la convolution la fenêtre est glissée le long, tous les éléments en elle sont multipliés par un, puis résumés: yk 1 cdot x 1 cdot x 1 cdot x Pour obtenir les valeurs désirées de y. La sortie sera divisée par 3: Par une formule comprenant la division: Mais ne serait-il pas optimal de faire la division au cours de la convolution Voici l'idée en réarrangant l'équation: Nous utiliserons donc le k noyau suivant: Obtenir la sortie souhaitée: En général: si nous voulons faire la moyenne mobile par convolution ayant une taille de fenêtre de w. Nous allons utiliser le noyau k suivant: Une fonction simple faisant la moyenne mobile est: Un exemple d'utilisation est: Je dois calculer une moyenne mobile sur une série de données, au sein d'une boucle for. Je dois obtenir la moyenne mobile sur N9 jours. Le tableau Im calculant est 4 séries de 365 valeurs (M), qui sont elles-mêmes des valeurs moyennes d'un autre ensemble de données. Je veux tracer les valeurs moyennes de mes données avec la moyenne mobile dans une parcelle. J'ai googlé un peu sur les moyennes mobiles et la commande conv et trouvé quelque chose que j'ai essayé de mettre en œuvre dans mon code. Ainsi, fondamentalement, je calculer ma moyenne et le tracer avec une moyenne mobile (fausse). J'ai choisi la valeur wts directement sur le site mathworks, donc c'est incorrect. (Source: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mon problème, c'est que je ne comprends pas ce que c'est wts est. Quelqu'un peut-il expliquer si elle a quelque chose à voir avec le poids des valeurs: qui est invalide dans ce cas. Toutes les valeurs sont pondérées de la même façon. Et si je fais ce tout à fait mal, puis-je obtenir de l'aide avec elle Mes plus sincères remerciements. L'utilisation de conv est un excellent moyen de mettre en œuvre une moyenne mobile. Dans le code que vous utilisez, wts est combien vous peser chaque valeur (comme vous l'avez deviné). La somme de ce vecteur doit toujours être égale à un. Si vous souhaitez pondérer chaque valeur uniformément et faire un filtre N de taille N alors vous voudriez faire L'utilisation de l'argument valide en conv entraînera à avoir moins de valeurs dans Ms que vous avez dans M. Utilisez même si vous ne vous inquiétez pas les effets de Rembourrage zéro. Si vous avez la boîte à outils de traitement du signal, vous pouvez utiliser cconv si vous voulez essayer une moyenne mobile circulaire. Quelque chose comme vous devrait lire la documentation conv et cconv pour plus d'informations si vous n'avez pas déjà.
No comments:
Post a Comment