81
Processamento Digital de Imagens Aula 02 Prof. Diemesleno Souza Carvalho [email protected] http://www.diemesleno.com.br

Processamento Digital de Imagens - diemesleno.com.br · Como vimos anteriormente, uma imagem é representada como uma "grade" de pixels, representada por uma matriz bidimensional

Embed Size (px)

Citation preview

Processamento Digital de Imagens

Aula 02 Prof. Diemesleno Souza [email protected]://www.diemesleno.com.br

Na aula passada vimos...

Na aula passada vimos...

Unidade I- Introdução ao processamento digital de imagens;- Ambiente e bibliotecas;- Testando o ambiente (Carregando, mostrando e salvando imagens).

Na aula de hoje veremos...

Na aula de hoje veremos...

Unidade II- Básico sobre imagens;- O que é um pixel?- Visão geral sobre o sistema de coordenadas;- Acessando e manipulando pixels.

Básico sobre imagens

Básico sobre imagens

"Uma imagem vale mais que mil palavras."

Básico sobre imagens

"Uma imagem vale mais que mil palavras."

Todo mundo conhece a frase acima. Mas o que uma imagem representa?

Cada imagem traz dois tipos de informações:

1 - Informações sentimentais, sobre o que ela representa.

2 - Dados descritivos, referentes ao que compõe a imagem.

Básico sobre imagens

"Uma imagem vale mais que mil palavras."

Todo mundo conhece a frase acima. Mas o que uma imagem representa?

Básico sobre imagens

"Uma imagem vale mais que mil palavras."

Todo mundo conhece a frase acima. Mas o que uma imagem representa?

Básico sobre imagens

Uma imagem é uma matriz bidimensional largura x altura formadas por píxels. No exemplo abaixo, temos uma matriz bidimensional de 960 x 720 píxels.

Básico sobre imagens

Uma imagem é uma matriz bidimensional largura x altura formadas por píxels. No exemplo abaixo, temos uma matriz bidimensional de 960 x 720 píxels.

Básico sobre imagens

Uma imagem é uma matriz bidimensional largura x altura formadas por píxels. No exemplo abaixo, temos uma matriz bidimensional de 960 x 720 píxels.int imagem[altura][largura];

Básico sobre imagens

Uma imagem é uma matriz bidimensional largura x altura formadas por píxels. No exemplo abaixo, temos uma matriz bidimensional de 960 x 720 píxels.int imagem[altura][largura];

Básico sobre imagens

Uma imagem é uma matriz bidimensional largura x altura formadas por píxels. No exemplo abaixo, temos uma matriz bidimensional de 960 x 720 píxels.int imagem[altura][largura];

Básico sobre imagens

Uma imagem é uma matriz bidimensional largura x altura formadas por píxels. No exemplo abaixo, temos uma matriz bidimensional de 960 x 720 píxels.int imagem[altura][largura];

Básico sobre imagens

Uma imagem é uma matriz bidimensional largura x altura formadas por píxels. No exemplo abaixo, temos uma matriz bidimensional de 960 x 720 píxels.int imagem[altura][largura];

Básico sobre imagens

Uma imagem é uma matriz bidimensional largura x altura formadas por píxels. No exemplo abaixo, temos uma matriz bidimensional de 960 x 720 píxels.int imagem[altura][largura];

Básico sobre imagens

Uma imagem é uma matriz bidimensional largura x altura formadas por píxels.

O que é um pixel?

O que é um pixel?

O pixel é a menor unidade de uma imagem digital.

Se você der um zoom máximo em uma imagem digital, verá que ela é formada por vários quadradinhos - os pixels.

O que é um pixel?

O pixel é a menor unidade de uma imagem digital.

Se você der um zoom máximo em uma imagem digital, verá que ela é formada por vários quadradinhos - os pixels.

O que é um pixel?

A cor de cada pixel é fruto da combinação de três cores básicas: vermelha (red), verde (green) e azul (blue) - RGB.

O que é um pixel?

A cor de cada pixel é fruto da combinação de três cores básicas: vermelha (red), verde (green) e azul (blue) - RGB.

O que é um pixel?

A cor de cada pixel é fruto da combinação de três cores básicas: vermelha (red), verde (green) e azul (blue) - RGB.

OBS: Chamamos de 'canais' a combinação dessas três cores.

Logo, quando estamos falando de RGB, estamos falando nos Canais da imagem, ou ainda, canais RGB.

