# Filtragem no domínio espacial

A filtragem no domínio espacial é uma técnica de processamento de imagens que normalmente manipula os valores de uma vizinhança para modificar a imagem digital (atuando diretamente nos pixels da imagem). Em geral, esta técnica é computacionalmente mais eficiente e requer menos recursos de processamento para sua realização. A imagem digital é representada por uma matriz de pixels, sendo que a filtragem no domínio espacial trabalha com uma máscara, uma janela, que percorre toda a imagem realizando as operações de filtragem desejadas.
A máscara pode ser representada através da função:
$p(i,j)=T[o(x,y)]$
Onde: $p(i,j)$ é a imagem processada, $o(x,y)$ é a imagem original e $T$ é um operador em $o$, definido em uma certa vizinhança de $(x,y)$.
Outra técnica conhecida no processamento de imagens é a filtragem no domínio da frequência que realizam operações na transformada de Fourier de uma imagem e não diretamente na própria imagem.

## Classificação das operações no domínio espacial

As operações no domínio espacial, baseadas no escopo da ação, podem ser classificadas como: pontuais (ponto-a-ponto) ou locais (localizadas).

### Pontuais

Nas operações pontuais, cada pixel da imagem de saída depende apenas do mesmo correspondente na imagem de entrada, assim sendo, qualquer operação pontual pode ser interpretada como um mapeamento de pixel da imagem de entrada para a imagem de saída. A figura ao lado representa uma operação/transformação $(T)$ aplicada por exemplo no pixel na posição $(4,4)$ da imagem de entrada $(Ie)$ e que após a transformação, altera o estado do seu ponto correspondente na imagem de saída $(Is)$.

### Locais

Nas operações locais, o valor de saída de um pixel em determinada coordenada dependerá dos valores de entrada da sua localização e também dos seus pixels vizinhos (vizinhança). Estes pontos vizinhos podem ser definidos pela sua aproximação ao ponto de origem como: (i) vizinhos mais próximos e (ii) vizinhos mais distantes.
Seja p um pixel de coordenadas $(i,j)$ podemos dizer que os vizinhos mais próximos são os pixels nas coordenadas $(i-1,j),(i+1,j),(i,j-1),(i,j+1)$, por sua vez, os vizinhos mais distantes seriam os pixels nas coordenadas: $(i-1,j-1),(i-1,j+1),(i+1,j-1),(i+1,j+1).$.

## Funcionamento

A manipulação da imagem utilizando as técnicas de filtragem no domínio espacial, removendo determinada característica ou ainda destacando/suavizando determinado detalhe, somente é possível se conhecer a posição de cada pixel de uma imagem. Existem dois tipos de filtros: lineares e os não lineares.

### Filtros lineares

Funcionam por meio de vizinhanças escolhendo um determinado ponto $(x,y)$, onde x representa a linha e y a coluna. Este filtro destaca/suaviza a imagem sem alterar o nível de cinza da imagem de origem. Ele cria uma imagem nova excluindo as linhas e colunas sem diminuir a resolução.
A filtragem linear baseia-se em dois conceitos, o da convolução e o da correlação, onde convolução é a forma como a mascara é alternada dentro da imagem; este processo visa calcular a soma dos pontos de cada posição, ou seja convolução é o processo de deslocamento do filtro. Já a correlação é praticamente igual à convolução, sendo que a única diferença é o fato de rotacionar em 180° o primeiro filtro.
Os dois conceitos podem ser expressos na forma de equação, temos que correlação é
$W(x,y)F(x,y)=\sum _{ta=-a}^{a}\sum _{tb=-b}^{b}W(ta,tb)F(x+ta,y+tb)$.
De forma semelhante a convolução é representada em:
$W(x,y)F(x,y)=\sum _{ta=-a}^{a}\sum _{tb=-b}^{b}W(ta,tb)F(x-ta,y-tb)$
onde podemos observar o rotacionamento em 180° pela inserção do sinal de menos em $F$
Nesta classificação de filtros, encontram-se os filtros lineares de suavização (filtros de média ou filtros passa-baixa) servem para suavizar os pixels das imagens através da aplicação de uma máscara para calcular a média entre os pixels vizinhos por toda a imagem (pixel-a-pixel). O tamanho de máscara mais comum é de (3x3), porém não se restringe a este tamanho apenas.

### Filtro não linear

O filtro não linear identifica bordas, linhas, manchas e aplica modificações sem se preocupar com níveis de cinza da imagem de origem. Para detectar determinadas características, utiliza-se de operadores, sendo que os mais usados atualmente são os filtros Roberts e Sobel. O filtro Roberts possui a fórmula mais simples na detecção de bordas, mas tem uma grande desvantagem, na diferença de realce em algumas bordas da imagem, relacionado aos pontos de cinza. Sobel é o mais aprimorado não realça pontos diferenciados e mantem o fundo da imagem mais claro do que as bordas.
Um exemplo de filtro não linear muito utilizado quando se pretende preservar as bordas e detalhes de uma imagem, bem como quando se pretende diminuir a aparência borrada da uma imagem quando utilizado o filtro de média, é o filtro de mediana. O filtro mediano trabalha com uma média no valor para um grupo de pixels na vizinhança do pixel central; este valor reflete que a metade do valor é menor que a mediana, bem como possui a outra metade maior que a mesma mediana. Porém vale lembrar que, apesar de ser o filtro de estatística mais útil no processamento de imagens, ele não é o único existente, pois ainda contamos com o MAX, MIN, MODA entre vários outros.

