Processamento de imagens na prática

Filtro de mediana

Tem algumas ferramentas que são como coringas – acho que toda atividade tem disso. Bom, o filtro de mediana é um dos coringas para processamento de imagens. Não para grandes feitos, mas para os pequenos: quando a segmentação deu quase certo, só precisa de um empurrãozinho.

Vamos ver uma imagem

Surface (road), de Alice N Wondrind.

Escolhi a imagem da superfície de uma rua ou estrada, que encontrei no Flickr. Ela tem dois tipos de superfície bem distintos, um mais claro e outro mais escuro. Mas apesar de isso ficar muito claro para nossos olhos, a segmentação por threshold não é perfeita. A parte clara tem ranhuras que ficam escuras, e a parte escura tem pontos mais claros, onde a luz reflete na superfície granulada.

A imagem é de AliceNWondrlnd.

Compare os resultados

Comparação: imagem original e o resultado do threshold (esquerda); imagem após filtro de mediana com tamanho 5 (direita).

Na tentativa sem usar o filtro, o resultado vem com muito ruído. É possível tratá-lo com uma sucessão de Aberturas e Fechamentos, mas é preciso bastante cuidado para que a linha divisória permaneça no mesmo lugar. O resultado produzido com o uso do filtro ficou bem mais nítido. Ainda será necessária uma pequena correção com operações morfológicas, mas nada muito complexo.

O filtro de Mediana

O artigo Median Filter na wikipédia em inglês tem boas informações, mas em português não há nada ainda.

Mediana é uma medida estatística, que caracteriza uma tendência central para um conjunto de dados. No processamento de imagens, o nosso conjunto de dados vem da imagem.

O filtro tem lá sua definição matemática, mas por agora vamos definir um filtro como um operador, que tem um tamanho definido, um centro, e que “aplicado” sobre a imagem em todas as posições possíveis, como se fosse um “carimbo” especial. Fica mais fácil com um exemplo:

Esta será nossa imagem (os valores dos pixels):

0   0   5   3   5   5

1   1   5   2   5   5

1   2   1   5   4   5

E vamos aplicar um filtro de mediana, no tamanhos 3X3. A primeira posição é a que coloca o centro do filtro sobre o primeiro pixel da imagem: os valores dentro do filtro são:

x   x   x

x   0   0

x   1    1

coloquei x nos lugares em que não há pixels, mas vamos substituí-los por zeros  e calcular a mediana (a mediana se calcula ordenando os dados e pegando o do meio):

[0, 0, 0, 0, 0, 0, 0, 1, 1]  -> mediana = 0.

Então o valor do primeiro pixel nesta imagem será 0. Vamos fazer o mesmo com o segunto pixel:

[0, 0, 0, 0, 0, 1, 1, 5, 5] -> zero de novo.

O terceiro pixel:

[0, 0, 0, 0, 1, 2, 3, 5, 5] -> mediana = 1.

O resultado final vai ser:

0   0   1   3   3   0

0   1   2   5   5   5

0   1   1   2   4   0

Outras informações

A principal utilidade do filtro de mediana é diminuir o ruído na imagem, principalmente quando ele é formado por “pontinhos” (também conhecido como “salt and peper”, ou sal e pimenta). Mas ele também é útil para tornar bordas mais nítidas em algumas situações. Parece pouco, mas muitas vezes é o que faz a diferença.

Os filtros de mínima e de máxima funcionam da mesma forma.

O filtro de média também tem o mesmo funcionamento, mas não as mesmas propriedades. Ao invés de criar contornos nítidos, ele “borra a imagem”.

O ImageJ tem estes quatro filtros, assim como alguns outros, no menu Process –> Filters.

Trackbacks/Pingbacks

           
  1. [...] amenizar o problema das linhas brancas, escolhi um filtro de mediana de tamanho 5. Foi o tamanho máximo que consegui usar sem destruir os limites das [...]

  2.        

Comente

Você pode usar estas tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>