Gaussian moving average code no Brasil


Gaussian Smoothing Nomes comuns: suavização gaussiana Breve descrição O operador de alisamento gaussiano é 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 gueira Gaussiana (em forma de sino). Este kernel possui algumas propriedades especiais que são detalhadas abaixo. Como funciona A distribuição gaussiana em 1-D tem a forma: onde é 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 está 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 simétrico circular) tem a forma: Esta 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 esta distribuição 2-D como uma função de propagação de pontos, e isso é conseguido por convolução. Uma vez que a imagem é armazenada como uma coleção de pixels discretos, precisamos produzir uma aproximação discreta da função Gaussiana antes que possamos realizar a convolução. Em teoria, a distribuição gaussiana não é zero em todos os lugares, o que exigiria um núcleo de convolução infinitamente grande, mas, na prática, é efetivamente zero mais do que cerca de três desvios padrão da média e, portanto, podemos truncar o núcleo neste ponto. A Figura 3 mostra um kernel de convolução de número inteiro adequado que se aproxima de um gaussiano com a 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 de forma não linear ao longo do pixel. Integramos o valor do gaussiano em todo o pixel (somando o Gaussiano em incrementos de 0,001). As integrais não são inteiros: redimensionamos a matriz de modo que os cantos tivessem o valor 1. Finalmente, o 273 é a soma de todos os valores na máscara. Figura 3 Aproximação discreta à função Gaussiana com 1.0 Uma vez que o kernel adequado foi calculado, então o alisamento gaussiano pode ser realizado usando métodos de convolução padrão. A convolução pode de fato ser realizada com bastante rapidez, uma vez que a equação para Gaussian isotrópico 2-D mostrada acima é separável em componentes x e y. Assim, a convolução 2-D pode ser realizada pela primeira convolução com um gaussiano 1-D na direção x e, em seguida, convolvendo com outro gaussiano 1-D na direção y. (O gaussiano é, de fato, o único operador completamente circularmente simétrico que pode ser decomposto dessa maneira). A Figura 4 mostra o kernel de componente x 1-D que seria usado para produzir o kernel completo mostrado na Figura 3 (após a escala em 273 , 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 o 5x5 mostrado 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 um alisamento gaussiano com um grande desvio padrão é convolver uma imagem várias vezes com um gaussiano menor. Embora esta seja computacionalmente complexa, pode ter aplicabilidade se o processamento for realizado usando uma tubulação de hardware. O filtro gaussiano não só possui utilidade em aplicações de engenharia. Também atrai a atenção dos biólogos computacionais porque foi atribuído com alguma quantidade de plausibilidade biológica, e. Algumas células nas vias visuais do cérebro geralmente têm uma resposta aproximadamente gaussiana. Diretrizes para uso O efeito do alisamento gaussiano é borrar uma imagem, de forma semelhante ao filtro médio. O grau de suavização é determinado pelo desvio padrão do gaussiano. (Desvio padrão maior Gaussians, é claro, requerem núcleos de convolução maiores para serem representados com precisão.) O gaussiano produz uma média ponderada de cada área de pixels, com a média ponderada mais para o valor dos pixels centrais. Isso contrasta com a média ponderada uniformemente média. Devido a isso, um gaussiano proporciona um alisamento mais suave e preserva bordas melhor do que um filtro médio de tamanho similar. Uma das principais justificativas para o uso do Gaussiano como filtro de suavização deve-se à sua resposta de freqüência. A maioria dos filtros de suavização baseados em convolução atuam como filtros de freqüência de passagem baixa. 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 é, seu efeito em diferentes freqüências espaciais, pode ser vista tomando a transformada de Fourier do filtro. A Figura 5 mostra as respostas de frequência de um filtro médio 1-D com largura 5 e também de um filtro gaussiano com 3. Figura 5 Respostas de frequência do filtro Box (isto é, média) (largura 5 pixels) e filtro gaussiano (3 pixels). O eixo da frequência espacial é marcado em ciclos por pixel e, portanto, nenhum valor acima de 0,5 tem um significado real. Ambos os filtros atenuam as freqüências altas mais do que as baixas freqüências, mas o filtro médio exibe oscilações em sua resposta de freqüência. O gaussiano, por outro lado, não mostra oscilações. Na verdade, a forma da curva de resposta de freqüência é em si (meio a) Gaussiano. Então, ao escolher um filtro Gaussiano de tamanho adequado, podemos ter bastante confiança sobre qual faixa de freqüências espaciais ainda estão presentes na imagem após a filtragem, o que não é o caso do filtro médio. Isso tem conseqüências para algumas técnicas de detecção de bordas, conforme mencionado na seção sobre passagens zero. (O filtro gaussiano também revela-se muito parecido com o filtro de suavização ideal para a detecção de borda, de acordo com o critério utilizado para derivar o detector de borda Canny). Para ilustrar o efeito do alisamento com filtros gaussianos sucessivamente maiores e maiores. Mostra o efeito da filtragem com um Gaussian de 1.0 (e tamanho do kernel 52155). Mostra o efeito da filtragem com um Gaussian of 2.0 (e tamanho do noz 92159). Mostra o efeito da filtragem com um Gaussian de 4.0 (e tamanho do kernel 1521515). Agora consideramos o uso do filtro gaussiano para redução de ruído. Por exemplo, considere a imagem que foi corrompida por ruído gaussiano com uma média de zero e 8. Suavizando isso com um rendimento Gaussiano 52155 (Compare esse resultado com o conseguido pelos filtros médio e médio.) O ruído salino e pimenta é mais desafiador Para um filtro gaussiano. Aqui vamos suavizar a imagem que foi corrompida por 1 barril de sal e pimenta (ou seja, bits individuais foram lançados com probabilidade 1). A imagem mostra o resultado do alisamento gaussiano (usando a mesma convolução como acima). Compare isso com o original Observe que muito do ruído ainda existe e que, embora tenha diminuído de magnitude um pouco, ele foi manchado em uma região espacial maior. Aumentar o desvio padrão continua a diminuir a intensidade do ruído, mas também atenua significativamente os detalhes de alta freqüência (por exemplo, as margens), como mostrado na Experiência interativa. Você pode experimentar de forma interativa com este operador, clicando aqui. A partir do ruído gaussiano (média 0, 13), a imagem corrompida calcula o filtro médio e o alisamento de filtro Gaussiano em várias escalas, e compara cada um em termos de remoção de ruído versus perda de detalhes. Em quantos desvios-padrão da média, um Gaussiano cai para 5 do seu valor máximo. Com base nisso, sugere um tamanho de kernel quadrado adequado para um filtro gaussiano com s. Estimar a resposta de freqüência para um filtro gaussiano por Gaussian suavizando uma imagem e tomando sua transformada de Fourier tanto antes como depois. Compare isso com a resposta de freqüência de um filtro médio. Como o tempo necessário para suavizar com um filtro Gaussiano se compara com o tempo necessário para suavizar com um filtro médio para um núcleo do mesmo tamanho Observe que, em ambos os casos, a convolução pode ser acelerada consideravelmente ao explorar determinados recursos do kernel. Referências E. Davies Visão da máquina: teoria, algoritmos e praticidades. Academic Press, 1990, pp 42 - 44. R. Gonzalez e R. Woods Processamento de imagem digital. Addison-Wesley Publishing Company, 1992, p. 191. R. Haralick e L. Shapiro Computer and Robot Vision. Addison-Wesley Publishing Company, 1992, Vol. 1, cap. 7. B. Horn Robot Vision. MIT Press, 1986, cap. 8. D. Vernon Machine Vision. Prentice-Hall, 1991, pp 59 - 61, 214. Informações locais Informações específicas sobre este operador podem ser encontradas aqui. Um conselho mais geral sobre a instalação HIPR local está disponível na seção introdutória da Informação Local. Imagens de Mídia A explicação abaixo pertence ao livro Visão de Computador: Algoritmos e Aplicações de Richard Szeliski e LearningOpenCV Smoothing. Também chamado de desfocagem. É uma operação de processamento de imagem simples e freqüentemente usada. Existem muitas razões para suavizar. Neste tutorial, vamos nos concentrar no alisamento para reduzir o ruído (outros usos serão vistos nos seguintes tutoriais). Para realizar uma operação de suavização, aplicaremos um filtro à nossa imagem. O tipo mais comum de filtros é linear. No qual um valor de pixel 8217 de saída (isto é) é determinado como uma soma ponderada de valores de pixels de entrada (isto é): ajuda a visualizar um filtro como uma janela de coeficientes que desliza pela imagem. Existem muitos tipos de filtros, aqui vamos mencionar os mais usados: Filtro de caixa normalizado Este filtro é o mais simples de todos. Cada pixel de saída é a média de seus vizinhos do kernel (todos eles contribuem com pesos iguais) O núcleo está abaixo: Gaussiano Filtro Provavelmente o filtro mais útil (embora não seja o mais rápido). A filtragem gaussiana é feita convolvendo cada ponto na matriz de entrada com um kernel Gaussiano e depois somando todos para produzir a matriz de saída. Apenas para tornar a imagem mais clara, lembre-se de como um kernel Gaussian 1D parece Assumir que uma imagem é 1D, você pode notar que o pixel localizado no meio teria o maior peso. O peso de seus vizinhos diminui à medida que a distância espacial entre eles eo pixel central aumenta. Lembre-se de que um gaussiano 2D pode ser representado como: Filtro médio O filtro médio percorre cada elemento do sinal (neste caso, a imagem) e substitua cada pixel pela mediana dos pixels vizinhos (localizado em um bairro quadrado ao redor do pixel avaliado ). Filtro bilateral Até agora, explicamos alguns filtros, cujo objetivo principal é alisar uma imagem de entrada. No entanto, às vezes os filtros não só dissolvem o ruído, mas também suavizam as bordas. Para evitar isso (em certa medida pelo menos), podemos usar um filtro bilateral. De maneira análoga ao filtro gaussiano, o filtro bilateral também considera os pixels vizinhos com pesos atribuídos a cada um deles. Esses pesos têm dois componentes, o primeiro deles é a mesma ponderação usada pelo filtro gaussiano. O segundo componente leva em consideração a diferença de intensidade entre os pixels vizinhos e o avaliado. Para uma explicação mais detalhada, você pode verificar este link. O que faz esse programa. Carrega uma imagem. Aplica 4 tipos diferentes de filtros (explicado em Teoria) e mostra as imagens filtradas sequencialmente. Explicação. Let8217s verificam as funções OpenCV que envolvem apenas o procedimento de suavização, já que O resto já é conhecido. Filtro de bloco normalizado: o OpenCV oferece a função desfocada para executar o suavização com este filtro. Especificamos 4 argumentos (mais detalhes, marque a Referência): src. Imagem de origem dst. Tamanho da imagem do destino (w, h). Define o tamanho do kernel a ser usado (de largura w pixels e altura h pixels) Ponto (-1, -1). Indica onde o ponto de âncora (o pixel avaliado) está localizado em relação ao bairro. Se houver um valor negativo, o centro do kernel é considerado o ponto de ancoragem. É executado pela função GaussianBlur: Aqui usamos 4 argumentos (mais detalhes, verifique a referência OpenCV):

Comments