Criação de imagens sintéticas

Imagens sintéticas são bastante utilizadas nos testes de algoritmos e na geração de padrões de imagens.

Iremos aprender a gerar os valores dos pixels de uma imagem a partir de uma equação matemática de forma muito eficiente, sem a necessidade de se usar explicitamente a varredura dos pixels através do comando for.

A forma preferencial de criação de imagens sintéticas, quando sua equação é fornecida, é através do uso das funções que geram uma matriz de coordenadas. As duas funções que iremos utilizar neste curso são indices e meshgrid.

Estude o tutorial em:

Ele é fundamental para entender os exemplos a seguir.


In [7]:
import numpy as np
import sys,os
ia898path = os.path.abspath('/etc/jupyterhub/ia898_1s2017/')
if ia898path not in sys.path:
    sys.path.append(ia898path)
import ia898.src as ia

Imagem da função "sela"

A função "sela" bidimensional é uma função dada pelo produto de suas coordenadas r e c. Observe que, implementando desta forma, é possível fazer com que o código Python/NumPy fique muito próximo à equação matemática, colocada a seguir.

Vamos gerar uma função sela, onde os valores para as linhas serão valores inteiros entre -75 e 75 e os valores para as colunas, inteiros no intervalo [-100,100]:

$$ f(r,c) = r \ c $$$$ \text{para} \ r \in [-75,75] $$$$ c \in [-100,100]$$

No exemplo a seguir é utilizado a função arange para gerar os vetores de coordenadas. Para melhorar a visualização foi utilizada a função ia636:iaisolines iaisolines que permite visualizar os pixels de mesmo valores (isolinhas) da imagem gerada com uma cor destacada.


In [10]:
r,c = np.meshgrid(np.arange(-75,75), np.arange(-100,100), indexing='ij')
f = r * c
fn = ia.normalize(f)
ia.adshow(fn, 'Ponto de sela')
#ia.adshow(ia.iaisolines(fn,9), 'Ponto de sela com isolinhas')


Ponto de sela

Outras images criadas com matrizes de índices

Implemente alguma das seguintes funções da toolbox ia636:MainPage que também foram feitas desta forma:

Atividades

  • Faça a seguir um programa qualquer de geração de imagem a partir de uma equação:

In [11]:
r,c = np.indices( (100,100))
# implemente aqui a equação da sua função bidimensional 

#ia.adshow(F)

Opcional:

Uma sugestão de exercício avançado opcional é gerar a função de Gabor, muito utilizada em filtro direcionais. A equação da função de Gabor pode ser vista em Gabor filter. Implemente a função real.

Disconsidere este enunciado:

  • As duas próximas atividades, descritas no índice das atividades desta semana envolvem o desenvolvimento de programas que geram uma imagem rampa e uma imagem com um "x" desenhado. Estes programas devem ser feitos utilizando a função indices.

Criação de gaussiana n-dimensional

Uma função também escrita com índices matriciais, porém muito mais complexa de entender é a ia636:iagaussian. Veja que o código é extremamente curto, porém bastante complexo e ela ainda funciona para qualquer dimensão, desde 1-D, 2-D, 3-D, isto é, n-D. Para quem estiver interessado em entender como ela funciona, existe uma demonstração que procura explicar seu funcionamento em

Questões de autoavaliação (ainda não está pronto)

Faça o teste múltipla escolha a seguir para verificar os conhecimentos adquiridos com esta atividade. O teste é para autoestudo e pode ser repetido várias vezes:

  • Teste de autoestudo - Imagens sintéticas usando indices e meshgrid`