• Nenhum resultado encontrado

Processamento Digital de Imagens

N/A
N/A
Protected

Academic year: 2021

Share "Processamento Digital de Imagens"

Copied!
85
0
0

Texto

(1)

Processamento Digital de Imagens

Aula 05 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

(2)
(3)

Na aula passada vimos...

Unidade IV - Processamento de imagens; - Transformação em imagens; - Translação; - Rotação; - Redimensionamento; - Flipping; - Cropping; - Aritimética em imagens; - Operações bitwise; - Máscara;

- Divisão e Merge de canais de imagens; - Espaço de cores.

(4)
(5)

Na aula de hoje veremos...

Unidade V

- Histogramas;

- Utilizando OpenCV para computar histogramas; - Histogramas em escala de cinzas;

- Histogramas coloridos;

- Equalização de histogramas; - Histogramas e Máscaras.

(6)
(7)

Histogramas

(8)

Histogramas

O que é um histograma?

Um histograma representa a distribuição da intensidade de pixels em uma imagem, seja ela colorida ou na escala de cinzas.

O histograma pode ser visualizado como um gráfico que nos dá um alto nível de informações sobre a distribuição da intensidade de pixels quanto aos seus valores.

(9)
(10)

Utilizando OpenCV para computar histogramas

Dentre os vários métodos para processamento de imagens do OpenCV está o cv2.calcHist que iremos utilizar para gerar nossos histogramas.

(11)

Utilizando OpenCV para computar histogramas

(12)

Utilizando OpenCV para computar histogramas

Funcionamento do método cv2.calcHist:

cv2.calcHist(imagem, canais, mascara, histSize, range)

Onde:

imagem: A imagem que queremos calcular o histograma;

canais: Uma lista de índices, onde nós especificamos o índice do canal que nós queremos calcular o histograma. Para calcular um histograma em uma imagem na escala de cinzas nós usaríamos uma lista como [0]. Para calcular um histograma para todos os 3 canais (RGB) de uma imagem colorida, nossa lista seria [0, 1, 2];

(13)

Utilizando OpenCV para computar histogramas

Funcionamento do método cv2.calcHist:

cv2.calcHist(imagem, canais, mascara, histSize, range)

Onde:

mascara: Estudamos máscaras em aulas anteriores. Caso n ó s i n f o r m a r m o s u m a m á s c a r a o h i s t o g r a m a s e r á computado para os pixels presentes na máscara apenas. Caso nós não temos uma máscara ou simplesmente não queremos utilizar nós podemos passar o valor None;

(14)

Utilizando OpenCV para computar histogramas

Funcionamento do método cv2.calcHist:

cv2.calcHist(imagem, canais, mascara, histSize, range)

Onde:

histSize: Número de "bins" que nós queremos utilizar para calcular o histograma. Novamente aqui utilizamos uma lista informando o valor para cana canal. Poderíamos utilizar [32, 32, 32] para utilizar 32 "bins" para cada canal (RGB).

range: O range de possibilidades para cada valor de um pixel. Normalmente esse range está entre [0, 255] para cada canal. Mas se estiver utilizando um outro espaço de cores que não RGB (como por exemplo HSV) esses valores poderão ser diferentes.

(15)

Utilizando OpenCV para computar histogramas

(16)

Utilizando OpenCV para computar histogramas

Sobre "bins"

Um histograma nada mais é do que um gráfico que plota a frequência de distribuição de pixels em uma imagem.

(17)

Utilizando OpenCV para computar histogramas

Sobre "bins"

Para plotar esse gráfico nós devemos dividir os dados em intervalos, chamados "bins".

(18)

Utilizando OpenCV para computar histogramas

Sobre "bins"

Para plotar esse gráfico nós devemos dividir os dados em intervalos, chamados "bins".

No exemplo acima, o histograma representa a distribuição de idades em um grupo de pessoas. Cada "bin" ou intervalo é de 10 anos.

(19)
(20)

Histogramas em escala de cinzas

(21)

Histogramas em escala de cinzas

(22)

Histogramas em escala de cinzas

(23)

Histogramas em escala de cinzas

(24)

Histogramas em escala de cinzas

Entendendo o código:

Nada de novo. Mas veja que estamos

utilizando o OpenCV para converter uma imagem colorida para a escala de cinzas.

(25)

Histogramas em escala de cinzas

