Logo Passei Direto
Buscar

(31)994408961- RESOLVIDO-Relatorio de Aula Pratica - Computacao Grafica e Processamento de Imagens

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Roteiro Aula Prática
COMPUTAÇÃO GRÁFICA E PROCESSAMENTO DE IMAGENS
ROTEIRO DE AULA PRÁTICA
NOME DA DISCIPLINA: COMPUTAÇÃO GRÁFICA E PROCESSAMENTO DE IMAGENS
Unidade: 1 - INTRODUÇÃO À COMPUTAÇÃO GRÁFICA
Seção: 3 - REPRESENTAÇÕES DA IMAGEM
OBJETIVOS
Definição dos objetivos da aula prática:
Os objetivos desta aula prática são:
1. Aplicar os conhecimentos da unidade no desenvolvimento de um primeiro programa de criação e manipulação de imagem vetorial.
2. Aplicar os conhecimentos da unidade no desenvolvimento de um primeiro programa de criação e manipulação de imagem matricial.
3. Implementar a conversão de imagens vetoriais com retas e círculos para imagem bitmap.
INFRAESTRUTURA
Instalações – Materiais de consumo – Equipamentos:
LABORATÓRIO DE INFORMÁTICA EQUIPAMENTOS:
· Desktop Engenharia Positivo Master D3400
~ 1 por aluno ou dupla
SOLUÇÃO DIGITAL
· PILLOW 5.2+ (Biblioteca)
Pillow 5.2+ - é uma biblioteca de processamento de imagens para Python, que permite a abertura, manipulação e salvamento de imagens em vários formatos.
· PYCAIRO 1.17+ (Biblioteca)
Pycairo 1.17+ - é uma biblioteca de gráficos vetoriais 2D para Python, que permite a criação de gráficos personalizados de alta qualidade.
2
· IDLE(PYTHON) (Software)
IDLE(Python): É um ambiente de desenvolvimento integrado (IDE) para a linguagem de programação Python. Ele é usado principalmente para desenvolvimento de aplicativos em Python e inclui recursos como realce de sintaxe, depuração, controle de versão e muito mais.
EQUIPAMENTO DE PROTEÇÃO INDIVIDUAL (EPI)
Não se aplica.
PROCEDIMENTO/ATIVIDADE nº 1 (Físico)
ATIVIDADE PROPOSTA:
Criação de imagem vetorial com retas e círculos e transformação em imagem matricial.
PROCEDIMENTOS PARA A REALIZAÇÃO DA ATIVIDADE:
Para a execução desta atividade, você deverá criar e executar um primeiro programa em Python. O primeiro programa serve apenas para conhecer o ambiente de desenvolvimento, pois apenas imprime textos na tela.
Em seguida você deverá implementar três passos:
1) criar uma imagem vetorial com dois segmentos de reta e um círculo,
2) desenhar um círculo em formato matricial
3) desenhar segmentos de reta em formato matricial. Esses três passos deverão ser implementados nos procedimentos passo1(), passo2() e passo3(), respectivamente, junto com funções auxiliares sugeridas ao longo da atividade.
Crie e execute seu primeiro programa em Python
Para criar seu primeiro programa a partir de um template, faça:
1. Abra o IDLE (Python Shell).
2. Vá em File->Open e abra o arquivo cgpi1tmp.py.
3. Altere o cabeçalho do arquivo, preenchendo devidamente seu nome e número de matrícula (colocar todos os nomes e números de matrícula se o trabalho for realizado em grupo).
4. Salve o arquivo com o nome cgpi1.py. Siga o padrão de nomenclatura! O nome do arquivo em Python é o nome do módulo e não deve conter acentos, espaços ou
caracteres especiais.
3
5. Execute o programa clicando em Run->Run Module e veja o que é impresso na tela do Python Shell.
6. No shell, digite ‘import cgpi1.py’ e e veja que o resultado deve ser o mesmo. A indentação é essencial na linguagem Python, pois é a indentação que define os escopos.
Quando se faz um ‘import cgpi1.py’ o módulo cgpi1 (definido no arquivo cgpi1.py) é carregado e todo o código sem indentação (a partir da linha print('Início da Prática')) é executado como um script.
Crie uma imagem vetorial
Para criar uma imagem vetorial você deverá importar módulos no início do arquivo, criar a função criaImagemVetorial() e preencher o procedimento passo1(). Faça:
1. Importe o cairo, que será utilizado em todos os passos a seguir.
2. Crie a função criaImagemVetorial() que:
a. inicializa a variável v como uma imagem vetorial do tipo SVG (cairo.SVGSurface) a ser escrita no arquivo cgpi1.svg;
b. adicione a v um segmento de reta preto, partindo da coordenada (0.2,0.3) até a coordenada (0.8,0.7);
c. adiciona a v um segmento de reta cinza escuro, partindo da coordenada (0.8,0.3) até a coordenada (0.2,0.7);
d. adicione a v um círculo cinza claro, com centro na coordenada (0.5,0.5) e raio 0.3;
e. salva a imagem cgpi1.svg, chamando pela última vez context.stroke().
f. retorna v.
3. Preencha o procedimento passo1() que:
a. chama a função criaImagemVetorial();
b. salva a imagem criada em formato PNG no arquivo cgpi1.png.
4. Abra o arquivo cgpi1.svg em um editor de texto. Trata-se de um arquivo XML descritor de imagem.
5. Visualize a imagem cgpi1.svg em um browser. O browser desenha a imagem descrita no arquivo SVG e exibe.
6. Visualize a imagem cgpi1.png em um visualizador de imagens qualquer. A imagem PNG é criada com um fundo transparente, mas alguns visualizadores de imagens irão colocar um fundo branco.
A imagem resultante deverá ser como a da Figura 1.
Figura 1 – Resultado esperado para o Passo 1.
4
Fonte: o Autor.
Note na Figura 1 que o segmento de reta cinza escuro passa por cima do segmento de reta preto, portanto no ponto de cruzamento a cor é cinza escuro. Note também que o círculo cinza claro passa por cima dos dois segmentos de reta e, por isso, os pontos de cruzamento são na cor cinza claro. Isto se deve à ordem em que os elementos são adicionados à imagem.
Desenhe um círculo em formato matricial
Para desenhar um círculo em formato matricial, você deverá importar módulos no início do arquivo, criar uma nova função e preencher o procedimento passo2().
Faça:
1. Importe o numpy.
2. No procedimento passo2(), crie a variável f como uma imagem matricial (NumPyarray) de 201x201 pixels em níveis de cinza, mas com todos os valores em branco.
3. Implemente a função desenhaCirculo(f,c,r,g), que desenha sobre a imagem em níveis de cinza f, passada como parâmetro, um círculo de nível de cinza g, com centro na coordenada c e raio r, onde f é um NumPy array, c é uma coordenada (xc,yc), xc e yc inteiros, e r é o raio em pixels, um número inteiro. Trata-se da implementação do algoritmo de desenho de círculo apresentado nesta seção.
4. Novamente no procedimento passo2(), desenhe um círculo cinza claro (g=230) de centro (100,100) e raio 60 pixels sobre a imagem f, chamando a função desenhaCirculo(f,(100,100),60,230) .
5. Salve a imagem em formato PNG e abra em um visualizador de imagens. Você deverá ver uma imagem como a da Figura 2.
Figura 2 – Resultado esperado para o Passo 2.
5
Fonte: o Autor.
Desenhe retas e converta a imagem vetorial para matricial
Para executar esta atividade, você deverá criar uma nova função e preencher o procedimento passo3(). Considere v a imagem vetorial criada pela função criaImagemVetorial no Passo 1. Faça:
1. Implemente a função desenhaReta(f,p,q,g), que desenha sobre a imagem f um segmento de reta de nível de cinza g que se inicia no ponto p e termina no ponto q, ambos de coordenadas inteiras. Trata-se da implementação do algoritmo de desenho de reta apresentado nesta seção.
2. Crie a variável f como uma imagem matricial (NumPyarray)de201x201pixels em níveis de cinza.
3. Desenhe sobre f o primeiro segmento de reta de v (preto). Para converter as coordenadas reais de v para as coordenadas inteiras de f, simplesmente multiplique a coordenada real pela largura (coordenada x) ou altura (coordenada y) de f e converta o resultado para inteiro. Exemplo: o ponto (0.2,0.7) será (round(0.2*201), round(0.7*201)), ou seja (40,141).
4. Desenhe sobre f o segundo segmento de reta de v (cinza escuro), usando a mesma conversão do passo anterior.
5. Desenhe sobre f o círculo de v (cinza claro), usando o mesmo raciocínio dos passos anteriores. Para converter o raio do círculo para inteiro faça o mesmo que na conversão de coordenadas.
Salve a imagem f em formato PNG e abra em um visualizador de imagens. Você deverá ver algo similar à Figura 3, que é uma imagem parecida com a imagem obtida no Passo 1. A diferença desta imagem para a imagem obtida no Passo 1 é apenas a espessura das linhas.
Figura 3 – Resultado esperado para o Passo 3.
6
Fonte: o Autor.
CHECKLIST:
1. Aplicar os conhecimentos da unidade nodesenvolvimento de um primeiro programa de criação e manipulação de imagem vetorial.
2. Aplicar os conhecimentos da unidade no desenvolvimento de um primeiro programa de criação e manipulação de imagem matricial.
3. Implementar a conversão de imagens vetoriais com retas e círculos para imagem bitmap.
PROCEDIMENTO/ATIVIDADE nº 2 (Digital)
ATIVIDADE PROPOSTA:
Criação de imagem vetorial com retas e círculos e transformação em imagem matricial.
PROCEDIMENTOS PARA A REALIZAÇÃO DA ATIVIDADE:
Para a execução desta atividade, você deverá criar e executar um primeiro programa em Python. O primeiro programa serve apenas para conhecer o ambiente de desenvolvimento, pois apenas imprime textos na tela.
Em seguida você deverá implementar três passos: 1) criar uma imagem vetorial com dois segmentos de reta e um círculo, 2) desenhar um círculo em formato matricial e 3) desenhar segmentos de reta em formato matricial. Esses três passos deverão ser implementados nos procedimentos passo1(), passo2() e passo3(), respectivamente, junto com funções auxiliares sugeridas ao longo da atividade.
Crie e execute seu primeiro programa em Python
7
Para criar seu primeiro programa a partir de um template, faça:
1. Abra o IDLE (Python Shell).
2. Vá em File->Open e abra o arquivo cgpi1tmp.py.
3. Altere o cabeçalho do arquivo, preenchendo devidamente seu nome e número de matrícula (colocar todos os nomes e números de matrícula se o trabalho for realizado em grupo).
4. Salve o arquivo com o nome cgpi1.py. Siga o padrão de nomenclatura! O nome do
arquivo em Python é o nome do módulo e não deve conter acentos, espaços ou caracteres especiais.
5. Execute o programa clicando em Run->Run Module e veja o que é impresso na tela do Python Shell.
6. No shell, digite ‘import cgpi1.py’ e e veja que o resultado deve ser o mesmo. A indentação é essencial na linguagem Python, pois é a indentação que define os escopos.
Quando se faz um ‘import cgpi1.py’ o módulo cgpi1 (definido no arquivo cgpi1.py) é carregado e todo o código sem indentação (a partir da linha print('Início da Prática')) é executado como um script.
Crie uma imagem vetorial
Para criar uma imagem vetorial você deverá importar módulos no início do arquivo, criar a função criaImagemVetorial() e preencher o procedimento passo1(). Faça:
1. Importe o cairo, que será utilizado em todos os passos a seguir.
2. Crie a função criaImagemVetorial() que:
a. inicializa a variável v como uma imagem vetorial do tipo SVG (cairo.SVGSurface) a ser escrita no arquivo cgpi1.svg;
b. adicione a v um segmento de reta preto, partindo da coordenada (0.2,0.3) até a coordenada (0.8,0.7);
c. adiciona a v um segmento de reta cinza escuro, partindo da coordenada (0.8,0.3) até a coordenada (0.2,0.7);
d. adicione a v um círculo cinza claro, com centro na coordenada (0.5,0.5) e raio 0.3;
8
e. salva a imagem cgpi1.svg, chamando pela última vez context.stroke().
f. retorna v.
3. Preencha o procedimento passo1() que:
a. chama a função criaImagemVetorial();
b. salva a imagem criada em formato PNG no arquivo cgpi1.png.
4. Abra o arquivo cgpi1.svg em um editor de texto. Trata-se de um arquivo XML descritor de imagem.
5. Visualize a imagem cgpi1.svg em um browser. O browser desenha a imagem descrita no arquivo SVG e exibe.
6. Visualize a imagem cgpi1.png em um visualizador de imagens qualquer. A imagem PNG é criada com um fundo transparente, mas alguns visualizadores de imagens irão colocar um fundo branco.
A imagem resultante deverá ser como a da Figura 1.
Figura 1 – Resultado esperado para o Passo 1.
Fonte: o Autor.
Note na Figura 1 que o segmento de reta cinza escuro passa por cima do segmento de reta preto, portanto no ponto de cruzamento a cor é cinza escuro. Note também que o círculo cinza claro passa por cima dos dois segmentos de reta e, por isso, os pontos de cruzamento são na cor cinza claro. Isto se deve à ordem em que os elementos são adicionados à imagem.
Desenhe um círculo em formato matricial
9
Para desenhar um círculo em formato matricial, você deverá importar módulos no início do arquivo, criar uma nova função e preencher o procedimento passo2().
Faça:
1. Importe o numpy.
2. No procedimento passo2(), crie a variável f como uma imagem matricial (NumPyarray) de 201x201 pixels em níveis de cinza, mas com todos os valores em branco.
3. Implemente a função desenhaCirculo(f,c,r,g), que desenha sobre a imagem em níveis de cinza f, passada como parâmetro, um círculo de nível de cinza g, com centro na coordenada c e raio r, onde f é um NumPy array, c é uma coordenada (xc,yc), xc e yc inteiros, e r é o raio em pixels, um número inteiro. Trata-se da implementação do algoritmo de desenho de círculo apresentado nesta seção.
4. Novamente no procedimento passo2(), desenhe um círculo cinza claro (g=230) de centro (100,100) e raio 60 pixels sobre a imagem f, chamando a função desenhaCirculo(f,(100,100),60,230) .
5. Salve a imagem em formato PNG e abra em um visualizador de imagens. Você deverá ver uma imagem como a da Figura 2.
Figura 2 – Resultado esperado para o Passo 2.
Fonte: o Autor.
Desenhe retas e converta a imagem vetorial para matricial
10
Para executar esta atividade, você deverá criar uma nova função e preencher o procedimento passo3(). Considere v a imagem vetorial criada pela função criaImagemVetorial no Passo 1. Faça:
1. Implemente a função desenhaReta(f,p,q,g), que desenha sobre a imagem f um segmento de reta de nível de cinza g que se inicia no ponto p e termina no ponto q, ambos de coordenadas inteiras. Trata-se da implementação do algoritmo de desenho de reta apresentado nesta seção.
2. Crie a variável f como uma imagem matricial (NumPyarray)de201x201pixels em níveis de cinza.
3. Desenhe sobre f o primeiro segmento de reta de v (preto). Para converter as coordenadas reais de v para as coordenadas inteiras de f, simplesmente multiplique a coordenada real pela largura (coordenada x) ou altura (coordenada y) de f e converta o resultado para inteiro. Exemplo: o ponto (0.2,0.7) será (round(0.2*201), round(0.7*201)), ou seja (40,141).
4. Desenhe sobre f o segundo segmento de reta de v (cinza escuro), usando a mesma conversão do passo anterior.
5. Desenhe sobre f o círculo de v (cinza claro), usando o mesmo raciocínio dos passos anteriores. Para converter o raio do círculo para inteiro faça o mesmo que na conversão de coordenadas.
Salve a imagem f em formato PNG e abra em um visualizador de imagens. Você deverá ver algo similar à Figura 3, que é uma imagem parecida com a imagem obtida no Passo 1. A diferença desta imagem para a imagem obtida no Passo 1 é apenas a espessura das linhas.
Figura 3 – Resultado esperado para o Passo 3.
11
Fonte: o Autor.
CHECKLIST:
1. Aplicar os conhecimentos da unidade no desenvolvimento de um primeiro programa de criação e manipulação de imagem vetorial.
2. Aplicar os conhecimentos da unidade no desenvolvimento de um primeiro programa de criação e manipulação de imagem matricial.
3. Implementar a conversão de imagens vetoriais com retas e círculos para imagem bitmap.
RESULTADOS
Resultados de Aprendizagem:
Saber reconhecer as áreas da computação gráfica, dos fundamentos das imagens e dos formatos de imagens.
12
image6.png
image1.png
image2.png
image3.png
image4.png
image5.png

Mais conteúdos dessa disciplina