## Atividade Prática
### Filtros de média (linear)

Abaixo poderá ser visualizado o resultado da aplicação do filtro média utilizado o software ImageJ em dois experimentos.
O filtro de média, é um filtro linear de suavização que trabalha diretamente nos valores de média dos pixels, estes filtros também são conhecidos como filtros passa-baixa. Ao aplicar o filtro de média, o valor de cada pixel analisado, será imediatamente substituído pela média dos pixels de sua vizinhança, desta forma o resultado esperado é a perda de nitidez da imagem.
Experimento 01 - Abaixo veremos uma imagem original sem tratamento, e ao lado a mesma imagem porem aplicado o filtro de média com valores de 10 pixels de janela.
| Figura 1. Imagem Original sem tratamento. Fonte: Próprio autor | Figura 2. Imagem com tratamento de média de 10 pixels. Fonte: Próprio autor |
Experimento 02 - Neste processamento a imagem original de uma flor foi redimensionada e convertida para 8 bits (tons de cinza). Foi aplicado o filtro das médias com 3 parâmetros diferentes na definição do tamanho da máscara (m = 3, 9 e 35 pixels). A imagem original estava formato RGB color (4000x3000), sendo redimensionada na proporção de 1024x768 pixels e convertida para o formato 8 bits (tons de cinza) através do software ImageJ. Depois deste processamento foi aplicado um filtro para adicionar ruídos na imagem (Salt and Peper) para verificar melhor a aplicação dos filtro de média. Na nova imagem com ruídos foram aplicadas 3 versões do filtros de média com os seguintes parâmetros: 3, 9 e 35 pixels. Abaixo das imagens deste experimento foi disponibilizado um passo-a-passo para reproduzir o experimento no ImageJ.
| (a) Imagem inicialImagem original (RGB color) | (b) Pré-processamentoImagem original ( 8 bits ) | (c) Pré-processamentoApós inserção do ruído |
| (d) Filtro da médiaFiltro da Média - Radius: 3 pixels | (e) Filtro da médiaFiltro da Média - Radius: 9 pixels | (f) Filtro da médiaFiltro da Média - Radius: 35 pixels |

##### Passos para reprodução do experimento 2 no software ImageJ

* Abrir o software ImageJ (disponível para download em: https://imagej.nih.gov/ij/download.html)
* Abrir a imagem original (File -> Open)
* Redimensionar a imagem (mage -> Scale... e definir a largura em pixels (width) )
* Converter a imagem para 8 bits - tons de cinza (Image -> Type -> 8 bits)
* Inserir um ruído na imagem (Process -> Noise -> Salt and Pepper) e salvar este arquivo gerado (File -> Save As... -> selecionar uma extensão, ex: jpg e nomear o arquivo)
* Abrir o arquivo do item anterior (passo 5) e aplicar o filtro da média com os seguintes parâmetros: 3, 9 e 35 pixels, porém um de cada vez. ( Process -> Filters -> Mean... -> Definir o Radius com os pixels 3, 9 e 35 pixels). Após a aplicação de cada um dos parâmetros, salvar os arquivos gerados.
* Comparar e verificar os resultados.

### Filtros de mediana (não linear)

Experimento 03 - Com base na imagem do Experimento 02 foi realizado um outro experimento buscando comparar visualmente a diferença entre os filtros de média (filtro linear) com a aplicação dos filtros de mediana (filtro não-linear). Neste experimento foi aplicado um novo parâmetro para máscara de tamanho 1px, que se mostrou mais eficiente que todos os outros anteriores para a remoção de ruídos do tipo "Salt and Pepper". Também foi possível identificar que o tipo de filtro utilizando a mediana aplicado para suavizar a imagem tende a preservar mais os detalhes/contornos do que o filtro da média (Experimento 02)
| Após aplicação do filtroFiltro Mediana - Radius: 1 pixels | Após aplicação do filtroFiltro Mediana - Radius: 3 pixels | Após aplicação do filtroFiltro Mediana - Radius: 9 pixels | Após aplicação do filtroFiltro Mediana - Radius: 35 pixels |

#### Passos para reprodução do experimento 3 no software ImageJ

* Abrir o software ImageJ (disponível para download em: https://imagej.nih.gov/ij/download.html)
* Abrir a imagem original (File -> Open)
* Redimensionar a imagem (Image -> Scale... e definir a largura em pixels (width) )
* Converter a imagem para 8 bits - tons de cinza (Image -> Type -> 8 bits)
* Inserir um ruído na imagem (Process -> Noise -> Salt and Pepper) e salvar este arquivo gerado (File -> Save As... -> selecionar uma extensão, ex: jpg e nomear o arquivo)
* Abrir o arquivo do item anterior (passo 5) e aplicar o filtro da média com os seguintes parâmetros: 1, 3, 9 e 35 pixels, porém um de cada vez. ( Process -> Filters -> Median... -> Definir o Radius com os pixels 1, 3, 9 e 35 pixels). Após a aplicação de cada um dos parâmetros, salvar os arquivos gerados.
* Comparar e verificar os resultados.

### Outros tipos de filtros

Agora, quando se tem a necessidade de identificar bordas, e ou outra característica como curvas e manchas de uma imagem, os filtros mais utilizados são Roberts, Sobel e Prewit.
Abaixo veremos uma imagem original sem tratamento, e ao lado a mesma imagem porem aplicado o filtro Sobel.
| Figura 3. Imagem Original. Fonte: Próprio autor | Figura 4. Imagem com filtro Sobel. Fonte: Próprio autor |