Podemos ainda ter um canal a mais, tornando-a RGBA, sendo que o 'A' vem de 'Alpha';

O canal Alpha se refere à transparência nas imagens.

Podemos ter ainda outros padrões de canais, por exemplo CMYK.

O que é um pixel?

Cada uma dessas três cores possui 256 tonalidades, da mais clara à mais escura, que, combinadas, geram mais de 16 milhões de possibilidades de cores.

O que é um pixel?

Os pixels são agrupados em linhas e colunas para formar uma imagem. Uma foto de 960 x 720 pixels, por exemplo, tem em sua composição 960 pixels de largura e 720 pixels de altura, ou seja, é formada por 691.200 pixels, todos do mesmo tamanho.

O que é um pixel?

Quanto maior o número de pixels, maior o volume de informação armazenada na imagem. Ou seja, quanto mais pixels uma imagem tiver, melhor será a sua qualidade, e asim, mais fiel ela será ao objeto real.

O que é um pixel?

Geralmente os pixels são representados de duas formas:

- Escala de cinza; - Colorido;

O que é um pixel?

Escala de Cinza

O que é um pixel?

Escala de Cinza

Em uma imagem na escala de cinza, cada pixel tem um valor entre 0 e 255, onde 0 corresponde ao "preto" e 255 corresponde ao "branco".

Os valores entre 0 e 255 são variantes da escala de cinza, onde valores próximos a 0 são escuros e valores próximos a 255 são mais claros.

O que é um pixel?

Escala de Cinza

Em uma imagem na escala de cinza, cada pixel tem um valor entre 0 e 255, onde 0 corresponde ao "preto" e 255 corresponde ao "branco".

Os valores entre 0 e 255 são variantes da escola de cinza, onde valores próximos a 0 são escuros e valores próximos a 255 são mais claros.

O que é um pixel?

Coloridos

O que é um pixel?

Coloridos

Os pixels coloridos são normalmente representado em um e s p a ç o R G B d e c o r e s , c o n f o r m e j á e s t u d a m o s anteriormente, onde haverá um valor representando ao Red (vermelho), um valor representando o Green (verde) e um valor representando o Blue (azul).

Conforme já vimos também anteriormente, existem outros padrões que não RGB.

O que é um pixel?

Coloridos

Os pixels coloridos são normalmente representado em um e s p a ç o R G B d e c o r e s , c o n f o r m e j á e s t u d a m o s anteriormente, onde haverá um valor representando ao Red (vermelho), um valor representando o Green (verde) e um valor representando o Blue (azul).

Conforme já vimos também anteriormente, existem outros padrões que não RGB.

O que é um pixel?

Coloridos

Cada uma dessas cores são representadas por um valor inteiro entre 0 e 255, onde indica "quanto" dessa cor está naquele pixel.

Como o valor do pixel somente pode e precisa estar em um range de [0, 255] nós normalmente usamos um inteiro sem sinal (8-bit unsigned) para representar cada intensidade de cor.

O que é um pixel?

Coloridos

Então, nós combinamos esses valores em uma tupla RGB na forma (red, green, blue). Essa tupla representa nossa cor.

O que é um pixel?

Coloridos

Para construir a cor branca, por exemplo, nós devemos preencher cada campo (red, green e blue) completos, conforme: (255, 255, 255).

Já para a cor preta, preenchemos essas cores com (0, 0, 0).

Para criar uma cor vermelha pura, basta colocar o máximo do vermelho como: (255, 0, 0).

Como podemos ver, é simplesencontrar um padrão.

O que é um pixel?

Padrões RGB comuns:

O que é um pixel?

Padrões RGB comuns:

- Preto: (0, 0, 0);- Branco: (255, 255, 255);- Vermelho: (255, 0, 0);- Verde: (0, 255, 0);- Azul: (0, 0, 255);- Aqua: (0, 255, 255);- Fuchsia: (255, 0, 255);- Marrom: (128, 0, 0);- Navy: (0, 0, 128);- Olive: (128, 128, 0);- Púrpuro: (128, 0, 128);- Teal: (0, 128, 128);- Amarelo: (255, 255, 0);

O que é um pixel?

Padrões RGB comuns:

