Moving average filter matlab code


Este tutorial discute como usar o MATLAB para processamento de imagem. Alguma familiaridade com MATLAB é assumida (você deve saber como usar matrizes e escrever um M-arquivo). É ú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 de imagem Existem cinco tipos de imagens no MATLAB. Grayscale. Uma imagem de escala de cinza M pixels de altura 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)) denotam as intensidades de escala de cinza de pixel em 0,1 com 0 preto e 1 branco. Truecolor RGB. Uma imagem truecolor vermelho-verde-azul (RGB) é representada como uma matriz dupla tridimensional M N 3. 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) blue. Indexed. Imagens indexadas (paletadas) são representadas com uma matriz de índice de tamanho M N e uma matriz de mapa de cor de tamanho K 3. O mapa de cores mantém todas as cores usadas na imagem ea matriz de índice representa os pixels consultando cores no mapa de cores. Por exemplo, se a cor 22 é 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. Esse tipo usa menos memória e algumas operações calculam mais rápido do que com tipos duplos. Para simplificar, este tutorial não discute mais uint8. Grayscale é geralmente o formato preferido para processamento de imagem. Em casos que requerem cor, uma imagem em cores RGB pode ser decomposta e tratada como três imagens em escala de cinza separadas. As imagens indexadas devem ser convertidas para tons de cinza ou RGB para a maioria das operações. Abaixo estão algumas manipulações e conversões comuns. Alguns comandos requerem o Image Toolbox e são indicados com Image Toolbox. Ler e gravar arquivos de imagem O MATLAB pode ler e gravar imagens com os comandos imread e imwrite. Embora um número razoável de formatos de arquivo são suportados, alguns não são. Use imformats para ver o que sua instalação suporta: Ao ler imagens, um problema lamentável é que imread retorna os dados de imagem no tipo de dados uint8, que deve ser convertido em duplo e rescaled antes de usar. Então, em vez de chamar imread diretamente, eu uso a seguinte função M-file 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 está no diretório atual (ou em algum lugar no caminho de busca 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 gravar uma imagem em escala de cinza ou RGB, use Tome cuidado para que MyImage seja uma matriz dupla com elementos em 0,1if incorretamente dimensionado, o arquivo salvo provavelmente ficará em branco. Ao escrever arquivos de imagem, eu recomendo usar o formato de arquivo PNG. Este formato é uma escolha confiável, uma vez que é sem perdas, suporta truecolor RGB e compacta muito bem. Use outros formatos com cuidado. Operações básicas Abaixo estão algumas operações básicas em uma imagem de 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 u em um vetor de coluna. Por exemplo, se u 1,50,2. Então u (:) é 1052.) Por exemplo, a potência do sinal de imagem é usada em Computando a relação sinal-ruído (SNR) ea relação pico sinal-ruído (PSNR). Dada imagem limpa uclean e ruído contaminado u imagem, Tenha 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 a norma (A (:)). Filtros lineares A filtragem linear é a técnica fundamental do processamento de sinais. Para introduzir 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 do impulso do filtro. Diferentes escolhas de h levam a filtros que suavizam, afiam e detectam bordas, para citar algumas aplicações. O lado direito da equação acima é denotado concisamente como h x e é chamado a convolução de h e x. Filtragem do domínio espacial A filtragem linear bidimensional é implementada no MATLAB com conv2. Infelizmente, o conv2 só pode lidar com a filtragem perto dos limites da imagem por preenchimento zero, o que significa que os resultados de filtragem são geralmente inadequados para pixels próximos ao limite. Para contornar isso, podemos preencher 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. Ou seja, h h1 (:) h2 (:). É mais rápido passar h1 e h2 do que h. Como é feito acima para a janela de média móvel eo filtro Gaussiano. De fato, os filtros de Sobel hx e hy também são separáveisque são h1 e h2 Filtragem de domínio de Fourier A filtragem de domínio espacial com conv2 é facilmente uma operação computacionalmente cara. 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 a O (N 2 log N). Usando a propriedade de convolução-multiplicação da transformada de Fourier, a convolução é calculada de forma equivalente por O resultado é equivalente a conv2padded (x, h), exceto próximo ao limite, onde a computação acima usa extensão de limite periódica. A filtragem baseada em Fourier também pode ser feita com a extensão de contorno simétrica, refletindo a entrada em cada direção: (Nota: Um método ainda mais eficiente é a filtragem de sobreposição de FFT. A Ferramenta de Processamento de Sinal implementa a sobreposição FFT-add 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 ordem Se você tiver o Image Toolbox, os filtros de estatística de ordem podem ser executados com ordfilt2 e medfilt2. Um filtro de estatística de ordem classifica os valores de pixel em uma vizinhança e seleciona o quinto maior valor. Os filtros min, max e mediano são casos especiais. Filtros morfológicos Se você tem o Image Toolbox, bwmorph implementa várias operações morfológicas em imagens binárias, como erosão, dilatação, abertura, fechamento e esqueleto. Existem também comandos disponíveis para morfologia em imagens em escala de cinza: imerode. Imidato e imtofato. entre outros. Crie seu próprio filtro Ocasionalmente, queremos usar um novo filtro que o MATLAB não possui. O código abaixo é um modelo para a implementação de filtros. (Nota: Uma afirmação equivocada freqüente é que os loops no MATLAB são lentos e devem ser evitados. Esta vez foi verdade, de volta no MATLAB 5 e anteriores, mas loops em versões modernas são razoavelmente rápido.) Por exemplo, o alfa-aparado médio filtro Ignora os valores mais baixos d 2 e d 2 mais altos na janela e calcula a média dos restantes valores (2 r 1) 2 d. O filtro é um equilíbrio entre um filtro mediano e um filtro médio. Como um outro exemplo, o filtro bilateral é uma maneira simples (ad hoc) é apenas tomar uma média ponderada (ajustável por alfa) em cada ponto com seus vizinhos: ou alguma variação do mesmo . Sim, para ser mais sofisticado você pode Fourier transformar seus dados em primeiro lugar, em seguida, cortar as altas freqüências. Algo como: Isso corta as 20 frequências mais altas. Tenha cuidado para cortá-los simetricamente, caso contrário a transformada inversa não é mais real. Você precisa escolher cuidadosamente a freqüência de corte para o nível correto de suavização. Este é um tipo muito simples de filtragem (filtragem de caixa no domínio da freqüência), para que você possa tentar suavemente atenuando freqüências de alta ordem se a distorção é inaceitável. FFT não é uma má idéia, mas é provavelmente um exagero aqui. Corrente ou médias móveis dão resultados geralmente pobres e devem ser evitados para qualquer coisa além de trabalhos de casa atrasados ​​(e ruído branco). Id uso Savitzky-Golay filtragem (em Matlab sgolayfilt (.)). Isso lhe dará os melhores resultados para o que você está procurando - algum alisamento local, mantendo a forma da curva. Deslocamento usa cookies para melhorar a funcionalidade e desempenho e para fornecer publicidade relevante. Se você continuar navegando no site, você concorda com o uso de cookies neste site. Veja nosso Contrato de Usuário e Política de Privacidade. O Slideshare usa cookies para melhorar a funcionalidade e o desempenho e para fornecer publicidade relevante. Se você continuar navegando no site, você concorda com o uso de cookies neste site. Consulte nossa Política de Privacidade e o Contrato do Usuário para obter detalhes. Explore todos os seus tópicos favoritos no aplicativo SlideShare Obtenha o aplicativo SlideShare para Salvar para mais tarde, mesmo desconectado Continue para o site móvel Fazer upload Fazer login Toque duas vezes para diminuir o zoom Programas básicos de matlab Compartilhe SlideShare Corporação do LinkedIn copiar 2017

Comments