Nomes comuns: Alisamento gaussiano Breve descrição O operador de suavização gaussiana é um operador de convolução 2-D que é usado para desfocar imagens e remover detalhes e ruídos. Nesse sentido, é semelhante ao filtro médio. mas usa um kernel diferente que representa a forma de uma corcunda gaussiana (em forma de sino). Este kernel tem algumas propriedades especiais que são detalhadas abaixo. Como funciona A distribuição gaussiana em 1-D tem a forma: onde está o desvio padrão da distribuição. Também assumimos que a distribuição tem uma média de zero (isto é, é centrada na linha x 0). A distribuição é ilustrada na Figura 1. Figura 1 Distribuição Gaussiana 1-D com média 0 e 1 Em 2-D, um Gaussiano isotrópico (ou seja, circularmente simétrico) tem a forma: Essa distribuição é mostrada na Figura 2. Figura 2 2-D Distribuição gaussiana com média (0,0) e 1 A idéia de suavização gaussiana é usar essa distribuição 2-D como uma função de difusão pontual, e isso é obtido por convolução. Como a imagem é armazenada como uma coleção de pixels discretos, precisamos produzir uma aproximação discreta da função gaussiana antes de podermos realizar a convolução. Em teoria, a distribuição gaussiana é diferente de zero em todos os lugares, o que exigiria um kernel de convolução infinitamente grande, mas na prática é efetivamente zero mais do que três desvios padrão da média e, assim, podemos truncar o kernel nesse ponto. A Figura 3 mostra um núcleo de convolução com valor inteiro adequado que se aproxima de um Gauss com um de 1,0. Não é óbvio como escolher os valores da máscara para aproximar um Gaussiano. Pode-se usar o valor do Gaussiano no centro de um pixel na máscara, mas isso não é exato porque o valor do Gaussiano varia não linearmente no pixel. Nós integramos o valor do gaussiano sobre todo o pixel (somando o gaussiano em incrementos de 0,001). As integrais não são inteiros: nós reescalamos o array de forma que os cantos tivessem o valor 1. Finalmente, o 273 é a soma de todos os valores na máscara. Figura 3 Aproximação discreta da função gaussiana com 1.0 Uma vez que um kernel adequado foi calculado, o alisamento gaussiano pode ser realizado usando métodos de convolução padrão. A convolução pode, de fato, ser executada com bastante rapidez, pois a equação do Gaussiano isotrópico 2-D mostrado acima é separável em componentes x e y. Assim, a convolução 2-D pode ser realizada primeiramente pela convolução com um Gaussiano 1-D na direção x, e então convolvendo-se com outro Gaussiano 1-D na direção y. (O Gaussian é, de fato, o único operador simétrico completamente circular que pode ser decomposto dessa forma.) A Figura 4 mostra o kernel do componente 1-D x que seria usado para produzir o kernel completo mostrado na Figura 3 , arredondando e truncando uma linha de pixels ao redor do limite, porque eles geralmente têm o valor 0. Isso reduz a matriz 7x7 para a 5x5 mostrada acima. O componente y é exatamente o mesmo, mas é orientado verticalmente. Figura 4 Um dos pares de núcleos de convolução 1-D usados para calcular o kernel completo mostrado na Figura 3 mais rapidamente. Uma outra maneira de calcular uma suavização gaussiana com um grande desvio padrão é convolver uma imagem várias vezes com um gaussiano menor. Embora isso seja computacionalmente complexo, ele pode ter aplicabilidade se o processamento for realizado usando um pipeline de hardware. O filtro gaussiano não só tem utilidade em aplicações de engenharia. Também está atraindo a atenção de biólogos computacionais, porque foi atribuída com alguma quantidade de plausibilidade biológica, por ex. algumas células nas vias visuais do cérebro geralmente têm uma resposta aproximadamente gaussiana. Diretrizes para Uso O efeito da suavização gaussiana é desfocar uma imagem, de maneira semelhante ao filtro médio. O grau de suavização é determinado pelo desvio padrão do Gaussiano. (Gaussians de desvio padrão maiores, claro, requerem kernels de convolução maiores para serem representados com precisão.) O Gaussian gera uma média ponderada de cada vizinhança de pixels, com a média ponderada mais para o valor dos pixels centrais. Isto está em contraste com a média dos filtros uniformemente ponderada média. Por causa disso, um gaussiano fornece suavidade mais suave e preserva bordas melhor do que um filtro médio de tamanho similar. Uma das principais justificativas para usar o Gaussian como filtro de suavização é devido à sua resposta de freqüência. A maioria dos filtros de suavização baseados em convolução atuam como filtros de frequência de baixa passagem. Isso significa que seu efeito é remover componentes de alta freqüência espacial de uma imagem. A resposta de frequência de um filtro de convolução, isto é, o seu efeito em diferentes frequências espaciais, pode ser vista tomando a transformada de Fourier do filtro. A Figura 5 mostra as respostas de frequência de um filtro de média 1-D com largura 5 e também de um filtro Gaussiano com 3. Figura 5 Respostas de frequência do filtro Caixa (isto é, média) (largura 5 pixels) e filtro Gaussiano (3 pixels). O eixo de freqüência espacial é marcado em ciclos por pixel e, portanto, nenhum valor acima de 0,5 tem um significado real. Ambos os filtros atenuam as altas frequências mais do que as baixas frequências, mas o filtro médio exibe oscilações na sua resposta de frequência. O gaussiano, por outro lado, não mostra oscilações. De fato, a forma da curva de resposta de freqüência é ela mesma (meio a) gaussiana. Então, ao escolher um filtro Gaussiano de tamanho adequado, podemos estar bastante confiantes sobre qual faixa de freqüências espaciais ainda está presente na imagem após a filtragem, o que não é o caso do filtro médio. Isso tem consequências para algumas técnicas de detecção de bordas, como mencionado na seção sobre cruzamentos de zero. (O filtro Gaussiano também se mostra muito similar ao filtro de suavização ideal para detecção de bordas sob os critérios usados para derivar o detector de borda de Canny.) Para ilustrar o efeito de suavização com filtros Gaussianos sucessivamente maiores e maiores. mostra o efeito da filtragem com um Gaussiano de 1.0 (e tamanho do kernel 52155). mostra o efeito da filtragem com um Gaussian de 2.0 (e tamanho do kernel 92159). mostra o efeito da filtragem com um Gaussian de 4.0 (e tamanho do kernel 1521515). Consideramos agora o uso do filtro gaussiano para redução de ruído. Por exemplo, considere a imagem que foi corrompida pelo ruído gaussiano com uma média de zero e 8. Suavizando isso com um rendimento Gaussiano de 52155 (compare este resultado com o obtido pelos filtros de média e mediana). O ruído de sal e pimenta é mais desafiador para um filtro gaussiano. Aqui vamos suavizar a imagem que foi corrompida por 1 ruído de sal e pimenta (ou seja, bits individuais foram invertidos com probabilidade 1). A imagem mostra o resultado da suavização gaussiana (usando a mesma convolução acima). Compare isso com o original. Observe que muito do ruído ainda existe e que, embora tenha diminuído em magnitude, ele foi espalhado por uma região espacial maior. Aumentar o desvio padrão continua a reduzir / diminuir a intensidade do ruído, mas também atenua os detalhes de alta frequência (por exemplo, bordas) de forma significativa, conforme mostrado em Experimentação interativa. Você pode fazer experiências interativas com esse operador clicando aqui. A partir do ruído gaussiano (média 0, 13), a imagem corrompida calcula o filtro médio e a suavização do filtro gaussiano em várias escalas, e compara cada um em termos de remoção de ruído versus perda de detalhes. A quantos desvios padrão da média um Gauss cai para 5 do seu valor de pico Com base nisso, sugere-se um tamanho de núcleo quadrado adequado para um filtro Gaussiano com s. Estime a resposta de freqüência para um filtro gaussiano com o auxílio de uma imagem gaussiana, e tomando sua transformada de Fourier antes e depois. Compare isso com a resposta de freqüência de um filtro médio. Como o tempo gasto para suavizar com um filtro gaussiano se compara com o tempo necessário para suavizar com um filtro médio para um kernel do mesmo tamanho Observe que em ambos os casos a convolução pode ser consideravelmente acelerada pela exploração de determinados recursos do kernel. Referências Visão de Máquina de E. Davies: Teoria, Algoritmos e Praticalidades. Academic Press, 1990, pp 42 - 44. R. Gonzalez e R. Woods Digital Image Processing. Addison-Wesley Publishing Company, 1992, p. 191. R. Haralick e L. Shapiro Computer e Robot Vision. Addison-Wesley Publishing Company, 1992, vol. 1, Chap. 7. Visão do robô B. Horn. MIT Press, 1986, cap. 8. Visão de Máquina de D. Vernon. Prentice-Hall, 1991, pp 59 - 61, 214. Informações locais Informações específicas sobre este operador podem ser encontradas aqui. Mais conselhos gerais sobre a instalação local do HIPR estão disponíveis na seção introdutória de Informações locais. A comparação de desempenho de suavização A função smoothdemo. m do Matlab / Octave é uma função independente que compara o desempenho de quatro tipos de operações suaves: (1) média, (2) triangular, (3) pseudo-gaussiana (equivalente a três passagens de média móvel) e (4) Savitzky-Golay. Estes são os quatro tipos suaves discutidos no Smoothing. html. correspondendo aos quatro valores do argumento de entrada SmoothMode das funções ProcessSignal e iSignal. Estas quatro operações suaves são aplicadas a um sinal de 2000 pontos consistindo de um pico Gaussiano com um FWHM (largura máxima no meio-máximo) de 322 pontos e a um conjunto de ruído composto por ruído branco aleatório normalmente distribuído com uma média de zero. e um desvio padrão de 1,0. A altura do pico do pico suavizado, o desvio padrão do ruído suavizado e a relação sinal-ruído são todos medidos em função da largura suave, para cada tipo suave. Largura suave é expressa em termos de relação suave, a relação entre a largura do liso para a largura (FWHM) do pico. Os resultados, quando o smoothdemo. m é executado (com um comprimento de matriz de ruído de 107 para garantir uma amostragem precisa do ruído), são mostrados na figura e na impressão de texto abaixo. Os quatro quadrantes do gráfico são: (superior esquerdo) o pico Gaussiano original antes de suavizar e sem ruído (superior direito) a altura do pico do sinal suavizado como uma função da proporção suave (inferior esquerda) o desvio padrão do ruído como função de relação suave a relação sinal-ruído (SNR) como uma função da relação suave (inferior direito). Os diferentes tipos de suavidade são indicados por cor: azul - verde médio deslizante - vermelho triangular - pseudo-gaussiano e ciano - Savitzky-Golay. A função também calcula e imprime o tempo decorrido para cada tipo de suavidade e o máximo no gráfico de SNR. 1. Média Deslizante: Tempo Decorrido: 0.26 Opt. SNR: 15,1 na largura lisa de 1,25 2. Triangular: Tempo decorrido: 0,59 Opc. SNR: 15,8 na largura lisa de 1,11 3. Pseudo-gaussiana: Tempo decorrido: 0,87 Op. SNR: 15,6 na largura lisa de 0,93 4. Savitzky-Golay: Tempo decorrido: 4,5 Opc. SNR: 20,3 na largura suave de 1,74 Esses resultados mostram claramente que o Savitzky-Golay suaviza a menor distorção de pico (menor redução na altura do pico), mas, por outro lado, dá a menor redução na amplitude do ruído e a maior computação tempo (de longe). A suavidade pseudo-gaussiana dá a maior redução de ruído e, abaixo de uma proporção suave de cerca de 1.0, a maior relação sinal-ruído, mas a Savitzky-Golay suaviza o SNR mais alto acima de uma proporção suave de 1.0. Para aplicações onde a forma do sinal deve ser preservada tanto quanto possível, o Savitzky-Golay é claramente o método de escolha. Na função de detecção de pico. por outro lado, o propósito de suavizar é reduzir o ruído no sinal derivativo, a retenção da forma daquela derivada é menos importante. Portanto, a suavidade triangular ou pseudo-gaussiana é bem adequada para essa finalidade e tem a vantagem adicional de acelerar a velocidade de cálculo. As conclusões são essencialmente as mesmas para um pico de Lorentz, como demonstrado por uma função semelhante, a principal diferença é que a redução da altura do pico é maior para os Lorentzianos. Última atualização em maio de 2013. Esta página é parte de Uma Introdução Pragmática ao Processamento de Sinais, criada e mantida pelo Prof. Tom OHaver. Departamento de Química e Bioquímica da Universidade de Maryland em College Park. Comentários, sugestões e perguntas devem ser direcionados ao Prof. OHaver em tohumd. edu. Visitas exclusivas desde 17 de maio de 2008: Em muitos experimentos científicos, as amplitudes verdadeiras dos sinais (valores do eixo y) mudam suavemente como uma função dos valores do eixo x, enquanto muitos tipos de ruído são vistos como mudanças rápidas e aleatórias em amplitude de ponto a ponto dentro do sinal. Na última situação, pode ser útil, em alguns casos, tentar reduzir o ruído por um processo chamado suavização. Na suavização, os pontos de dados de um sinal são modificados para que os pontos individuais que são mais altos do que os pontos imediatamente adjacentes (presumivelmente por causa do ruído) sejam reduzidos e os pontos mais baixos do que os pontos adjacentes sejam aumentados. Isso naturalmente leva a um sinal mais suave (e a uma resposta mais lenta a mudanças de sinal). Desde que o verdadeiro sinal subjacente seja realmente suave, o sinal verdadeiro não será muito distorcido pela suavização, mas o ruído de alta frequência será reduzido. Em termos dos componentes de freqüência de um sinal, uma operação de suavização atua como um filtro de baixa freqüência. reduzindo os componentes de alta frequência e passando os componentes de baixa frequência com poucas mudanças. Algoritmos de suavização. A maioria dos algoritmos de suavização é baseada na técnica shift e multiply, na qual um grupo de pontos adjacentes nos dados originais é multiplicado ponto a ponto por um conjunto de números (coeficientes) que define a forma suave, os produtos são adicionados e dividido pela soma dos coeficientes, que se torna um ponto de dados suavizados, o conjunto de coeficientes é deslocado um ponto abaixo dos dados originais e o processo é repetido. O algoritmo de suavização mais simples é o vagão retangular ou a média de deslizamento não ponderada, que simplesmente substitui cada ponto no sinal pela média de m pontos adjacentes, onde m é um inteiro positivo chamado de largura suave. Por exemplo, para uma suavização de 3 pontos (m 3): para j 2 a n-1, em que S j o j ésimo ponto no sinal suavizado, Y j o j ésimo ponto no sinal original en é o total número de pontos no sinal. Operações suaves semelhantes podem ser construídas para qualquer largura suave desejada, m. Normalmente m é um número ímpar. Se o ruído nos dados for ruído branco (isto é, distribuído uniformemente por todas as freqüências) e seu desvio padrão for D. então o desvio padrão do ruído remanescente no sinal após a primeira passagem de uma suavidade média não-ponderada deslizante será aproximadamente s sobre a raiz quadrada de m (D / sqrt (m)), onde m é a largura suave. Apesar de sua simplicidade, essa suavidade é, na verdade, ideal para o problema comum de reduzir o ruído branco e, ao mesmo tempo, manter a resposta mais precisa. A resposta a uma mudança de passo é de fato linear. então este filtro tem a vantagem de responder completamente sem efeito residual no tempo de resposta. que é igual à largura lisa dividida pela taxa de amostragem. O triangular liso é como o liso retangular, acima, exceto que ele implementa uma função de suavização ponderada. Para uma suavidade de 5 pontos (m 5): para j 3 a n-2 e, da mesma forma, para outras larguras lisas (consulte a planilha UnitGainSmooths. xls). Em ambos os casos, o inteiro no denominador é a soma dos coeficientes no numerador, o que resulta em um ganho unitário suave que não tem efeito sobre o sinal onde é uma linha reta e que preserva a área sob picos. Muitas vezes é útil aplicar uma operação de suavização mais de uma vez, ou seja, suavizar um sinal já suavizado, a fim de criar suavizações mais longas e mais complicadas. Por exemplo, o plano triangular de 5 pontos acima é equivalente a duas passagens de um retângulo liso de 3 pontos. Três passagens de um resultado retangular suave de 3 pontos em um pseudo-Gaussiano ou palheiro liso de 7 pontos, para o qual os coeficientes estão na proporção de 1: 3: 6: 7: 6: 3: 1. A regra geral é que n passagens de uma largura w suave resultam em uma largura suave combinada de n w - n 1. Por exemplo, 3 passagens de uma suavização de 17 pontos resultam em uma suavidade de 49 pontos. Essas suavizações de múltiplas passagens são mais eficazes na redução do ruído de alta freqüência no sinal do que em uma suavidade retangular, mas exibem uma resposta mais lenta. Em todas essas suavidades, a largura do m liso é escolhida para ser um número inteiro ímpar, de modo que os coeficientes lisos são simetricamente balanceados em torno do ponto central, o que é importante porque preserva a posição do eixo x dos picos e outros recursos no sinal. (Isto é especialmente crítico para aplicações analíticas e espectroscópicas, porque as posições de pico são frequentemente importantes objetivos de medição). Observe que estamos assumindo aqui que os intervalos do eixo x do sinal são uniformes, isto é, que a diferença entre os valores do eixo x dos pontos adjacentes é a mesma em todo o sinal. Isto também é assumido em muitas das outras técnicas de processamento de sinal descritas neste ensaio, e é uma característica muito comum (mas não necessária) de sinais que são adquiridos por equipamentos automatizados e computadorizados. A suavização de Savitzky-Golay é baseada no ajuste de mínimos quadrados de polinômios para segmentos dos dados. O algoritmo é discutido em wire. tu-bs. de/OLDWEB/mameyer/cmr/savgol. pdf. Em comparação com a suavidade média de deslizamento, o Savitzky-Golay Smooth é menos eficaz na redução do ruído, mas é mais eficaz em manter a forma do sinal original. É capaz de diferenciar e suavizar. O algoritmo é mais complexo e os tempos computacionais são maiores que os tipos suaves discutidos acima, mas com computadores modernos a diferença não é significativa e o código em vários idiomas é amplamente disponível online. Veja SmoothingComparison. html. A forma de qualquer algoritmo de suavização pode ser determinada aplicando essa suavidade a uma função delta. um sinal que consiste em todos os zeros, exceto por um ponto, conforme demonstrado pelo script DeltaTest. m do Matlab / Octave. Redução de ruído . A suavização geralmente reduz o ruído em um sinal. Se o ruído for branco (isto é, distribuído uniformemente por todas as freqüências) e seu desvio padrão for D. então o desvio padrão do ruído remanescente no sinal após uma passagem de um retangular suave será aproximadamente D / sqrt (m), onde m é a largura suave. Se um triangular suave for usado, o ruído será um pouco menor, cerca de D 0,8 / sqrt (m). As operações de suavização podem ser aplicadas mais de uma vez: isto é, um sinal suavizado anteriormente pode ser suavizado novamente. Em alguns casos, isso pode ser útil se houver muito ruído de alta freqüência no sinal. No entanto, a redução de ruído para ruído branco é menor em cada suavidade sucessiva. Por exemplo, três passagens de uma forma retangular suave reduzem o ruído branco por um fator de aproximadamente D 0,7 / sqrt (m), apenas uma pequena melhora em relação a duas passagens. A distribuição de frequência de ruído, designada pela cor do ruído. afeta substancialmente a capacidade de suavização para reduzir o ruído. A função NoiseColorTest. m de Matlab / Octave compara o efeito de um boxcar de 100 pontos (média deslizante não ponderada) no desvio padrão de ruído branco, rosa e azul, todos com um desvio padrão não suavizado original de 1,0. Como a suavização é um processo de filtro passa-baixa, ela produz menos ruído de baixa frequência (rosa e vermelho) e mais ruído de alta frequência (azul) do que ruído branco. Observe que o cálculo do desvio padrão é independente da ordem dos dados e, portanto, de sua distribuição de freqüência classificando um conjunto de dados não altera seu desvio padrão. O desvio padrão de uma onda senoidal é independente de sua freqüência. A suavização, no entanto, altera a distribuição de frequência e o desvio padrão de um conjunto de dados. Efeitos finais e o problema dos pontos perdidos. Observe nas equações acima que a suavidade retangular de 3 pontos é definida apenas para j 2 a n-1. Não há dados suficientes no sinal para definir uma suavização completa de 3 pontos para o primeiro ponto no sinal (j 1) ou para o último ponto (j n). porque não há pontos de dados antes do primeiro ponto ou após o último ponto. (Da mesma forma, uma suavidade de 5 pontos é definida apenas para j 3 a n-2 e, portanto, uma suavidade não pode ser calculada para os dois primeiros pontos ou para os dois últimos pontos). Em geral, para uma largura m-m suave, haverá (m -1) / 2 pontos no início do sinal e (m -1) / 2 pontos no final do sinal para o qual uma largura m completa suave não pode ser calculado. O que fazer Existem duas abordagens. Uma delas é aceitar a perda de pontos e cortar esses pontos ou substituí-los por zeros no sinal suave. (Essa é a abordagem adotada na maioria das figuras deste artigo). A outra abordagem é usar suavizações progressivamente menores nas extremidades do sinal, por exemplo, usar 2, 3, 5, 7. pontos para os pontos de sinal 1, 2, 3 e 4. e para os pontos n, n-1 , n-2, n-3. respectivamente. A abordagem posterior pode ser preferível se as bordas do sinal contiverem informações críticas, mas aumentar o tempo de execução. A função fastsmooth discutida abaixo pode utilizar um desses dois métodos. Exemplos de suavização Um exemplo simples de suavização é mostrado na Figura 4. A metade esquerda deste sinal é um pico ruidoso. A metade direita é o mesmo pico depois de passar por um algoritmo de suavização triangular. O ruído é bastante reduzido, enquanto o pico em si é dificilmente alterado. A suavização aumenta a relação sinal-ruído e permite que as características do sinal (posição de pico, altura, largura, área, etc.) sejam medidas com mais precisão por inspeção visual. Figura 4. A metade esquerda deste sinal é um pico ruidoso. A metade direita é o mesmo pico depois de passar por um algoritmo de suavização. O ruído é bastante reduzido, enquanto o pico em si é dificilmente alterado, facilitando a medição da posição de pico, altura e largura diretamente por estimativa gráfica ou visual (mas não melhora as medições feitas pelos métodos de mínimos quadrados, veja abaixo). Quanto maior a largura suave, maior a redução de ruído, mas também maior a possibilidade de o sinal ser distorcido pela operação de suavização. A escolha ideal de largura suave depende da largura e forma do sinal e do intervalo de digitalização. Para sinais do tipo pico, o fator crítico é a taxa de suavização. a relação entre a largura suave m e o número de pontos na metade da largura do pico. Em geral, aumentar a taxa de suavização melhora a relação sinal-ruído, mas causa uma redução na amplitude e no aumento da largura de banda do pico. As figuras acima mostram exemplos do efeito de três larguras lisas diferentes em picos barulhentos em forma de ruidosa. Na figura à esquerda, o pico tem uma altura (verdadeira) de 2,0 e há 80 pontos na meia largura do pico. A linha vermelha é o pico não suavizado original. As três linhas verdes sobrepostas são os resultados da suavização deste pico com uma largura triangular lisa (de cima para baixo) de 7, 25 e 51 pontos. Como a largura do pico é de 80 pontos, as proporções uniformes desses três smooths são 7/80 0,09, 25/80 0,31 e 51/80 0,64, respectivamente. À medida que a largura suave aumenta, o ruído é reduzido progressivamente, mas a altura do pico também é reduzida ligeiramente. Para a maior suavidade, a largura do pico é levemente aumentada. Na figura à direita, o pico original (em vermelho) tem uma altura real de 1,0 e uma largura média de 33 pontos. (Também é menos barulhento do que o exemplo à esquerda.) As três linhas verdes sobrepostas são os resultados dos mesmos três triângulos triangulares de largura (de cima para baixo) de 7, 25 e 51 pontos. Mas, como a largura do pico, neste caso, é de apenas 33 pontos, as proporções uniformes dessas três suavizações são maiores - 0,21, 0,76 e 1,55, respectivamente. Você pode ver que o efeito de distorção de pico (redução da altura do pico e aumento da largura do pico) é maior para o pico mais estreito, porque as taxas mais suaves são maiores. Rácios lisos superiores a 1,0 são raramente utilizados devido à distorção de pico excessiva. Note que mesmo no pior dos casos, as posições dos picos não são efetuadas (assumindo que os picos originais eram simétricos e não sobrepostos por outros picos). Se a retenção da forma do pico é mais importante do que otimizar a relação sinal-ruído, o Savitzky-Golay tem a vantagem sobre a suavidade da média de deslizamento. Em todos os casos, a área total abaixo do pico permanece inalterada. Se as larguras dos picos variarem substancialmente, uma suavidade adaptativa. o que permite que a largura suave varie ao longo do sinal, pode ser usado. O problema com suavização é que muitas vezes é menos benéfico do que você imagina. É muito importante ressaltar que os resultados de suavização, como ilustrado na figura acima, podem ser enganosamente impressionantes, pois empregam uma única amostra de um sinal com ruído que é suavizado em diferentes graus. Isso faz com que o espectador subestime a contribuição do ruído de baixa frequência, que é difícil de estimar visualmente porque há tão poucos ciclos de baixa frequência no registro do sinal. Este problema pode ser visualizado gravando um número de amostras independentes de um sinal ruidoso que consiste em um único pico, conforme ilustrado nas duas figuras abaixo. Esses números mostram dez gráficos sobrepostos com o mesmo pico, mas com ruído branco independente, cada um com uma linha de cor diferente, não suavizada à esquerda e suavizada à direita. A inspeção dos sinais suavizados à direita mostra claramente a variação na posição de pico, altura e largura entre as 10 amostras causadas pelo ruído de baixa frequência que permanece nos sinais suavizados. Sem o ruído, cada pico teria uma altura de pico de 2, centro de pico de 500 e largura de 150. Só porque um sinal parece suave não significa que não há ruído. O ruído de baixa frequência restante nos sinais após a suavização ainda interferirá na medição precisa da posição de pico, altura e largura. (Os scripts de geração abaixo de cada figura requerem que as funções gaussian. m, whitenoise. m e fastsmooth. m sejam baixadas de tinyurl / cey8rwh.) Deve ficar claro que a suavização raramente pode eliminar completamente o ruído, porque a maioria do ruído está espalhada sobre uma ampla gama de freqüências e suavização simplesmente reduz o ruído em parte de sua faixa de freqüência. Apenas para alguns tipos muito específicos de ruído (por exemplo, ruído de frequência discreta ou picos de ponto único) existe a esperança de algo próximo da eliminação total do ruído. A figura à direita abaixo é outro sinal de exemplo que ilustra alguns desses princípios. O sinal consiste em dois picos gaussianos, um localizado em x50 e o segundo em x150. Ambos os picos têm uma altura de pico de 1,0 e um pico de meia largura de 10, e um ruído branco aleatório normalmente distribuído com um desvio padrão de 0,1 foi adicionado a todo o sinal. O intervalo de amostragem do eixo x, no entanto, é diferente para os dois picos, é 0,1 para o primeiro pico (de x0 a 100) e 1,0 para o segundo pico (de x100 a 200). Isso significa que o primeiro pico é caracterizado por dez vezes mais pontos que o segundo pico. Pode parecer que o primeiro pico é mais barulhento do que o segundo, mas isso é apenas uma ilusão de que a relação sinal-ruído para os dois picos é 10. O segundo pico parece menos ruidoso apenas porque há menos amostras de ruído e tendemos a subestimar a dispersão de pequenas amostras. O resultado disto é que quando o sinal é suavizado, o segundo pico é muito mais provável de ser distorcido pelo suave (torna-se mais curto e mais largo) do que o primeiro pico. O primeiro pico pode tolerar uma largura suave muito maior, resultando em um maior grau de redução de ruído. (Da mesma forma, se ambos os picos são medidos com o método de ajuste de curvas de mínimos quadrados, o ajuste do primeiro pico é mais estável com o ruído e os parâmetros medidos desse pico serão cerca de 3 vezes mais precisos do que o segundo pico, porque são 10 vezes mais pontos de dados nesse pico, e a precisão de medição melhora aproximadamente com a raiz quadrada do número de pontos de dados se o ruído for branco). Você pode baixar o arquivo de dados udx no formato TXT ou no formato Matlab MAT. Otimização de suavização. À medida que a proporção de suavização aumenta, o ruído é reduzido rapidamente no início, depois mais lentamente, e a altura do pico também é reduzida, lentamente no início, depois mais rapidamente. O resultado é que o sinal-ruído aumenta rapidamente no início e atinge o máximo. Isto é ilustrado na figura à esquerda para um pico gaussiano com ruído branco (produzido por este script Matlab / Octave). Isto também mostra que a maior parte da redução de ruído é devida a componentes de alta frequência do ruído, enquanto grande parte do ruído de baixa frequência permanece no sinal mesmo quando é suavizado. Qual é a melhor proporção suave? Depende da finalidade da medição de pico. Se o objetivo final da medição for medir a altura ou a largura do pico real, então devem ser usadas proporções suaves abaixo de 0,2 e a suavização Savitzky-Golay é preferida. A medição da altura de picos ruidosos é melhor feita ajustando os dados não suavizados ao invés de obter o máximo dos dados suavizados (consulte CurveFittingC. htmlSmoothing). Mas se o objetivo da medição é medir a posição de pico (valor do eixo x do pico), proporções lisas muito maiores podem ser empregadas se desejado, porque a suavização tem pouco efeito na posição de pico (a menos que o pico seja assimétrico ou o o aumento na largura do pico é tão grande que causa a sobreposição de picos adjacentes). Em aplicações de análise química quantitativa baseadas em calibração por amostras padrão, a redução da altura do pico causada pela suavização não é tão importante. Se as mesmas operações de processamento de sinal forem aplicadas às amostras e aos padrões, a redução da altura de pico dos sinais padrão será exatamente igual à dos sinais de amostra e o efeito será cancelado exatamente. Nesses casos, larguras lisas de 0,5 a 1,0 podem ser usadas, se necessário, para melhorar ainda mais a relação sinal-ruído, como mostrado na figura à esquerda (para um simples retangular de média deslizante). Na química analítica prática, as medições absolutas de altura de pico raramente são necessárias. Calibração contra soluções padrão é a regra. (Lembre-se: o objetivo da análise quantitativa não é medir um sinal, mas medir a concentração do desconhecido.) É muito importante, no entanto, aplicar exatamente os mesmos passos de processamento de sinal aos sinais padrão quanto aos sinais de amostra, caso contrário, um grande erro sistemático pode resultar. Para uma comparação mais detalhada de todos os quatro tipos de suavização considerados acima, consulte SmoothingComparison. html. (a) por razões cosméticas, para preparar um gráfico mais bonito ou mais dramático de um sinal para inspeção visual ou publicações, especificamente para enfatizar o comportamento a longo prazo em curto prazo. or (b) if the signal will be subsequently analyzed by a method that would be degraded by the presence of too much high-frequency noise in the signal, for example if the heights of peaks are to be determined visually or graphically or by using the MAX function, or if the location of maxima, minima, or inflection points in the signal is to be determined automatically by detecting zero-crossings in derivatives of the signal. Optimization of the amount and type of smoothing is very important in these cases (see Differentiation. htmlSmoothing ). But generally, if a computer is available to make quantitative measurements, its better to use least-squares methods on the unsmoothed data, rather than graphical estimates on smoothed data. If a commercial instrument has the option to smooth the data for you, its best to disable smoothing that and record the unsmoothed data you can always smooth it later yourself for visual presentation and it will be better to use the unsmoothed data for an least-squares fitting or other processing that you may want to do later. Smoothing can be used to locate peaks but it should not be used to measure peaks . Care must be used in the design of algorithms that employ smoothing. For example, in a popular technique for peak finding and measurement. peaks are located by detecting downward zero-crossings in the smoothed first derivative. but the position, height, and width of each peak is determined by least-squares curve-fitting of a segment of original unsmoothed data in the vicinity of the zero-crossing. That way, even if heavy smoothing is necessary to provide reliable discrimination against noise peaks, the peak parameters extracted by curve fitting are not distorted by the smoothing. (a) smoothing will not significantly improve the accuracy of parameter measurement by least-squares measurements between separate independent signal samples, (b) all smoothing algorithms are at least slightly lossy, entailing at least some change in signal shape and amplitude, (c) it is harder to evaluate the fit by inspecting the residuals if the data are smoothed, because smoothed noise may be mistaken for an actual signal. and (d) smoothing the signal will seriously underestimate the parameters errors predicted by propagation-of-error calculations and the bootstrap method . Dealing with spikes and outliers. Sometimes signals are contaminated with very tall, narrow spikes or outliers occurring at random intervals and with random amplitudes, but with widths of only one or a few points. It not only looks ugly, but it also upsets the assumptions of least-squares computations because it is not normally-distributed random noise. This type of interference is difficult to eliminate using the above smoothing methods without distorting the signal. However, a median filter, which replaces each point in the signal with the median (rather than the average) of m adjacent points, can completely eliminate narrow spikes with little change in the signal, if the width of the spikes is only one or a few points and equal to or less than m . See en. wikipedia. org/wiki/Medianfilter. The killspikes. m function is another spike-removing function that uses a different approach, which locates and eliminates the spikes and patches over them using linear interpolation from the signal before and after. Unlike conventional smooths, these functions can be profitably applied prior to least-squares fitting functions. (On the other hand, if its the spikes that are actually the signal of interest, and other components of the signal are interfering with their measurement, see CaseStudies. htmlG ). An alternative to smoothing to reduce noise in the above set of unsmoothed signals is ensemble averaging. which can be performed in this case very simply by the Matlab/Octave code plot(x, mean(y)) the result shows a reduction in white noise by about sqrt(10)3.2. This is enough to judge that there is a single peak with Gaussian shape, which can best be measured by curve fitting (covered in a later section ) using the Matlab/Octave code peakfit(xmean(y),0,0,1) , with the result showing excellent agreement with the position, height, and width of the Gaussian peak created in the third line of the generating script (above left). Condensing oversampled signals . Sometimes signals are recorded more densely (that is, with smaller x-axis intervals) than really necessary to capture all the important features of the signal. This results in larger-than-necessary data sizes, which slows down signal processing procedures and may tax storage capacity. To correct this, oversampled signals can be reduced in size either by eliminating data points (say, dropping every other point or every third point) or by replacing groups of adjacent points by their averages. The later approach has the advantage of using rather than discarding extraneous data points, and it acts like smoothing to provide some measure of noise reduction. (If the noise in the original signal is white, and the signal is condensed by averaging every n points, the noise is reduced in the condensed signal by the square root of n. but with no change in frequency distribution of the noise). Video Demonstration. This 18-second, 3 MByte video (Smooth3.wmv ) demonstrates the effect of triangular smoothing on a single Gaussian peak with a peak height of 1.0 and peak width of 200. The initial white noise amplitude is 0.3, giving an initial signal-to-noise ratio of about 3.3. An attempt to measure the peak amplitude and peak width of the noisy signal, shown at the bottom of the video, are initially seriously inaccurate because of the noise. As the smooth width is increased, however, the signal-to-noise ratio improves and the accuracy of the measurements of peak amplitude and peak width are improved. However, above a smooth width of about 40 (smooth ratio 0.2), the smoothing causes the peak to be shorter than 1.0 and wider than 200, even though the signal-to-noise ratio continues to improve as the smooth width is increased. (This demonstration was created in Matlab 6.5. SPECTRUM, the freeware Macintosh signal-processing application, includes rectangular and triangular smoothing functions for any number of points. Spreadsheets. Smoothing can be done in spreadsheets using the shift and multiply technique described above. In the spreadsheets smoothing. ods and smoothing. xls the set of multiplying coefficients is contained in the formulas that calculate the values of each cell of the smoothed data in columns C and E. Column C performs a 7-point rectangular smooth (1 1 1 1 1 1 1) and column E does a 7-point triangular smooth (1 2 3 4 3 2 1), applied to the data in column A. You can type in (or Copy and Paste) any data you like into column A, and you can extend the spreadsheet to longer columns of data by dragging the last row of columns A, C, and E down as needed. But to change the smooth width, you would have to change the equations in columns C or E and copy the changes down the entire column. Its common prac tice to divide the results by the sum of the coefficients so that the net gain is unity and the area under the curve of the smoothed signal is preserved. The spreadsheets UnitGainSmooths. xls and UnitGainSmooths. ods contain a collection of unit-gain convolution coefficients for rectangular, triangular, and Gaussian smooths of width 3 to 29 in both vertical (column) and horizontal (row) format. You can Copy and Paste these into your own spreadsheets. The spreadsheets MultipleSmoothing. xls and MultipleSmoothing. ods demonstrate a more flexible method in which the coefficients are contained in a group of 17 adjacent cells (in row 5, columns I through Y), making it easier to change the smooth shape and width (up to a maximum of 17). In this spreadsheet, the smooth is applied three times in succession, resulting in an effective smooth width of 49 points applied to column G. Compared to Matlab/Octave, spreadsheets are much slower, less flexible, and less easily automated. For example, in these spreadsheets, to change the signal or the number of points in the signal, or to change the smooth width or type, you have to modify the spreadsheet in several spaces, whereas to do the same using the Matlab/Octave fastsmooth function (below), you need only change in input arguments of a single line of code. And combining several different techniques into one spreadsheet is more complicated than writing a Matlab/Octave script that does the same thing. Smoothing in Matlab and Octave . The custom function fastsmooth implements shift and multiply type smooths using a recursive algorithm. (Click on this link to inspect the code, or right-click to download for use within Matlab). Fastsmooth is a Matlab function of the form sfastsmooth(a, w, type, edge) . The argument a is the input signal vector w is the smooth width (a positive integer) type determines the smooth type: type1 gives a rectangular (sliding-average or boxcar) smooth type2 gives a triangular smooth, equivalent to two passes of a sliding average type3 gives a pseudo-Gaussian smooth, equivalent to three passes of a sliding average these shapes are compared in the figure on the left. (See SmoothingComparison. html for a comparison of these smoothing modes). The argument edge controls how the edges of the signal (the first w/2 points and the last w/2 points) are handled. If edge0, the edges are zero. (In this mode the elapsed time is independent of the smooth width. This gives the fastest execution time). If edge1, the edges are smoothed with progressively smaller smooths the closer to the end. (In this mode the execution time increases with increasing smooth widths). The smoothed signal is returned as the vector s. (You can leave off the last two input arguments: fastsmooth(Y, w,type) smooths with edge0 and fastsmooth(Y, w) smooths with type1 and edge0). Compared to convolution-based smooth algorithms, fastsmooth uses a simple recursive algorithm that typically gives much faster execution times, especially for large smooth widths it can smooth a 1,000,000 point signal with a 1,000 point sliding average in less than 0.1 second. Heres a simple example of fastsmooth demonstrating the effect on white noise (graphic ). SegmentedSmooth. m. illustrated on the right, i s a segmented multiple-width d ata smoothing function, based on the fastsmoo th algorithm, which can be useful if the widths of the peaks or the noise level varies substantially across the signal. The syntax is that same as fastsmooth. m, except that the second input argument smoothwidths can be a vector . SmoothY SegmentedSmooth (Y, smoothwidths, type, ends) . The function divides Y into a number of equal-length regions defined by the length of the vector smoothwidths, then smooths each region with a smooth of type type and width defined by the elements of vector smoothwidths. In the graphic example in the figure on the right, smoothwidths31 52 91 . which divides up the signal into three regions and smooths the first region with smoothwidth 31, the second with smoothwidth 51, and the last with smoothwidth 91. Any number of smooth widths and sequence of smooth widths can be used. Type help SegmentedSmooth for other examples examples. DemoSegmentedSmooth. m demonstrates the operation with different signals consisting of noisy variable-width peaks that get progressively wider, like the figure on the right. SmoothWidthTest. m is a simple script that uses the fastsmooth function to demonstrate the effect of smoothing on peak height, noise, and signal-to-noise ratio of a peak. You can change the peak shape in line 7, the smooth type in line 8, and the noise in line 9. A typical result for a Gaussian peak with white noise smoothed with a pseudo-Gaussian smooth is shown on the left. Here, as it is for most peak shapes, the optimal signal-to-noise ratio occurs at a smooth ratio of about 0.8. However, that optimum corresponds to a significant reduction in the peak height . which could be a serious problem. A smooth width about half the width of the original unsmoothed peak produces less distortion of the peak but still achieves a reasonable noise reduction. SmoothVsCurvefit. m is a similar script, but is also compares curve fitting as an alternative method to measure the peak height without smoothing . This effect is explored more completely by the text below, which shows an experiment in Matlab or Octave that creates a Gaussian peak, smooths it, compares the smoothed and unsmoothed version, then uses the max, halfwidth. and trapz functions to show that smoothing reduces the peak height (from 1 to 0.784) and increases the peak width (from 1.66 to 2.13), but has no effect on the total peak area, as long as you measure the total area under the broadened peak. (To learn more about these functions, type help followed by the function name). disp(max(y) halfwidth(x, y,5) trapz(x, y)) disp(max(ysmoothed) halfwidth(x, ysmoothed,5) trapz(x, ysmoothed)) 0.78442 2.1327 1.7725 Smoothing is useful if the signal is contaminated by non-normal noise such as sharp spikes or if the peak height, position, or width are measured by simple methods, but there is no need to smooth the data if the noise is white and the peak parameters are measured by least-squares methods, because the results obtained on the unsmoothed data will be more accurate (see CurveFittingC. htmlSmoothing ). The Matlab/Octave user-defined function condense. m. condense(y, n). returns a condensed version of y in which each group of n points is replaced by its average, reducing the length of y by the factor n. (For x, y data sets, use this function on both independent variable x and dependent variable y so that the features of y will appear at the same x values). The Matlab/Octave user-defined function medianfilter. m. medianfilter(y, w). performs a median-based filter operation that replaces each value of y with the median of w adjacent points (which must be a positive integer). ProcessSignal is a Matlab/Octave command-line function that performs smoothing and differentiation on the time-series data set x, y (column or row vectors). It can employ all the types of smoothing described above. Type help ProcessSignal. Returns the processed signal as a vector that has the same shape as x, regardless of the shape of y. The syntax is ProcessedProcessSignal(x, y, DerivativeMode, w, type, ends, Sharpen, factor1, factor2, SlewRate, MedianWidth) iSignal is an interactive function for Matlab that performs smoothing for time-series signals using all the algorithms discussed above . including the Savitzky-Golay smooth, a median filter, and a condense function, with keystrokes that allow you to adjust the smoothing parameters continuously while observing the effect on your signal instantly, making it easy to observe how different types and amounts of smoothing effect noise and signal, such as the height, width, and areas of peaks. (Other functions include differentiation, peak sharpening, interpolation, least-squares peak measurement, and a frequency spectrum mode that shows how smoothing and other functions can change the frequency spectrum of your signals). The simple script iSignalDeltaTest demonstrates the frequency response of iSignals smoothing functions by applying them to a single-point spike. allowing you to change the smooth type and the smooth width to see how the the frequency response changes. View the code here or download the ZIP file with sample data for testing. Use the A and Z keys to increase and decrease the smooth width, and the S key to cycle through the available smooth types. Hint: use the Gaussian smooth and keep increasing the smooth width until the peak shows. Note: you can right-click on any of the m-file links on this site and select Save Link As. to download them to your computer for use within Matlab. Unfortunately, iSignal does not currently work in Octave.
No comments:
Post a Comment