- Preto: (0, 0, 0);- Branco: (255, 255, 255);- Vermelho: (255, 0, 0);- Verde: (0, 255, 0);- Azul: (0, 0, 255);- Aqua: (0, 255, 255);- Fuchsia: (255, 0, 255);- Marrom: (128, 0, 0);- Navy: (0, 0, 128);- Olive: (128, 128, 0);- Púrpuro: (128, 0, 128);- Teal: (0, 128, 128);- Amarelo: (255, 255, 0);

Visão geral sobre o sistema de coordenadas

Visão geral sobre o sistema de coordenadas

Como vimos anteriormente, uma imagem é representada como uma "grade" de pixels, representada por uma matriz bidimensional onde temos linhas (altura) e colunas (largura).

Visão geral sobre o sistema de coordenadas

Imaginenos essa "grade" como um pedaço de um plano cartesiano.

Visão geral sobre o sistema de coordenadas

Imaginenos essa "grade" como um pedaço de um plano cartesiano.

Visão geral sobre o sistema de coordenadas

Imaginenos essa "grade" como um pedaço de um plano cartesiano.

Usando esse plano, o ponto (0,0) correspondeao canto esquerdo superior do topo.

Visão geral sobre o sistema de coordenadas

Imaginenos essa "grade" como um pedaço de um plano cartesiano.

Usando esse plano, o ponto (0,0) correspondeao canto esquerdo superior do topo.

Visão geral sobre o sistema de coordenadas

Imaginenos essa "grade" como um pedaço de um plano cartesiano.

Usando esse plano, o ponto (0,0) correspondeao canto esquerdo superior do topo.

Quando movemos parabaixo e direita ambos os valores, y e x, aumentam.

Visão geral sobre o sistema de coordenadas

Nesta imagem nós temos a letra "I" em um plano cartesiano.

P o d e m o s n o t a r q u e t e m o s u m a " g r a d e " 8 x 8 , correspondendo a 64 pixelsno total.

Visão geral sobre o sistema de coordenadas

O ponto em (0,0) corresponde ao canto superior esquerdo do topo na nossa imagem; já o ponto (7,7) corresponde ao canto direito inferior.

Visão geral sobre o sistema de coordenadas

Finalmente, o ponto (3,4) é o pixel três colunas para a direita e quadro linhas abaixo, lembrando que em uma matriz nossas linhas e colunas iniciam em zero.

Acessando e manipulando pixels

Acessando e manipulando pixels

Na aula passada já vimos quais bibliotecas vamos utilizar para fazer a manipulação de imagens.

Já testamos o ambiente abrindo, mostrando e salvando uma imagem com um formato diferente.

Agora como aprendemos alguns conceitos importante sobre a composição de imagens, podemos também aprofundar esse conhecimento na programação fazendo a manipulação direta de pixels.

Acessando e manipulando pixels

Crie o programa03.py

Acessando e manipulando pixels

Escreva o seguinte código:

Acessando e manipulando pixels

Para testar, você vai precisar da imagem trex.png utilizada na aula passada.

Acessando e manipulando pixels

Abra o termina l no mesmo d iretór io onde está o programa03.py e a imagem trex.png e execute o comando:

python programa03.py --imagem trex.png

Acessando e manipulando pixels

Abra o termina l no mesmo d iretór io onde está o programa03.py e a imagem trex.png e execute o comando:

python programa03.py --imagem trex.png

Acessando e manipulando pixels

Devemos ter algo desse tipo na execução.

Acessando e manipulando pixels

Entendendo o código:

Acessando e manipulando pixels

Entendendo o código:

As linhas de 1 até 10 são similares ao que fizemos na primeira aula:

Estamos fazendo o import das bibliotecas necessárias (linhas 1 e 2);

Estamos criando uma instância do ArgumentParser e declarando nosso argumento. (linhas 4 e 5);

Acessando e manipulando pixels

Entendendo o código:

Na linha 7 estamos recebendo os valores passados via argumento.

Nas linhas 9 e 10 estamos colocando a imagem recebida na variável e apresentando ela na tela.

Acessando e manipulando pixels

Entendendo o código:

Na linha 12, estamos recuperando os valores RGB que estão na posição y e x solicitada.

Uma observação é que o OpenCV retorna os valores no padrão 'numpy' e este por sua vez retorna BGR ao invés de RGB. Por issoestamos recebendo (b, g, r) = imagem[0, 0]

Acessando e manipulando pixels

Entendendo o código:

Na linha 13 estamos imprimindo os valores recuperados.

Na linha 15 estamos alterando os valores dos pixels na posição (0,0)e na linha 16 estamos novamente pegando esses valores para imprimí-los na linha 17.

