Moving Average Image Filter Matlab


Criado em quarta-feira, 08 de outubro de 2008 20:04 Atualizado em quinta-feira, 14 de março de 2013 01:29 Escrito por Batuhan Osmanoglu Acessos: 41159 Média móvel em Matlab Muitas vezes eu me encontro na necessidade de promediar os dados que tenho para reduzir o ruído um pouco pouco. Eu escrevi algumas funções para fazer exatamente o que eu quero, mas os matlabs criados na função de filtro funcionam muito bem também. Aqui vou escrever sobre dados em média 1D e 2D. O filtro 1D 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 de numerador para o filtro (b), o coeficiente de 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 funciona o filtro, você pode digitar: Aqui está uma implementação rápida e suja de um filtro médio 16 por 16 em movimento. Primeiro precisamos definir o filtro. Como tudo o que queremos é contribuição igual de todos os vizinhos, podemos usar apenas a função. Nós dividimos tudo com 256 (1616), uma vez que não queremos alterar 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 o Azimuth é mapeado no eixo X. O filtro tinha 4 pixels de largura em alcance e 16 pixels de largura em Azimuth. Preciso testar algumas técnicas básicas de processamento de imagem no Matlab. Preciso testar e comparar especialmente dois tipos de filtros: filtro médio e filtro mediano. Para suavizar a imagem usando a filtragem mediana, há uma ótima função medfilt2 da caixa de ferramentas de processamento de imagem. Existe alguma função semelhante para o filtro médio? Ou como usar a função filter2 para criar o filtro médio. Uma das coisas mais importantes para mim é ter a possibilidade de definir o raio do filtro. Isto é, Para o filtro mediano, se eu quiser o raio 3 x 3 (máscara), eu apenas uso, eu gostaria de conseguir algo semelhante para o filtro médio. Perguntou 15 de novembro às 16:12 Eu vejo boas respostas já foram dadas, mas pensei que seria bom apenas dar uma maneira de realizar filtragem média no MATLAB sem usar funções especiais ou caixas de ferramentas. Isso também é muito bom para entender exatamente como o processo funciona, pois é necessário definir explicitamente o kernel de convolução. O kernel de filtro médio é, por sorte, muito fácil: note que, para imagens em cores, você deve aplicar isso a cada um dos canais da imagem. User8264: Eu não tenho acesso ao livro agora, mas geralmente o kernel Gaussiano fornece um efeito de suavização mais suave e tende a preservar as bordas melhor do que um filtro médio do mesmo tamanho. Pense na resposta de freqüência do filtro passa-baixa em ambos os casos. Aqui está uma página com uma boa explicação: homepages. inf. ed. ac. ukrbfHIPR2gsmooth. htm ndash Amro Aug 1 14 em 9: 48 Este tutorial discute como usar MATLAB para processamento de imagem. Alguma familiaridade com MATLAB é assumida (você deve saber como usar matrizes e escrever um arquivo M). É útil ter o MATLAB Image Processing Toolbox, mas, felizmente, nenhuma caixa de ferramentas é necessária para a maioria das operações. Os comandos que requerem o Image Toolbox são indicados com Image Toolbox. Representação da imagem Existem cinco tipos de imagens no MATLAB. Escala de cinza. Uma imagem em escala de cinza M pixels alta e N pixels de largura é representada como uma matriz de tipo de dados duplo de tamanho M N. Os valores dos elementos (por exemplo, MyImage (m, n)) indicam as intensidades de escala de cinza de pixels em 0,1 com 0black e 1white. Truecolor RGB. Uma imagem truecolor vermelho-verde-azul (RGB) é representada como uma matriz dupla M N 3 tridimensional. Cada pixel tem componentes vermelhos, verdes e azuis ao longo da terceira dimensão com valores em 0,1, por exemplo, os componentes de cor do pixel (m, n) são MyImage (m, n, 1) vermelho, MyImage (m, n, 2) verde, MyImage (m, n, 3) azul. Indexed. As imagens indexadas (paletizadas) são representadas com uma matriz de índice de tamanho M N e uma matriz de mapa de cores de tamanho K 3. O mapa de cores contém todas as cores usadas na imagem e a matriz de índice representa os pixels, referindo-se a cores no mapa de cores. Por exemplo, se a 22ª cor for magenta MyColormap (22, :) 1,0,1. Então MyImage (m, n) 22 é um pixel de cor magenta. Uma imagem binária é representada por uma matriz lógica M N onde os valores de pixel são 1 (verdadeiro) ou 0 (falso).uint8. Este tipo usa menos memória e algumas operações calculam mais rápido do que com tipos duplos. Por simplicidade, este tutorial não discute uint8 ainda mais. Grayscale geralmente é o formato preferido para processamento de imagem. Nos casos que exigem cor, uma imagem de cor RGB pode ser decomposta e manipulada como três imagens separadas em escala de cinza. Imagens indexadas devem ser convertidas em escala de cinza ou RGB para a maioria das operações. Abaixo estão algumas manipulações e conversões comuns. Alguns comandos exigem o Image Toolbox e são indicados com Image Toolbox. Leitura e escrita de arquivos de imagem MATLAB pode ler e gravar imagens com os comandos imread e imwrite. Embora um número razoável de formatos de arquivo seja suportado, alguns não são. Use imformats para ver o que sua instalação suporta: quando lê imagens, um problema infeliz é que imread retorna os dados da imagem no tipo de dados uint8, que deve ser convertido em duplo e redimensionado antes de usar. Então, em vez de ligar diretamente para mim, uso a seguinte função de arquivo M para ler e converter imagens: clique com o botão direito do mouse e salve getimage. m para usar esta função M. Se a imagem baboon. png estiver no diretório atual (ou em algum lugar no caminho de pesquisa MATLAB), você pode lê-lo com MyImage getimage (baboon. png). Você também pode usar caminhos parciais, por exemplo, se a imagem estiver no diretório atual gtimages com getimage (imagesbaboon. png). Para escrever uma imagem em escala de cinza ou RGB, use Tome cuidado para que MyImage seja uma matriz dupla com elementos em 0,1, de forma inadequada, o arquivo salvo provavelmente estará em branco. Ao escrever arquivos de imagem, recomendo usar o formato de arquivo PNG. Este formato é uma escolha confiável, uma vez que é sem perdas, suporta RGB truecolor e comprime muito bem. Use outros formatos com cautela. Operações básicas Abaixo estão algumas operações básicas em uma imagem em escala de cinza u. Os comandos que requerem o Image Toolbox são indicados com Image Toolbox. (Nota: Para qualquer matriz, a sintaxe u (:) significa desenrolar você em um vetor de coluna. Por exemplo, se você é 1,50,2. Então você (:) é 1052.) Por exemplo, a potência do sinal de imagem é usada em Informando relação sinal-ruído (SNR) e pico de relação sinal-ruído (PSNR). Dado imagem limpa e imagem contaminada com ruído, tome cuidado com a norma. O comportamento é norma (v) no vetor v calcula sqrt (soma (v.2)). Mas a norma (A) na matriz A calcula a norma da matriz L 2 induzida, então a norma (A) certamente não é sqrt (soma (A (:) 2)). No entanto, é um erro fácil usar a norma (A) onde deveria ter sido norma (A (:)). Filtros lineares A filtragem linear é a técnica de pedra angular do processamento de sinal. Para apresentar brevemente, um filtro linear é uma operação em que, em cada pixel x m, n de uma imagem, uma função linear é avaliada no pixel e seus vizinhos para calcular um novo valor de pixel y m, n. Um filtro linear em duas dimensões tem a forma geral onde x é a entrada, y é a saída, e h é a resposta de impulso do filtro. Diferentes opções de h levam a filtros que suavizam, afiam e detectam bordas, para citar algumas aplicações. O lado direito da equação acima é denotado de forma concisa como h x e é chamado de convolução de h e x. Filtragem de domínio espacial O filtragem linear bidimensional é implementada em MATLAB com conv2. Infelizmente, o conv2 só pode lidar com filtragem perto dos limites da imagem por zero-padding, o que significa que os resultados de filtragem geralmente são inadequados para pixels próximos ao limite. Para contornar isso, podemos abordar a imagem de entrada e usar a opção válida ao chamar conv2. A seguinte função M faz isso. Clique com o botão direito do mouse e salve conv2padded. m para usar esta função M. Aqui estão alguns exemplos: Um filtro 2D h é dito ser separável se ele pode ser expresso como o produto externo de dois filtros 1D h1 e h2. Isto é, h h1 (:) h2 (:). É mais rápido passar h1 e h2 do que h. Como é feito acima para a janela média móvel e o filtro gaussiano. De fato, os filtros hx e hy da Sobel também são separáveis, o que é h1 e h2 Filtragem de domínio de Fourier A filtragem de domínio espacial com conv2 é facilmente uma operação computacionalmente dispendiosa. Para um filtro K K em uma imagem M N, conv2 custa O (MNK 2) adições e multiplicações, ou O (N 4), supondo M N K. Para filtros grandes, a filtragem no domínio de Fourier é mais rápida, já que o custo computacional é reduzido para O (N 2 log N). Usando a propriedade de convolução-multiplicação da transformação de Fourier, a convolução é calculada de forma equivalente. O resultado é equivalente a conv2padded (x, h), exceto perto do limite, onde o cálculo acima usa extensão de limite periódico. A filtragem baseada em Fourier também pode ser feita com a extensão de limite simétrica refletindo a entrada em cada direção: (Nota: Um método ainda mais eficiente é a filtragem de sobreposição de FFT. A Caixa de ferramentas de processamento de sinal implementa a sobreposição de FFT em uma dimensão em fftfilt .) Filtros não lineares Um filtro não linear é uma operação em que cada pixel filtrado ym, n é uma função não linear de xm, n e seus vizinhos. Aqui discutimos brevemente alguns tipos de filtros não-lineares. Filtros de estatística de pedidos Se você tiver o Image Toolbox, os filtros de estatística de pedidos podem ser executados com ordfilt2 e medfilt2. Um filtro estatístico de pedidos classifica os valores de pixels em uma vizinhança e seleciona o k maior valor. Os filtros min, max e mediana são casos especiais. Filtros morfológicos Se você tem o Image Toolbox, o bwmorph implementa várias operações morfológicas em imagens binárias, como erosão, dilatação, abertura, fechamento e esqueleto. Também há comandos disponíveis para morfologia em imagens em escala de cinza: imerode. Imdilate e imtophat. entre outros. Construa seu próprio filtro Ocasionalmente, queremos usar um novo filtro que o MATLAB não tenha. O código abaixo é um modelo para implementar filtros. (Nota: Uma reivindicação equivocada freqüente é que os loops no MATLAB são lentos e devem ser evitados. Isso já foi verdade, de volta ao MATLAB 5 e anteriores, mas os loops em versões modernas são razoavelmente rápidos.) Por exemplo, o filtro médio alfa-cortado Ignora o d 2 mais baixo e d 2 valores mais altos na janela, e calcula os valores restantes de 2 d (2 r 1). O filtro é um equilíbrio entre um filtro médio e um filtro médio. O filtro médio alinhado pode ser implementado no modelo como, como outro exemplo, o filtro bilateral é

Comments