Sunday, 24 November 2019

Moving average filter matlab image


Criado em quarta-feira, 08 de Outubro de 2008 20:04 Última Atualização em Quinta, 14 Março 2017 01:29 Escrito por Batuhan Osmanoglu Hits: 41460 Moving Average Em Matlab Muitas vezes eu me encontro na necessidade de calcular a média dos dados que tenho para reduzir o ruído um pouco pouco. Eu escrevi funções de casal para fazer exatamente o que eu quero, mas matlabs construído em função de filtro funciona muito bem também. Aqui Ill escrever sobre 1D e 2D média de dados. 1D filtro pode ser realizado usando a função de filtro. A função de filtro requer pelo menos três parâmetros de entrada: o coeficiente do numerador para o filtro (b), o coeficiente do denominador para o filtro (a) e os dados (X), é claro. Um filtro de média em execução pode ser definido simplesmente por: Para dados 2D, podemos usar a função Matlabs filter2. Para obter mais informações sobre como o filtro funciona, você pode digitar: Aqui está uma implementação rápida e suja de um filtro de média móvel 16 por 16. Primeiro precisamos definir o filtro. Uma vez que tudo o que queremos é a contribuição igual de todos os vizinhos, podemos apenas usar a função uns. Nós dividimos tudo com 256 (1616) desde que nós não queremos mudar o nível geral (amplitude) do sinal. Para aplicar o filtro podemos simplesmente dizer o seguinte Abaixo estão os resultados para a fase de um interferograma SAR. Neste caso Range está no eixo Y e Azimuth é mapeado no eixo X. O filtro foi 4 pixels de largura em Range e 16 pixels de largura em Azimuth. O que está alisando e como posso fazer isso? Tenho uma matriz em Matlab que é o espectro de magnitude de um sinal de fala (a magnitude de 128 pontos de FFT). Como eu suavizar isso usando uma média móvel De que eu entendo, eu deveria ter um tamanho de janela de um certo número de elementos, tomar média, e isso se torna o novo elemento 1. Em seguida, deslocar a janela para a direita por um elemento, tomar média que se torna o elemento 2, e assim por diante. É realmente assim que funciona Eu não tenho certeza de mim mesmo, porque se eu fizer isso, no meu resultado final, vou ter menos de 128 elementos. Então, como ele funciona e como ele ajuda a suavizar os pontos de dados Ou há alguma outra maneira que eu posso fazer suavização de dados pediu Oct 15 12 às 6:30 migrado de stackoverflow Oct 15 12 at 14:51 Esta questão veio de nossa Para programadores profissionais e entusiastas. Para um espectro que você provavelmente deseja média juntos (na dimensão do tempo) múltiplos espectros ao invés de uma média de corrida ao longo do eixo de freqüência de um único espectro ndash endolito Oct 16 12 em 1:04 endolito ambas são técnicas válidas. A média no domínio da frequência (às vezes chamada de Periodograma de Danielle) é a mesma que a janela no domínio do tempo. A média de periodogramas múltiplos (quotspectraquot) é uma tentativa de imitar a média de conjunto requerida pelo verdadeiro Periodograma (isto é chamado de Periodograma Welch). Além disso, como uma questão de semântica, eu diria que quotsmoothingquot é non-causual low-pass filtragem. Veja Kalman filtragem vs Kalman suavização, Wiener filtragem v Wiener suavização, etc Há uma distinção não trivial e depende da implementação. Ndash Bryan 12 de dezembro às 19:18 O alisamento pode ser feito de muitas maneiras, mas em termos muito básicos e gerais significa que você mesmo um sinal, misturando seus elementos com os seus vizinhos. Você smearblur o sinal um pouco, a fim de se livrar do ruído. Por exemplo, uma técnica de alisamento muito simples seria recalcular cada elemento de sinal f (t) como 0,8 do valor original, mais 0,1 de cada um de seus vizinhos: Observe como os fatores de multiplicação, ou pesos, somam um. Portanto, se o sinal é bastante constante, suavização não muda muito. Mas se o sinal continha uma súbita mudança brusca, então a contribuição de seus vizinhos ajudará a esclarecer esse ruído um pouco. Os pesos que você usa nesta função de recálculo podem ser chamados de kernel. Uma função Gaussiana unidimensional ou qualquer outro kernel básico deve fazer no seu caso. Exemplo agradável de um tipo particular de suavização: Acima: sinal desmarcado Abaixo: sinal suavizado Exemplos de alguns kernels: Além da resposta agradável de Junuxx eu gostaria de soltar algumas notas. Suavização está relacionada à filtragem (infelizmente bastante vaga artigo da Wikipedia) - você deve escolher o mais suave com base em suas propriedades. Um dos meus favoritos é o filtro mediano. Este é um exemplo de um filtro não-linear. Tem algumas propriedades interessantes, preserva bordas e é bastante robusto sob grande ruído. Se você tem um modelo como seu sinal comporta um filtro de Kalman vale a pena um olhar. Sua suavização é na verdade uma estimativa Bayesiana de máxima verossimilhança do sinal com base em observações. Respondeu Oct 15 12 at 11:07 1 para mencionar o kalman filtro ndash Diego 13/12 às 18:48 suavização implica usar informações de amostras vizinhas, a fim de alterar a relação entre amostras vizinhas. Para vetores finitos, nas extremidades, não existe informação vizinha de um lado. Suas escolhas são: não suavizar as extremidades, aceitar um vetor mais suavizado resultante, compilar dados e alisar com isso (depende da precisão de quaisquer previsões fora das extremidades), ou talvez usando diferentes núcleos de suavização assimétricos nas extremidades (o que acaba Encurtando o conteúdo da informação no sinal de qualquer maneira). Respondido Out 15 12 at 19:44 Outros têm mencionado como você suavização, Id gostaria de mencionar por que suavização funciona. Se você oversample adequadamente o seu sinal, ele irá variar relativamente pouco de uma amostra para a próxima (timepoints amostra, pixels, etc), e espera-se ter uma aparência suave geral. Por outras palavras, o seu sinal contém poucas frequências elevadas, isto é, componentes de sinal que variam a uma taxa semelhante à sua taxa de amostragem. No entanto, as medições são muitas vezes corrompido pelo ruído. Em uma primeira aproximação, nós consideramos geralmente o ruído para seguir uma distribuição Gaussian com a média zero e um determinado desvio padrão que seja adicionado simplesmente sobre o sinal. Para reduzir o ruído em nosso sinal, comumente fazemos as seguintes quatro suposições: o ruído é aleatório, não está correlacionado entre as amostras, tem uma média de zero eo sinal está suficientemente sobreamosturado. Com estas suposições, podemos usar um filtro médio deslizante. Considere, por exemplo, três amostras consecutivas. Uma vez que o sinal é altamente sobreamosturado, o sinal subjacente pode ser considerado como mudando linearmente, o que significa que a média do sinal entre as três amostras seria igual ao sinal verdadeiro na amostra média. Em contraste, o ruído tem zero médio e não está correlacionado, o que significa que sua média tende a zero. Assim, podemos aplicar um filtro de média deslizante de três amostras, onde substituímos cada amostra pela média entre si e seus dois vizinhos adjacentes. Naturalmente, quanto maior for a janela, mais o ruído progredirá para zero, mas menos nossa suposição de linearidade do sinal verdadeiro se mantém. Assim, temos que fazer um trade-off. Uma maneira de obter o melhor de ambos os mundos é usar uma média ponderada, onde damos amostras mais distantes pesos menores, de modo que nós efeitos de ruído médio de intervalos maiores, enquanto não ponderar verdadeiro sinal muito onde se desvia da nossa linearidade suposição. Como você deve colocar os pesos depende do ruído, o sinal e eficiência computacional e, claro, o trade-off entre livrar-se do ruído e corte no sinal. Observe que houve muito trabalho nos últimos anos para nos permitir relaxar algumas das quatro suposições, por exemplo, projetando esquemas de suavização com janelas de filtro variável (difusão anisotrópica) ou esquemas que realmente não usam janelas em todos (Meios não-locais). Eu tenho uma matriz em Matlab que é o espectro de magnitude de um sinal de fala (a magnitude de 128 pontos de FFT). Como eu suavizar isso usando uma média móvel De que eu entendo, eu deveria ter um tamanho de janela de um certo número de elementos, tomar média, e isso se torna o novo elemento 1. Em seguida, deslocar a janela para a direita por um elemento, tomar média que se torna o elemento 2, e assim por diante. É realmente assim que funciona Eu não tenho certeza de mim mesmo, porque se eu fizer isso, no meu resultado final, vou ter menos de 128 elementos. Então, como ele funciona e como ele ajuda a suavizar os pontos de dados Ou há alguma outra maneira que eu posso fazer suavização de dados pediu Oct 15 12 às 6:30 migrado de stackoverflow Oct 15 12 at 14:51 Esta questão veio de nossa Para programadores profissionais e entusiastas. Para um espectro que você provavelmente deseja média juntos (na dimensão do tempo) múltiplos espectros ao invés de uma média de corrida ao longo do eixo de freqüência de um único espectro ndash endolito Oct 16 12 em 1:04 endolito ambas são técnicas válidas. A média no domínio da frequência (às vezes chamada de Periodograma de Danielle) é a mesma que a janela no domínio do tempo. A média de periodogramas múltiplos (quotspectraquot) é uma tentativa de imitar a média de conjunto requerida pelo verdadeiro Periodograma (isto é chamado de Periodograma Welch). Além disso, como uma questão de semântica, eu diria que quotsmoothingquot é non-causual low-pass filtragem. Veja Kalman filtragem vs Kalman suavização, Wiener filtragem v Wiener suavização, etc Há uma distinção não trivial e depende da implementação. Ndash Bryan 12 de dezembro às 19:18 O alisamento pode ser feito de muitas maneiras, mas em termos muito básicos e gerais significa que você mesmo um sinal, misturando seus elementos com os seus vizinhos. Você smearblur o sinal um pouco, a fim de se livrar do ruído. Por exemplo, uma técnica de alisamento muito simples seria recalcular cada elemento de sinal f (t) como 0,8 do valor original, mais 0,1 de cada um de seus vizinhos: Observe como os fatores de multiplicação, ou pesos, somam um. Portanto, se o sinal é bastante constante, suavização não muda muito. Mas se o sinal continha uma súbita mudança brusca, então a contribuição de seus vizinhos ajudará a esclarecer esse ruído um pouco. Os pesos que você usa nesta função de recálculo podem ser chamados de kernel. Uma função Gaussiana unidimensional ou qualquer outro kernel básico deve fazer no seu caso. Exemplo agradável de um tipo particular de suavização: Acima: sinal desmarcado Abaixo: sinal suavizado Exemplos de alguns kernels: Além da resposta agradável de Junuxx eu gostaria de soltar algumas notas. Suavização está relacionada à filtragem (infelizmente bastante vaga artigo da Wikipedia) - você deve escolher o mais suave com base em suas propriedades. Um dos meus favoritos é o filtro mediano. Este é um exemplo de um filtro não-linear. Tem algumas propriedades interessantes, preserva bordas e é bastante robusto sob grande ruído. Se você tem um modelo como seu sinal comporta um filtro de Kalman vale a pena um olhar. Sua suavização é na verdade uma estimativa Bayesiana de máxima verossimilhança do sinal com base em observações. Respondeu Oct 15 12 at 11:07 1 para mencionar o kalman filtro ndash Diego 13/12 às 18:48 suavização implica usar informações de amostras vizinhas, a fim de alterar a relação entre amostras vizinhas. Para vetores finitos, nas extremidades, não existe informação vizinha de um lado. Suas escolhas são: não suavizar as extremidades, aceitar um vetor mais suavizado resultante, compilar dados e alisar com isso (depende da precisão de quaisquer previsões fora das extremidades), ou talvez usando diferentes núcleos de suavização assimétricos nas extremidades (o que acaba Encurtando o conteúdo da informação no sinal de qualquer maneira). Respondido Out 15 12 at 19:44 Outros têm mencionado como você suavização, Id gostaria de mencionar por que suavização funciona. Se você oversample adequadamente o seu sinal, ele irá variar relativamente pouco de uma amostra para a próxima (timepoints amostra, pixels, etc), e espera-se ter uma aparência suave geral. Por outras palavras, o seu sinal contém poucas frequências elevadas, isto é, componentes de sinal que variam a uma taxa semelhante à sua taxa de amostragem. No entanto, as medições são muitas vezes corrompido pelo ruído. Em uma primeira aproximação, nós consideramos geralmente o ruído para seguir uma distribuição Gaussian com a média zero e um determinado desvio padrão que seja adicionado simplesmente sobre o sinal. Para reduzir o ruído em nosso sinal, comumente fazemos as seguintes quatro suposições: o ruído é aleatório, não está correlacionado entre as amostras, tem uma média de zero eo sinal está suficientemente sobreamosturado. Com estas suposições, podemos usar um filtro médio deslizante. Considere, por exemplo, três amostras consecutivas. Uma vez que o sinal é altamente sobre-amostrado, o sinal subjacente pode ser considerado como mudando linearmente, o que significa que a média do sinal entre as três amostras seria igual ao sinal verdadeiro na amostra média. Em contraste, o ruído tem zero médio e não está correlacionado, o que significa que sua média tende a zero. Assim, podemos aplicar um filtro de média deslizante de três amostras, onde substituímos cada amostra pela média entre si e seus dois vizinhos adjacentes. Naturalmente, quanto maior for a janela, mais o ruído progredirá para zero, mas menos nossa suposição de linearidade do sinal verdadeiro se mantém. Assim, temos que fazer um trade-off. Uma maneira de obter o melhor de ambos os mundos é usar uma média ponderada, onde damos amostras mais distantes pesos menores, de modo que nós efeitos de ruído médio de intervalos maiores, enquanto não ponderar verdadeiro sinal muito onde se desvia da nossa linearidade suposição. Como você deve colocar os pesos depende do ruído, o sinal e eficiência computacional e, claro, o trade-off entre livrar-se do ruído e corte no sinal. Observe que houve muito trabalho nos últimos anos para nos permitir relaxar algumas das quatro suposições, por exemplo, projetando esquemas de suavização com janelas de filtro variável (difusão anisotrópica) ou esquemas que realmente não usam janelas em todos (Meios não-locais). Respondido Dec 27 12 at 15: 10O filtro de médio, ou categoria de filtro média. Processamento digital de sinais e imagens (DSP e DIP). Abstrato. O artigo é um guia prático para filtro médio, ou entendimento e implementação de filtro médio. Artigo contém teoria, código-fonte C, instruções de programação e aplicação de exemplo. 1. Introdução ao filtro médio, ou filtro médio Filtro médio. Ou filtro médio é o filtro de janela da classe linear, que suaviza o sinal (imagem). O filtro funciona como low-pass um. A idéia básica por trás do filtro é para qualquer elemento do sinal (imagem) ter uma média em toda a sua vizinhança. Para entender como isso é feito na prática, vamos começar com a idéia da janela. 2. Janela de filtro ou máscara Vamos imaginar, você deve ler uma carta eo que você vê no texto restrito pelo buraco em stencil especial como este. Assim, o resultado da leitura é t sadio. Ok, vamos ler a carta novamente, mas com a ajuda de outro estêncil: Agora o resultado da leitura t é som 240. Vamos fazer a terceira tentativa: Agora você está lendo a letra t como som 952. O que acontece aqui Para dizer que Na linguagem matemática, você está fazendo uma operação (leitura) sobre o elemento (letra t). E o resultado (som) depende do elemento vizinhança (letras ao lado de t). E esse estêncil, que ajuda a pegar a vizinhança do elemento, é janela Sim, a janela é apenas um estêncil ou padrão, por meio do qual você está selecionando o elemento vizinhança 0151 um conjunto de elementos em torno do dado 0151 para ajudá-lo a tomar uma decisão. Outro nome para a janela de filtro é máscara 0151 máscara é um estêncil, que esconde elementos que não estão prestando atenção. Em nosso exemplo, o elemento em que estamos operando está posicionado à esquerda da janela, na prática no entanto sua posição usual é o centro da janela. Vejamos alguns exemplos de janelas. Em uma dimensão. FIG. 4. Janela ou máscara de tamanho 5 em 1D. Em duas dimensões. FIG. 5. Janela ou máscara de tamanho 3times3 em 2D. Em três dimensões. Pense em construir. E agora mdash sobre quarto nesse edifício. O quarto é como janela 3D, que corta alguns subespaço de todo o espaço do edifício. Você pode encontrar janela 3D em volume (voxel) processamento de imagem. 3. Compreender filtro médio Agora vamos ver, como ldquotake uma média através de elementos de vizinhança. A fórmula é simples 0151 somar elementos e dividir a soma pelo número de elementos. Por exemplo, vamos calcular uma média para o caso, representada na fig. 7. FIG. 7. Tomando uma média. E isso é tudo. Sim, nós apenas filtraram o sinal 1D pelo filtro médio Deixe-nos fazer o resumo e escrever para baixo instruções passo a passo para processar pelo filtro médio. Filtro médio ou algoritmo médio de filtragem: Coloque uma janela sobre o elemento Pegue uma média de 0151 somando elementos e divida a soma pelo número de elementos. Agora, quando temos o algoritmo, é hora de escrever algum código mdash vamos descer para a programação. 4. 1D média filtragem programação Nesta seção desenvolvemos 1D médio filtro com janela de tamanho 5. Vamos ter 1D sinal de comprimento N como entrada. O primeiro passo é colocar a janela 0151 fazemos isso alterando o índice do elemento principal: Preste atenção, que estamos começando com o terceiro elemento e terminando com o último mas dois. O problema é que não podemos começar com o primeiro elemento, porque neste caso a parte esquerda da janela de filtro está vazia. Discutiremos abaixo, como resolver esse problema. A segunda etapa está tomando a média, ok: Agora, deixe-nos anotar o algoritmo como a função: O elemento do tipo poderia ser definido como: 5. Tratar bordas Para todos os filtros da janela há algum problema. Isso é tratamento de borda. Se você colocar a janela sobre o primeiro (último) elemento, a parte esquerda (direita) da janela estará vazia. Para preencher a lacuna, o sinal deve ser estendido. Para o filtro médio há uma boa idéia para estender sinal ou imagem simetricamente, como este: Então, antes de passar o sinal para a nossa função de filtro média o sinal deve ser estendido. Vamos escrever o invólucro, que faz todos os preparativos. Como você pode ver, nosso código leva em conta algumas questões práticas. Em primeiro lugar, verificamos que os nossos parâmetros de entrada 0151 não devem ser NULL eo sinal deve ser positivo: Segundo passo 0151, verificamos o caso N1. Este caso é especial, porque para construir a extensão precisamos de pelo menos dois elementos. Para o sinal de 1 comprimento de elemento o resultado é o próprio sinal. Também preste atenção, nosso filtro médio funciona no local, se o resultado do parâmetro de saída for NULL. Agora vamos alocar memória para extensão de sinal. E verificar a alocação de memória.

No comments:

Post a Comment