Thursday 27 July 2017

Python Moving Average Image


Digamos que eu tenho uma lista: eu quero criar uma função que calcula a média móvel n-dia. Então, se n fosse 5, eu gostaria que meu código calculasse os primeiros 1-5, adicione-o e encontre a média, que seria 3.0, então vá para 2-6, calcule a média, que seria 4,0 e depois 3 -7, 4-8, 5-9, 6-10. Eu não quero calcular os primeiros n-1 dias, então a partir do nono dia, contam os dias anteriores. Isso parece imprimir o que eu quero: no entanto, não sei como calcular os números dentro dessas listas. Todas as idéias foram feitas 14 de fevereiro às 21:05 Enquanto eu gosto da resposta de Martijns sobre isso, como george, eu queria saber se isso não seria mais rápido, usando uma soma em execução ao invés de aplicar a soma () repetidamente na maioria dos mesmos números . Também é interessante a idéia de ter valores Nenhum como padrão durante a fase de aceleração. Na verdade, pode haver muitos cenários diferentes que se poderia conceber para médias móveis. Permite dividir o cálculo das médias em três fases: Ramp Up: Iniciando iterações onde a contagem de iteração atual é o tamanho da janela Progressão constante: Temos exatamente o tamanho da janela do número de elementos disponíveis para calcular uma média normal: soma (xiterationcounter-windowsize: iterationcounter) windowsize Ramp Down: No final dos dados de entrada, podemos retornar outro Windowsize - 1 números médios. Heres uma função que aceita Iteráveis ​​arbitrárias (geradores são finos) como entrada para dados Tamanho de janela arbitrária 1 Parâmetros para mudar a produção de valores durante as fases para Ramp UpDown Callback funções para essas fases para controlar como os valores são produzidos. Isso pode ser usado para fornecer constantemente um padrão (por exemplo, Nenhum) ou para fornecer médias parciais. Parece ser um pouco mais rápido que a versão de Martijns - o que é muito mais elegante, no entanto. Heres o código de teste: a questão original agora pode ser resolvida com esta chamada de função: respondida 18 de fevereiro às 18:15 Use as funções soma e mapa. A função do mapa no Python 3 é basicamente uma versão preguiçosa disso: Tenho certeza de que você pode adivinhar o que a função de soma faz. Respondeu 14 de fevereiro às 21:07 Uma abordagem que evita recomputar somas intermediárias .. faça isso executado (int (v)). então. Repr (runsumlistk - runsumlistk-5) 5) se você forçar para carregar números em uma corda ... Alt sem o global: certifique-se de fazer matemática flutuante mesmo se você inserir valores são inteiros respondidos 14 de fevereiro às 22:04 De fato, uma corrida O algoritmo de soma é mais rápido. Eu publiquei uma resposta que comprovava o seu ponto de vista. Não há necessidade de uma variável global aqui. Ndash cfi 18 de fevereiro às 18:16 certo você está, eu estava tentando muito difícil aviod um explícito para loop. Ndash agentp Feb 19 13 at 18:37 Existe outra solução que amplia uma receita de itertools em par (). Você pode estender isso para nwise (). O que lhe dá a janela deslizante (e funciona se o iterável é um gerador): enquanto um custo de instalação relativamente alto para curtos iteráveis ​​esse custo reduz em impacto, mais longo o conjunto de dados. Isso usa a soma (), mas o código é razoavelmente elegante: respondido 26 de novembro 16 às 14: 59Hi, este será um artigo muito simples, mas você vai achar muito útil. Trata-se de Extração de fundo de um vídeo. Suponha que você tenha um vídeo de filmagem de tráfego, pode ser uma coisa assim. Tráfego na Índia. E você é convidado a encontrar um fundo aproximado. Ou qualquer coisa assim. A extração de fundo vem importante no rastreamento de objetos. Se você já possui uma imagem do fundo nu, então é simples. Mas, em muitos casos, você não terá essa imagem e, então, você terá que criar uma. É aí que o Running Average é útil. (Eu pensei sobre isso quando um cara fez uma pergunta no SOF. Link) A função que usamos aqui para encontrar Running Average é cv2.accumulateWeighted (). Por exemplo, se estamos assistindo um vídeo, continuamos alimentando cada quadro para esta função, e a função continua encontrando as médias de todos os quadros alimentados a ele de acordo com a relação abaixo: src não é senão a nossa imagem de origem. Pode ser em escala de cinza ou imagem colorida e ponto flutuante de 8 bits ou 32 bits. Dst é a imagem de saída ou acumulador com os mesmos canais que a da imagem de origem, e é um ponto flutuante de 32 bits ou 64 bits. Além disso, devemos declarar primeiro um valor que será tomado como valor inicial. Alfa é o peso da imagem de entrada. De acordo com o Docs, o alfa regula a velocidade de atualização (o quão rápido o acumulador 8220forgets8221 sobre imagens anteriores). Em palavras simples, se o alfa é um valor maior, a imagem média tenta capturar mudanças muito rápidas e curtas nos dados. Se for menor valor, a média fica lenta e não considera mudanças rápidas nas imagens de entrada. Vou explicar um pouco com a ajuda de imagens no final do artigo. No código acima, estabeleci duas médias, uma com maior valor alfa e outra com menor valor alfa para que você possa entender o efeito do alfa. No início, ambos são configurados para o quadro inicial da captura. E em loop eles são atualizados. Você pode ver alguns resultados no link SOF que eu já forneci. (Eu forneço esses resultados aqui, você pode verificar o código e o valor alfa lá): usei minha webcam e economize o quadro original e a média de execução em um instante particular. Este é um quadro de um vídeo de tráfego típico tirado por uma câmera estacionária. Como você pode ver, um carro está indo na estrada, e a pessoa está tentando atravessar a estrada em um determinado instante de tempo. Mas veja a média de corrida naquele momento. Não há pessoa e carro nesta imagem (Na verdade, está lá, tenha uma aparência próxima, então você vai ver isso, e a pessoa é mais clara que o carro, já que o carro está se movendo muito rápido e através da imagem, não tem muito Efeito em média, mas a pessoa está lá por um longo tempo, já que ele é lento e se move através da estrada.) Agora, precisamos ver o efeito do alfa sobre essas imagens. Nosso primeiro passo é traçar um gráfico que mostra as médias de dois Arrays. Let8217s criam dois arrays x e y e traçam os mesmos. X será de 1 a 10. E você terá esses mesmos elementos em uma ordem aleatória. Isso nos ajudará a verificar que, de fato, nossa média está correta. Let8217s aleatorizar a ordem de nossos elementos em y mais uma vez e tramar novamente: com relação a y let8217s veja como a média móvel se comporta: no próximo tutorial devemos traçar as médias móveis. Compartilhe isso: Curtiu: Postar navegação Deixe uma resposta Cancelar resposta d bloggers como este:

No comments:

Post a Comment