Acessando e manipulando pixels

Entendendo o código:

Na linha 19 criamos uma variável chamada 'canto' e nela estamoscolocando os valores da imagem na posição (y,x) sendo que y inicia em 0 e vai até 100 e o x também inicia em 0 e vai até 100. Isso irá gerar um quadrado 100 x 100 pixels.

Na linha 20 estamos mostrando na tela essa imagem gerada.

Acessando e manipulando pixels

Entendendo o código:

Na linha 22 estamos alterando os pixels da mesma área coletada anteriormente. Estamos preencendo essa área com verde.

Na linha 24 apresentamos a imagem atualizada na tela e na linha 25 aguardamos o pressionamento de uma tecla qualquer para fechar o programa.

Acessando e manipulando pixels

Novamente o programa sendo executado:

Acessando e manipulando pixels

Observações:

Novamente lembrando que, apesar do formato ser RGB, o OpenCV trabalha por padrão com a biblioteca Python chamada Numpy e esta, por algum motivo, retorna os valores coletados nas imagems na ordem inversa, ou seja, BGR ao invés do padrão RGB.

Acessando e manipulando pixels

Observações:

Novamente lembrando que, apesar do formato ser RGB, o OpenCV trabalha por padrão com a biblioteca Python chamada Numpy e esta, por algum motivo, retorna os valores coletados nas imagems na ordem inversa, ou seja, BGR ao invés do padrão RGB.

Acessando e manipulando pixels

Observações:

Novamente lembrando que, apesar do formato ser RGB, o OpenCV trabalha por padrão com a biblioteca Python chamada Numpy e esta, por algum motivo, retorna os valores coletados nas imagems na ordem inversa, ou seja, BGR ao invés do padrão RGB.

Repare que para "manipularmos" os pixels, utilizamos coordenadas cartesianas, passando y e x; No caso acima, estamos coletando os dados com imagem[y, x] sendo imagem[0, 0] e estamos colocando os valores nas variáveis b, g e r conforme o retorno dado pelo Numpy (BGR e não RGB).

Acessando e manipulando pixels

Observações:

Assim como podemos "coletar" as informações de cada pixel de uma imagem, podemos também "colocar" informações nestes pixels.

Para isso, conforme código acima, basta informarmos qual é o pixel a ser modificado e passarmos os valores, lembrando novamente que é no formado inverso BGR.

Acessando e manipulando pixels

Observações:

Assim como podemos "coletar" as informações de cada pixel de uma imagem, podemos também "colocar" informações nestes pixels.

Para isso, conforme código acima, basta informarmos qual é o pixel a ser modificado e passarmos os valores, lembrando novamente que é no formado inverso BGR.

Repare que temos 1 pixel vermelho no ponto 0,0 nesta imagem. :)

Acessando e manipulando pixels

Observações:

Podemos trabalhar com "área" inicial e final, conforme código abaixo, tanto "coletando" dados como "colocando" dados.

Acessando e manipulando pixels

Observações:

Podemos trabalhar com "área" inicial e final, conforme código abaixo, tanto "coletando" dados como "colocando" dados.

Y inicial: O primeiro valor é a coordenada y inicial. Ou seja, onde nossa fatia da matriz irá iniciar. No exemplo acima, inicia em 0;

Y final: O segundo valor é onde o y finaliza. No nosso caso, finaliza em 100;

Acessando e manipulando pixels

Observações:

Podemos trabalhar com "área" inicial e final, conforme código abaixo, tanto "coletando" dados como "colocando" dados.

X inicial: O terceiro valor é a coordenada x inicia. Como queremos pegar a região esquerda superior, iniciamos x em 0;

X final: Por último, o quarto valor é onde finaliza o x. Estamos finalizando em 100 para formar um quadrado;

Acessando e manipulando pixels

Observações:

Acessando e manipulando pixels

Observações:

Acessando e manipulando pixels

Observações:

Acessando e manipulando pixels

Observações:

y = alturax = largura

Processamento Digital de Imagens

Aula 02 Prof. Diemesleno Souza [email protected]://www.diemesleno.com.br

Exercícios

1 - Procure algumas imagens no Google Images ou outra fonte.

2 - Faça um programa, baseado no programa03.py feito em sala que manipule de diferentes formas os pixels da imagem passada como parâmetro com o que aprendemos na aula de hoje.