Primeiro trabalho - EP1

Primeiro trabalho - EP1

por Marcelo Queiroz -
Número de respostas: 7

Boa noite, pessoal!

Segue em anexo o enunciado do primeiro trabalho para nota. Este é um trabalho de implementação (Exercício-Programa ou EP) que deve ser realizado em Python notebook, e entregue eletronicamente pelo PACA até o dia 28/3.

Aproveito para informar que o Thilo estará à disposição de vocês para tirar dúvidas (sobre a matéria e sobre o EP) na próxima 3a-feira, dia 20/3, a partir do final da aula (das 11:40 às 12:40).

Bom trabalho a todos!

Marcelo

Em resposta à Marcelo Queiroz

Re: Primeiro trabalho - EP1

por Marcelo Queiroz -

Boa tarde, pessoal!

Segue em anexo um notebook com exemplos de como carregar imagens e sons tanto de urls quanto de arquivos locais, que deve ajudar na realização do EP1. Lembro que ele está marcado para o meio da semana santa, e que a entrega é eletrônica (pelo PACA).

Bom trabalho,

Marcelo

 

Em resposta à Marcelo Queiroz

Re: Primeiro trabalho - EP1

por Pedro Faria -

Bom dia,

Tentando rodar o exemplo para carregar imagens e sons, percebi que as imagens não estavam sendo mostradas, pois faltavam chamadas a plt.show() logo após as chamadas a plt.imshow(M) (como explicado em https://stackoverflow.com/questions/39416004/matplotlib-not-displaying-image-on-jupyter-notebook ). O arquivo corrigido está em anexo.

Pedro

Em resposta à Pedro Faria

Re: Primeiro trabalho - EP1

por Marcelo Queiroz -

Bom dia, Pedro! Obrigado pelo anexo.

Em algum momento também me deparei com essa dificuldade, tanto é que os exemplos do Capítulo 1 estão cheios de plt.show(). Entretanto (e curiosamente) esses últimos exemplos que enviei funcionam nas minhas quatro máquinas sem o plt.show(), o que pode indicar que versões diferentes da matplotlib (ou do jupyter?) se comportam diferentemente. Minhas versões são matplotlib=2.2.0, jupyter=1.0.0 e IPython=6.2.1 (esse números aparecem ao final da saída do comando help(biblioteca)).

Um controle maior também pode ser obtido pelos comandos mágicos %%matplotlib inline e %%matplotlib notebook.

Abraços,

Marcelo

 

Em resposta à Marcelo Queiroz

Re: Primeiro trabalho - EP1

por Carybé Gonçalves Silva -

Não há um item para submissão do EP1 no paca; devemos enviá-lo por e-mail ao senhor?

Em resposta à Marcelo Queiroz

Re: Primeiro trabalho - EP1

por Pedro Faria -

Boa tarde,

Surgiu uma dúvida: no item 2.2, a quantização da imagem deve ser feita canal a canal (utilizando 6 ou 4 bits de precisão por canal), em apenas um canal ou em uma transformação da imagem para níveis de cinza? No caso da quantização canal a canal, como fica a norma de Frobenius? Imagino que seria uma soma dupla (nas linhas e nas colunas) dos módulos ao quadrado para cada canal, seguido da extração da raiz quadrada:

 || A|| =  \left(  \sum_{i=1}^m \sum_{j=1}^n |a_{ij1} |^2 + \sum_{i=1}^m \sum_{j=1}^n |a_{ij2} |^2 + \sum_{i=1}^m \sum_{j=1}^n |a_{ij3} |^2 \right)^{1/2} 

Encontrei algo que talvez seja relacionado (que codifica a imagem RGB nas três partes imaginárias de um quatérnio, e depois devolve a norma de Frobenius da matriz S da decomposição SVD), mas não sei se é o caso. Também veremos isso durante o curso?

Obrigado,

Pedro

 
Em resposta à Pedro Faria

Re: Primeiro trabalho - EP1

por Marcelo Queiroz -

Olá, Pedro!

Sim, a ideia é quantizar a imagem colorida com 4 ou 6 bits por canal de cor. Lembre-se (fizemos isso na última aula) que no Python se M é uma imagem RGB então M[:,:,k] é a imagem correspondente ao k-ésimo canal de cor (k=0,1,2). Se quisermos visualizar por exemplo o canal R separadamente poderíamos fazer:

R=M.copy()
R[:,:,1] = 0 # apaga canal G
R[:,:,2] = 0 # apaga canal B
plt.imshow(R)

Porém, para o exercício 2.2 é possível abordar as imagens coloridas de uma forma completamente transparente em relação aos canais, uma vez que todas as operações aritméticas, e inclusive a norma, se aplicam a estruturas com quantos índices quisermos. Então basta entender as contas que você precisa realizar para quantizar um único pixel em 4 ou 6 bits, e escrever a mesma expressão para a matriz RGB inteira. Em relação à norma, você tem toda a razão, tecnicamente o nome "norma de Frobenius" se aplica a matrizes MxN, e coincide com a norma Euclideana (pensando na matriz como um vetor de M*N elementos). A extensão para matrizes MxNx3 segue exatamente a mesma lógica, e a mesma função do numpy serve para normas de estruturas de quantos índices quisermos. Em particular:

print(np.linalg.norm(M)**2,sum([np.linalg.norm(M[:,:,k])**2 for k in range(3)]))

deve produzir duas vezes o mesmo número (leia-se "a energia da imagem colorida é a soma das energias dos canais de cor").

Uma dica para facilitar a quantização é converter a imagem de inteiros entre 0 e 255 para floats entre 0 e 1 e trabalhar o resto do tempo com floats (o plt.imshow() interpreta corretamente as cores entre 0 e 1). Se quiser voltar para a faixa de 0 a 255, é necessário converter o tipo das entradas (.astype(np.uint8)).

Sobre os quatérnios, não veremos isso nesse curso. Eles são importantes em modelagem de espaços 3D para representar rotações arbitrárias.

Abraços,

Marcelo