(26)

Histogramas em escala de cinzas

Entendendo o código:

Na linha 16, utilizamos o método calcHist do OpenCV para calcular o histograma da nossa imagem.

(27)

Histogramas em escala de cinzas

Entendendo o código:

Repare nos parâmetros informados: imagem → Nossa imagem;

canais → [0] (escala de cinzas);

máscara → None (Não estamos utilizando máscara); histSize → 256 bins;

(28)

Histogramas em escala de cinzas

(29)

Histogramas em escala de cinzas

Executando o programa:

(30)

Histogramas em escala de cinzas

Executando o programa:

(31)

Histogramas em escala de cinzas

(32)

Histogramas em escala de cinzas

Como interpretar o histograma?

Temos os "bins" plotados no eixo x e a quantidade de pixels no eixo y. A maioria dos pixels estão no range entre 60 e 120.

Podemos ver também que existem poucos pixels no range de 200 a 250, significando que há muito poucos pixels brancos na imagem.

(33)
(34)

Histogramas coloridos

(35)

Histogramas coloridos

(36)

Histogramas coloridos

(37)

Histogramas coloridos

(38)

Histogramas coloridos

Entendendo o código:

Nada de novo, mas reparem que importamos agora também o Numpy.

(39)

Histogramas coloridos

(40)

Histogramas coloridos

Entendendo o cógido:

Na linha 13 nós dividimos a imagem em 3 canais (RGB); Na linha 14 criamos uma variável no formato de tupla que conterá as letras que representarão as cores de cada canal.

(41)

Histogramas coloridos

Entendendo o cógido:

Da linha 15 até linha 18, criamos um gráfico que será apresentado mais a frente na linha 25, contendo o histograma de cada canal da imagem.

(42)

Histogramas coloridos

Entendendo o cógido:

Na linha 20 temos um for (duplo), para cada canal em canais, e para cada cor em cores ele calculará o

histograma (linha 21) e criará o plot para ele, sendo apresentado logo abaixo na linha 25.

(43)

Histogramas coloridos

(44)

Histogramas coloridos

Entendendo o código:

Estamos agora calculando um histograma 2D para cada combinação de canais de cores.

(45)

Histogramas coloridos

Entendendo o código:

Na linha 27 criamos um subplot na nossa figura de gráficos passando como parâmetro o número 131. Repare que nas linhas 33 e 39 estamos repetindo o processo, mas incrementando esse parâmetro.

(46)

Histogramas coloridos

Entendendo o código:

Na linha 28 estamos calculando o histograma para 2 canais G (Green) e B (Blue); Repare que estamos utilizando 32 "bins", e com isso teremos então um histograma 32 x 32.

A maioria das aplicações utilizam algo entre 8 e 64 bins. Antes nós utilizamos 255.

(47)

Histogramas coloridos

Entendendo o código:

Das linhas 33 até 37 e de 39 até 43 repetimos o processo anterior, agora com as combinações restantes dos canais.

(48)

Histogramas coloridos

(49)

Histogramas coloridos

Entendendo o código:

Na linha 46, imprimimos a forma do histograma 2D criado. Nas linhas abaixo apresentamos as imagens.

(50)

Histogramas coloridos

(51)

Histogramas coloridos

Executando o programa:

(52)

Histogramas coloridos

Executando o programa:

(53)
(54)

Equalização de histogramas

Equalização de histogram as serve para m elhorar o contraste de uma imagem realizando o "alongamento" da distribuição de pixels na mesma.

Esse procedimento é aplicável a imagens na escala de cinzas. Isso é útil quando uma imagem contém frente ou fundo ambos escuros ou ambos claros.

Geralmente causa efeitos estranhos em fotografias, mas para visualização em contraste de imagens medicas ou de satélites pode ajudar.

(55)

Equalização de histogramas

(56)

Equalização de histogramas

(57)

Equalização de histogramas

(58)

Equalização de histogramas

Entendendo o código:

(59)

Equalização de histogramas

(60)

Equalização de histogramas

(61)

Equalização de histogramas

Entendendo o código:

Na linha 9 lemos a imagem com o método imread do OpenCV. Na linha 10 convertemos a imagem com o método cvtColor do

OpenCV.

Na linha 12, utilizamos o método equalizeHist do OpenCV para equalizar o histograma da imagem.

(62)

Equalização de histogramas

