Não é fácil projetar um conjunto de testes para garantir que o seu programa esteja correta. No caso em que o resultado é Falso, i.e., não simétrico, basta um pixel não ser simétrico para o resultado ser Falso. Com isso, o conjunto de teste com uma imagem enorme com muitos pixels não simétricos não é bom teste. Por exemplo, neste caso, faltou um teste onde tudo seja simétrico, com exceção da origem (F[0,0]).
Solução apresentada pelo Marcelo, onde é comparado com a imagem refletida com translação periódica de 1 deslocamento é bem conceitual. A solução do Deângelo parece ser a mais rápida: não foi feita nenhuma cópia e comparou apenas com metade dos pixels.
Existe ainda pequeno problema a ser encontrado na questão de utilizar apenas metade dos pixels para serem comparados.
A redução da imagem deve ser feita com uma filtragem inicial de período de corte 2.r onde r é o fator de redução da imagem. A seguir, é feita a reamostragem (decimação).
Para se fazer a redução no domínio da frequência, bastaria recortar o espectro da imagem original e fazer a transforma inversa de Fourier.
In [1]:
import numpy as np
import sys,os
import matplotlib.image as mpimg
ia898path = os.path.abspath('../../')
if ia898path not in sys.path:
sys.path.append(ia898path)
import ia898.src as ia
Fazer uma função que amplie/reduza a imagem utilizando interpolação no domínio da frequência, conforme discutido em aula. Comparar os resultados com o scipy.misc.imresize, tanto de qualidade do espectro como de tempo de execução. Os alunos com RA ímpar devem fazer as ampliações e os com RA par devem fazer as reduções. Nome da função: imresize
Modificar a função pconv
para executar no domínio da frequência, caso o número de
elementos não zeros da menor imagem, é maior que um certo valor, digamos 15.
Nome da função: pconvfft
In [ ]:
/home/lotufo/ia898/dev/wavelets.ipynb