Tuesday 14 November 2017

Mudança Média Filtro Kernel


O Guia de cientistas e engenheiros para processamento de sinal digital Por Steven W. Smith, Ph. D. Capítulo 14: Introdução aos Filtros Digitais Filtros de Passagem Alta, Passagem de Banda e Rejeição de Banda Os filtros de passagem de alta, passagens de banda e rejeição de bandas são projetados começando por um filtro passa-baixa e depois convertendo-o na resposta desejada . Por esse motivo, a maioria das discussões sobre o design do filtro apenas fornece exemplos de filtros passa-baixa. Existem dois métodos para a conversão passa-baixa para alta passagem: inversão espectral e inversão espectral. Ambos são igualmente úteis. Um exemplo de inversão espectral é mostrado em 14-5. A Figura (a) mostra um kernel de filtro de passagem baixa chamado windowed-sinc (o tópico do Capítulo 16). Este kernel de filtro tem 51 pontos de extensão, embora muitas das amostras tenham um valor tão pequeno que pareça ser zero neste gráfico. A resposta de frequência correspondente é mostrada em (b), encontrada adicionando 13 zeros ao kernel de filtro e levando uma FFT de 64 pontos. Duas coisas devem ser feitas para alterar o kernel do filtro de passagem baixa em um kernel de filtro de passagem alta. Primeiro, mude o sinal de cada amostra no kernel de filtro. Em segundo lugar, adicione um à amostra no centro da simetria. Isso resulta no kernel de filtro de passagem alta mostrado em (c), com a resposta de freqüência mostrada em (d). A inversão espectral flips a resposta de freqüência top-to-bottom. Alterando as passas em batentes de batente e as batentes para as passas. Em outras palavras, ele muda um filtro de passagem baixa para passe alto, passe alto para passe baixo, passagem de banda para rejeição de banda ou rejeição de banda para banda passada. A Figura 14-6 mostra por que essa modificação de dois passos para o domínio do tempo resulta em um espectro de freqüência invertido. Em (a), o sinal de entrada, x n, é aplicado em dois sistemas em paralelo. Um desses sistemas é um filtro passa-baixa, com uma resposta de impulso dada por h n. O outro sistema não faz nada ao sinal e, portanto, tem uma resposta de impulso que é uma função delta, delta n. A saída global, y n, é igual à saída do sistema all-pass menos a saída do sistema passa-baixa. Uma vez que os componentes de baixa frequência são subtraídos do sinal original, apenas os componentes de alta frequência aparecem na saída. Assim, é formado um filtro passa-alto. Isso pode ser executado como uma operação em dois passos em um programa de computador: execute o sinal através de um filtro passa-baixa, e depois subtraia o sinal filtrado do original. No entanto, toda a operação pode ser realizada em um estágio de sinal combinando os dois kernels de filtro. Conforme descrito no Capítulo 7, sistemas paralelos com saídas agregadas podem ser combinados em uma única etapa, adicionando suas respostas de impulso. Conforme mostrado em (b), o kernel de filtro para o filtro passa-alto é dado por: delta n-h n. Ou seja, mude o sinal de todas as amostras e, em seguida, adicione uma à amostra no centro da simetria. Para que esta técnica funcione, os componentes de baixa freqüência que saem do filtro passa-baixa devem ter a mesma fase que os componentes de baixa freqüência que saem do sistema de passagem total. Caso contrário, uma subtração completa não pode ocorrer. Isso coloca duas restrições no método: (1) o kernel de filtro original deve ter simetria esquerda-direita (ou seja, uma fase zero ou linear) e (2) o impulso deve ser adicionado no centro da simetria. O segundo método para passagem baixa para conversão de passagem alta, inversão espectral. Está ilustrado na Fig. 14-7. Assim como antes, o kernel do filtro de passagem baixa em (a) corresponde à resposta de freqüência em (b). O kernel de filtro de passagem alta, (c), é formado alterando o sinal de cada outra amostra em (a). Conforme mostrado em (d), isso alterna o domínio de freqüência para a esquerda para a direita. 0 torna-se 0,5 e 0,5 torna-se 0. A frequência de corte do exemplo de filtro passa-baixa é de 0,15, resultando na frequência de corte do filtro passa alta sendo 0,35. Alterar o sinal de cada outra amostra é equivalente a multiplicar o kernel de filtro por uma sinusoide com uma freqüência de 0,5. Conforme discutido no Capítulo 10, isso tem o efeito de mudar o domínio de freqüência em 0,5. Olhe para (b) e imagine as freqüências negativas entre -0,5 e 0 que são de imagem espelhada das freqüências entre 0 e 0,5. As frequências que aparecem em (d) são as frequências negativas de (b) deslocadas em 0,5. Por fim, Figs. 14-8 e 14-9 mostram como os kernels de filtro passa-alto e passa-alto podem ser combinados para formar filtros de banda passada e de rejeição de banda. Em resumo, adicionar os kernels de filtro produz um filtro de rejeição de banda, ao mesmo tempo em que convolver os kernels de filtro produz um filtro passa-banda. Estes são baseados na forma como os sistemas em cascata e paralelos são combinados, conforme discutido no Capítulo 7. Podem também ser utilizadas múltiplas combinações destas técnicas. Por exemplo, um filtro de passagem de banda pode ser projetado adicionando os dois kernels de filtro para formar um filtro passa-banda e, em seguida, use inversão espectral ou inversão espectral conforme descrito anteriormente. Todas essas técnicas funcionam muito bem com poucas surpresas. Leituras Tutorial de gráficos por computador Filtragem de imagens Índice Introdução O filtro de imagem permite que você aplique vários efeitos nas fotos. O tipo de filtragem de imagens descrita aqui usa um filtro 2D semelhante ao incluído no Paint Shop Pro como filtro definido pelo usuário e no Photoshop como filtro personalizado. Convolução O truque de filtragem de imagens é que você possui uma matriz de filtro 2D e a imagem 2D. Então, para cada pixel da imagem, tome a soma dos produtos. Cada produto é o valor de cor do pixel atual ou um vizinho dele, com o valor correspondente da matriz de filtro. O centro da matriz do filtro deve ser multiplicado pelo pixel atual, os outros elementos da matriz do filtro com os pixels vizinhos correspondentes. Esta operação onde você tira a soma de produtos de elementos de duas funções 2D, onde você permite que uma das duas funções se mova sobre cada elemento da outra função, é chamada de Convolução ou Correlação. A diferença entre convolução e correlação é que, para a convolução, você deve espelhar a matriz do filtro, mas geralmente é simétrico de qualquer maneira, então não há diferença. Os filtros com convolução são relativamente simples. Filtros mais complexos, que podem usar funções mais sofisticadas, também existem e podem fazer coisas muito mais complexas (por exemplo, o filtro de lápis colorido no Photoshop), mas tais filtros não são discutidos aqui. A operação de convolução 2D requer um loop de 4 duplas, por isso não é extremamente rápido, a menos que você use filtros pequenos. Aqui, geralmente, estamos usando filtros de 3x3 ou 5x5. Há algumas regras sobre o filtro: seu tamanho precisa ser desigual, de modo que ele tenha um centro, por exemplo, 3x3, 5x5 e 7x7 estão ok. Ele não precisa, mas a soma de todos os elementos do filtro deve ser 1 se desejar que a imagem resultante tenha o mesmo brilho que o original. Se a soma dos elementos for maior do que 1, o resultado será uma imagem mais brilhante, e se for menor que 1, uma imagem mais escura. Se a soma for 0, a imagem resultante não é necessariamente completamente preta, mas ficará muito escura. A imagem tem dimensões finitas, e se você é, por exemplo, calculando um pixel no lado esquerdo, não há mais pixels à esquerda, enquanto estes são necessários para a convolução. Você pode usar o valor 0 aqui ou envolver o outro lado da imagem. Neste tutorial, o envolvimento é escolhido porque pode ser feito facilmente com uma divisão de módulo. Os valores de pixels resultantes após a aplicação do filtro podem ser negativos ou maiores do que 255, se isso acontecer, você pode truncar os mesmos para que os valores menores que 0 sejam Fez 0 e valores maiores que 255 são configurados para 255. Para valores negativos, você também pode ter o valor absoluto em vez disso. No Domínio de Fourier ou Domínio de Freqüência, a operação de convolução torna-se uma multiplicação em vez disso, que é mais rápida. No domínio de Fourier, filtros mais poderosos e maiores podem ser aplicados mais rapidamente, especialmente se você usar a Transformada de Fourier Rápida. Mais sobre isso é no artigo Fourier Transform. Neste artigo, observe bem alguns pequenos filtros muito típicos, como borrão, detecção de bordas e gravação em relevo. Os filtros de imagem não são possíveis para aplicativos e jogos em tempo real, mas eles são úteis no processamento de imagem. Os filtros de áudio digital e eletrônicos também funcionam com convolução, mas em 1D. Heres o código que será usado para experimentar diferentes filtros. Além de usar uma matriz de filtro, ele também possui um fator multiplicador e um viés. Depois de aplicar o filtro, o fator será multiplicado pelo resultado, e o viés adicionado a ele. Então, se você tiver um filtro com um elemento de 0,25, mas o fator é definido como 2, todos os elementos do filtro são, em teoria, multiplicados por dois, de modo que o elemento 0.25 é realmente 0.5. O viés pode ser usado se você quiser tornar a imagem resultante mais brilhante. O resultado de um pixel é armazenado em flutuadores vermelho, verde e azul, antes de convertê-lo para o valor inteiro no buffer de resultados. O próprio cálculo do filtro é um loop de 4 duplas que deve passar por cada pixel da imagem e, em seguida, através de cada elemento da matriz do filtro. A localização imageX e imageY é calculada para que, para o elemento central do filtro, seja x, y, mas para os outros elementos, será um pixel da imagem para a esquerda, direita, superior ou inferior de x, y. O seu módulo é dividido pela largura (w) ou altura (h) da imagem para que os pixels fora da imagem sejam enrolados. Antes do módulo dividi-lo, w ou h também são adicionados a ele, porque esta divisão de módulo não funciona corretamente para valores negativos. Agora, o pixel (-1, -1) se transformará corretamente em pixel (w-1, h-1). Se você deseja obter o valor absoluto de valores menores que zero em vez de truncar, use esse código em vez disso:

No comments:

Post a Comment