Entendendo o código:

Na linha 14, apresentamos a imagem.

Repare que estamos utilizando o método hstack do Numpy que junta horizontalmente as 2 matrizes (imagem e eq).

(63)

Equalização de histogramas

(64)

Equalização de histogramas

Executando o programa equalize.py

(65)

Equalização de histogramas

Executando o programa equalize.py

(66)
(67)

Histogramas e Máscaras

Quando estudamos sobre máscaras, vimos que uma de suas utilizações é ser utilizada para focar em apenas uma região específica de uma imagem.

Veremos então, como computar o histograma de uma imagem mas somente da região que está mascarada.

(68)

Histogramas e Máscaras

(69)

Histogramas e Máscaras

(70)

Histogramas e Máscaras

(71)

Histogramas e Máscaras

(72)

Histogramas e Máscaras

Entendo o código:

(73)

Histogramas e Máscaras

(74)

Histogramas e Máscaras

Entendendo o código:

Para não ficar repetindo código, criamos um método para

(75)

Histogramas e Máscaras

Entendendo o código:

Repare que dos 3 parâmetros, o único que não é obrigatório é o último 'mascara'.

Então recebemos a imagem que devemos calcular o histograma e um título. Dividimos os canais de cores. Criamos as variáveis para representar cada cor.

(76)

Histogramas e Máscaras

Entendendo o código:

Criamos a figura e adicionamos o título e os labels.

No form para cada canal em canais e cor e cores, calculamos o histograma com o OpenCV, utilizando 256 bins, de 0 até 255.

(77)

Histogramas e Máscaras

(78)

Histogramas e Máscaras

Entendendo o código:

Das linhas 19 até a linha 25, nada de novo.

Na linha 26, utilizamos nosso método para plotar nosso gráfico com o histograma da imagem carregada.

(79)

Histogramas e Máscaras

(80)

Histogramas e Máscaras

Entendendo o código:

Das linhas 28 até a linha 38, nada de novo.

Já havíamos criado máscaras em aulas anteriores. E no nosso método, agora veja que estamos informando a máscara.

(81)

Histogramas e Máscaras

(82)

Histogramas e Máscaras

Execurando o programa histograma_e_mascara.py:

(83)

Histogramas e Máscaras

Execurando o programa histograma_e_mascara.py:

(84)

Processamento Digital de Imagens

Aula 05 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

(85)

Exercícios

Nesta aula estudamos sobre histogramas.

E l e s s ã o s i m p l e s m a s u t i l i z a m o s e x t e n s i v a m e n t e e m processamento de imagens e visão computacional.

Portando, você deve compreender bem os conceitos aqui apresentados.

a) Utilizando os programas já criamos nesta aula, com imagens novas ou até mesmo as mesmas. Modifique os parâmetros de bins e outras configurações se necessário para verificar as diferanças nos resultados apresentados.

Referências

Documentos relacionados

Na maturação, as plantas que foram submetidas ao corte apresentaram menor produção de matéria seca, altura da planta e rendimento de sementes, enquanto o número de colmos e

Figura 4 - Número de estudantes com deficiência visual identificado em cada uma das Instituições de Ensino Superior (IES) do estado do Espírito Santo que

Pode-se observar na Tabela 3 que, na ausência de irrigação, os coqueiros provenientes de mudas com sete meses de idade apr sentaram uma emissão foliar, nos 12 primeiros meses apds

Consulte a Secção 11 para obter informações pormenorizadas sobre sintomas e efeitos na saúde.. Classificação conforme Regulamentação (EC) 1272/2008 [CLP/GHS] SECÇÃO

Comunicar ao seu médico ou farmacêutico, todos os medicamentos que estiver em uso ou que tenha feito uso recentemente ao início do tratamento com o ALCYTAM (mesmo os sem necessidade

O que Paulo estava querendo dizer quando perguntou, em Romanos 3.7: O que Paulo estava querendo dizer quando perguntou, em Romanos 3.7: “Se pela minha mentira abundou mais a verdade

4.1 - O processo de seleção será composto de 03 (três) etapas, Análise Curricular, Prova Teórica, Avaliação De Habilidades e Entrevista, que serão elaboradas

· Utilizações identificadas relevantes da substância ou mistura e utilizações desaconselhadas Não existe mais nenhuma informação relevante disponível.. · Utilização