Você está na página 1de 15

Universidade Federal Rural de Pernambuco

Unidade Acadêmica de Garanhuns


Bacharelado em Ciência da Computação
Reconhecimento de Padrões 2018.2

Anderson Melo de Morais

LISTA DE EXERCÌCIOS II

Questão 1 - (a) implemente o filtro passa-baixa ideal em que todas as frequências acima da
frequência de corte Wc são retiradas da imagem:

Na figura abaixo mostramos o código referente a implementação do filtro de passa-baixa


ideal, onde passamos a imagem para o domínio da frequência utilizando a transformada de Fourier e
em seguida eliminamos todas as frequências que estão acima da frequência de corte Wc que é
definida:
Apresente a representação gráfica dos filtros no domínio da frequência e os resultados
obtidos após a filtragem LSI de uma imagem de teste. Aplique (i) wc = π/8, (ii) wc = π/4 e (iii)
wc = 3*π/8
Resultados obtidos:
(i) wc = π/8 – Para a frequência de corte π/8 temos apenas uma pequena região delimitada
pela frequência de corte, isso fará que poucos valores passem, o que resultará em uma
imagem um tanto desfocada, como podemos ver na sub-imagem resultado abaixo, na
imagem apresentamos também a representação da imagem no domínio da frequência,
magnitude:

(ii) wc = π/4 - No segundo teste utilizamos a frequência de corte π/4, e obtivemos os


resultados abaixo, um filtro de espessura um pouco maior que resulta em uma imagem
suavizada porém com mais detalhes que no caso anterior:

(iii) wc = 3*π/8 - Por fim aplicamos a frequência de corte 3π/8 que gera um filtro com região de
corte um pouco maior, que permite a passagem de mais frequências, o que gera uma
imagem resultante com pouca suavização e com uma riqueza de detalhes semelhante a
da imagem original, como podemos perceber pela imagem abaixo:
(b) implemente o filtro Butterworth passa-baixa:
Abaixo é apresentado um trecho do código implementado, onde podemos ver a função
transformada_fourier que recebe uma imagem e utiliza a função ftt2() do numpy para fazer a
transformada de Fourier e levar a imagem para o domínio da frequência, em seguida definimos o
filtro_butterworth() e a função passa_baixa() que realizará a aplicação o filtro sobre a imagem de
entrada.
(i) wc = π/8 - Aplicamos o filtro implementado na imagem mostrada abaixo, inicialmente com
frequência de corte π/8 que gera uma imagem com grande suavização o que acarreta na
perda de muitos detalhes

(ii) wc = π/4 - Testamos também com a frequência de corte π/4, que resulta em um filtro um
pouco maior e realiza uma melhor suavização na imagem, mantendo uma boa riqueza de
detalhes.

(iii) wc = 3*π/8 - Finalmente, aplicamos a frequência de corte 3π/8 que resulta em um filtro
maior que permite a passagem de mais frequências e realiza uma suavização menor na
imagem, como podemos perceber na imagem abaixo:
(c) Quais diferenças visuais podem ser encontradas nos resultados finais das filtragens utilizando os
filtros ideais e os filtros de Butterworth?

Abaixo podemos visualizar duas imagens, a da esquerda gerada pelo código da letra a, o filtro passa
baixa ideal com frequência de corte π/8 e a da direita gerada pelo código da letra b, o filtro de
Butterworth também com a mesma frequência de corte π/8. A diferença visual é muito sutil, mas a
sensação que tenho que é a da direita apresenta uma suavização melhor, com menos ruídos. Ao
lado do bico da ave do lado esquerdo há a presença de traços brancos gerados provavelmente pelo
processo de aplicação do filtro, o que não acontece na da esquerda.

(d) Implemente o filtro Butterworth passa-alta:


Para a implementação deste filtro reutilizamos boa parte do código da questão b, alternando apenas
a equação de cálculo do filtro, este filtro realizará a um aguçamento nas bordas das imagens
conforme veremos nos exemplos abaixo.
(i) wc = π/8 - Para a frequência de corte de π/8, temos os resultados mostrados abaixo:
Resultado ampliado:

(ii) wc = π/4 – testando agora para a frequência de corte π/4, obtemos o seguinte resultado:

Resultado ampliado:
Podemos perceber na imagem acima uma menor intensidade nas bordas, isso se deve a
frequência de corte que foi escolhida, de π/4.
(iii) wc = 3*π/8 – Por fim, utilizando a frequência de corte 3π/8, obtemos isso:

Resultado ampliado:

