Color Wheels

|||||| Universidade Estadual de Maringá |||||||||||||||||||||||||||||||||||

|||||| Curso: Bacharelado em Ciências da Computação |||||||||||||

|||||| Disciplina: Processamento Digital de Sinais e Imagens ||||||

|||||| Acadêmico: Gustavo Borelli Bedendo |||||||||||||||||||||||||||||||

|||||| Docente: Franklin Flores ||||||||||||||||||||||||||||||||||||||||||||||||||

|||||| Contato: fcflores@din.uem.br ||||||||||||||||||||||||||||||||||||||||||

|||||||||||||||||||| gustavo.bedendo@gmail.com |||||||||||||||||||||||||||||

||||||||||||||||||||||||||||||||||||||| Trabalho 1 |||||||||||||||||||||||||||||||||||||||

A seguir apresentaremos diferentes discos de cores, cada um com suas caracteristícas e detalhes de implementação.

O objetivo do trabalho seria o segundo disco, onde pelo padrao HSV, o V(value) é fixado com o valor 1(máximo) e alteramos o H(hue -> [0, 360)) e a saturação ([0,1]).

Bibliotecas utilizadas
Inicialização matrizes

A inicialização das imagens (MatrizN), são as futuras imagens (matrizes) que irão receber inicialmente os parametros H, S e V.

No exemplo abaixo, teríamos uma imagem de 8 Pixels de altura e 8 Pixels de largura.

O código acima, não reflete exatamente como o dado está modelado, mas o importante é a ideia de que a imagem consiste numa matriz de tuplas com as caracteristicas da cor, não importando a forma como ela será modelada.

Continuando:

Código — Trecho de modelagem e obtenção dos valores HSV

A função numpy.indices((tupla)) cria matrizes verticais e horizontais(exemplo abaixo) e usaremos a combinação entre essas matrizes para criar uma matriz 2D que servirá para conseguirmos os valores de todos os pontos (consequentemente ângulos) da matriz.

A variável circuloCentral, promove uma operação entre as matrizes e também transferente o centro do circulo criado para o centro da janela.

Em conjunto com a operação acima, realizamos uma Normalização, dividindo pelo raio elevado ao quadrado. Desse modo, conseguimos posteriormente, limitar a região para um disco com Raio = 1, seguindo o padrão HSV ([0,1]).

Para calcularmos o Hue, utilizamos a função arctan, que recebe parâmetros invertidos (Y, X) ao em vez de (X, Y), seguindo o padrão IEEE.

A função artctan2 então retorna um valor numérico dos pontos passados. Esse numero convertido em graus, pela definicão do Hue, nos dará qual é a região(tonalidade) do disco.

Alem de obtermos o Hue, transferimos também o ponto de convergência(subtração e divisão). Transferimos esse ponto para o centro da janela (consequentemente do disco).

Como a biblioteca utilizada foi a OpenCV, a função de conversão (HSV->RGB) recebe um ângulo e não um numero como seu primeiro parâmetro, por isso foi realizada uma conversão utilizando a função (rad2deg).

Seria possivel utilizar outras bibliotecas disponiveis, entre elas a colorsys.

As formulas e algoritmos de conversão manual estão disponiveis em: http://www.easyrgb.com/index.php?X=MATH

Após esse processo, devemos agora alterar a matriz 3D que criamos(imagem final) para convertermos do padrão HSV para RGB.

Abaixo, alguns exemplos:

Hue

Notamos, que apenas a cor mudou, saturação e valor permaneceram a mesma.

Objetivo do trabalho (Hue + Saturation)

Agora podemos notar que as cores mais vivas estão na borda do disco.

A quantidade de "cor " presente é diferetamente proporcional à distancia do centro. Ou seja, quanto mais próximo do centro, menos cor estará presente.

A saturação é considerada a pureza da cor, quanto mais impura, mais branca é a cor.

Hue + Value

V = obtido da mesma forma de S no exemplo acima.

Para entendemos melhor a imagem acima, usaremos outra imagem para retratar melhor a visualização.

H(Hue) — S(Saturação / Chroma) — V (Value)

Olhando a figura acima, entendemos então que o disco criado por exemplo, na verdade não esta convergindo para o centro do disco, mas sim "tridimensionalmente " para o fundo do disco.

Outro exemplo de HSV, agora comparando com HSL

Percebe-se que a ponta do cone na imagem de exemplo, seria o centro do nosso disco, portanto assim como a saturação, a quantidade de luz presente na cor é diretamente proporcional a distancia ao centro(fundo) do disco(cone). Ou seja quanto mais proximo do centro, menor a presença de luz na cor.

Hue + Saturation + Value

Neste exemplo agora, podemos notar, tanto a saturação quanto o valor, alterando em direção ao centro (percebemos tons de cinza nas cores).

Não é possivel mostrar com clareza as três grandezas(HSV) em 2D, mas é possivel imaginal o "fundo " desse disco e analisa-lo como sendo um cone.

Um ultimo exemplo, mostraremos o exemplo acima, desta vez com a saturação invertida.

Hue + Saturation(Invert.) + Value

Apenas para finalizar, na fase final da implementacão, devemos restringir o espaço do disco, isso é feito utilizando indexação condicional disponivel em python, para "apretejar " todos os pixels, com raio maior que 1.

Concatena todas as imagens geradas pelo código
Disco extra (preto e branco) representando a variação da saturação e do valor nos outros discos