Upload
vuongdung
View
214
Download
0
Embed Size (px)
Citation preview
Processamento Digital de Imagens
Aula 02 Prof. Diemesleno Souza [email protected]://www.diemesleno.com.br
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...
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
"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];
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
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
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:
- 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
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
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
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
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
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;
Processamento Digital de Imagens
Aula 02 Prof. Diemesleno Souza [email protected]://www.diemesleno.com.br