(e) Realize o processamento de uma imagem de entrada x(n1; n2) sobrepondo o componente
derivativo x0(n1; n2) ao sinal original:
Nas imagens acima podemos visualizar a esquerda a imagem original e a direita a imagem
resultante, que sofreu a operação de acréscimo y(n1; n2) = x(n1; n2) + x’(n1; n2) , como resultado
podemos perceber um aguçamento nas bordas da imagem resultante que se deve a soma das
intensidades dos pixel originais da borda aos pixels da imagem x’(n1; n2).
Questão 2 –
Nesta questão realizamos a implementação do método de Canny, que tem como objetivo detectar as
bordas dos elementos de uma imagem, a primeira etapa do método de canny consiste em realizar
uma suavização na imagem, essa funcionalidade não é feita diretamente pela função do OpenCV
que utilizamos, por isso utilizamos o filtro de butterworth passa baixa para suavizar a imagem e em
seguida aplica Canny definindo os parâmetros de Talto e Tbaixo e a norma que será usada para o
cálculo dos gradientes.

Abaixo apresentamos os resultados obtidos nos testes com o algoritmo de Canny:

Imagem original:
Testes realizados:
(i) Wc = π/8

(ii) Wc = π/4
(iii) Wc = π/2

Como podemos perceber pelas imagens acima, para frequências de corte baixas como pi/8, temos uma baixa
detecção de bordas, pois o filtro será mais rigoroso nas frequências que irão passar, para o valor pi/4 já
temos um resultado melhor, com identificação de bordas em áreas da figura que não haviam sido detectadas
anteriormente. Conforme a frequência de corte vai aumentando mais frequências vão sendo permitidas e
mais bordas vão sendo detectadas na imagem como aconteceu no teste com pi/2. Identificar a qual
frequência de corte é mais adequada irá depender dos propósitos que se deseja utilizar a imagem
processada, no caso analisado eu diria que a mais adequada seria a 2ª encontrada com a frequência de corte
pi/4, pois ela identifica de forma bem uniforme as bordas da superfície do labirinto, ignorando quase que
totalmente os ruídos e as linhas da profundidade.

Questão 3 –
O algoritmo de Canny é dividido em 4 etapas, que são elas:
1 – Redução de ruído: Utiliza um filtro Gaussiano e através de convolução suaviza ligeiramente os
elementos da imagem, isto é reduz o efeito de pixels ruidosos na imagem.
2 – Cálculo dos gradientes: Como a borda de uma imagem pode estar em vários sentidos é
necessário identificar em que sentido elas estão, se verticais, horizontais ou diagonais.
3 – Eliminação dos gradientes não máximos: Quando um valor de magnitude é menor que os seus
vizinhos na direção do gradiente ele é desconsiderado.
4 – Limiarização: Utiliza dois valores de limiares inicias, um alto e um baixo, e faz a verificação
selecionando os pixels que são maiores que o limiar máximo ou menor que o limiar máximo e maior
que o mínimo.

O método de Canny contem parâmetros que podem ser alterados e que afetarão diretamente o
resultado final, são eles:
 O filtro que será utilizado para a suavização do passo 1;
 Os limiares, Talto e Tbaixo aplicados no passo 4;

Mostraremos agora alguns exemplos de execução do algoritmo de Canny variando alguns


parâmetros:
Código utilizado:

Imagem de entrada:

Teste 1:
Parâmetros utilizados:
Filtro butterworth passa baixa para suavização, com frequência de corte pi/2
Algoritmo de Canny com Tbaixo = 100 e Talto=110

Resultado:

Teste 2:
Parâmetros utilizados:
Filtro butterworth passa baixa para suavização, com frequência de corte pi/4
Algoritmo de Canny com Tbaixo = 25 e Talto = 100

Resultado:

A frequência de corte utilizada no algoritmo de suavização na quantidade de frequências que o


algoritmo deixará passar, fazendo com que a imagem fique mais ou menos desfocada e isso irá
afetar no quanto de bordas o algoritmo de Canny irá “peceber”. Já os valores de Talto e Tbaixo
servem para determinar se um determinado elemento encontrado é de fato uma borda ou apenas
um ruído, valores próximos nessas duas variáveis apresentam resultados mais precisos, pois
tendem a identificar com mais exatidão as bordas.

Questão 4 – Utilize o algoritmo de Canny da questão anterior para detectar as bordas de uma
imagem digital:
Imagem original:

Bordas encontradas pelo algoritmo de Canny:

(a) O número de objetos segmentados;


(b) O perímetro da região de borda;
(c) A área da região segmentada em cada objeto;
(d) A posição do centro de massa de cada objeto;
Código utilizado:

Você também pode gostar