Disco Cromático HSV

O Trabalho 1, consiste em gerar um circulo cromático utilizando o sistema de cores HSV.

O modelo HSV(Hue/Saturation/Value) foi criado por A. R. Smith em 1978. O sistema de coordenadas do HSV é cilíndrico, e as cores estão definidas dentro de um “modelo hexcone”. O valor de matiz H vai de 0º a 360º. A saturação de S é o grau de intensidade ou a pureza e vai de 0 a 1. A pureza é quantidade de branco é adicionado à cor, de modo que S = 1, faz com que a cor seja mais pura. O valor (brilho) V define o brilho da cor e também varia de 0 a 1, onde 0 é o preto.

Conforme a figura 1 abaixo, pode ser observada sua dimensão angular através do HUE (tonalidade), iniciando se vermelho primário a 0º, pasando para o verde primário a 120º e para o azul primário em 240º.

Fonte: Wikipédia

Cilindro HSV

O trabalho foi desenvolvido no editor sublime text utilizando a linguagem python, com auxílio das bibliotecas: numpy e cv2(OpenCV).

Bibliotecas

A função abaixo é responsável por gerar o circulo cromático, recebendo como parâmetros: “ImagemQuadrada” = Altura = Largura e o “Raio” do circulo a ser gerado. Os valores utilizados nesta apresentação será: ImagemQuadrada = 400 e Raio=180.

Função

A variável imagem é inicializada com uma matriz do tamanho da imagem (400x400) preenchida com 1, e declarada seu tipo = float32. Em seguida duas matrizes são criadas ll e cc, guardando os valores das linhas e colunas respectivamente. A variável circulo define uma matriz do tamanho da imagem para que de tal forma o circulo venha para o centro da imagem e por fim o limite fora deste circulo é “pintado” com preto. Abaixo os passos são demonstrados:

Trecho de Código 1
Matrizes ll e cc
Imagem

Para este trabalho foi necessário apenas modificar os valores do H = Hue e o S = Saturation, mantido V = 1, pois não era o intuito deste trabalho representar o V = Value, ao final da descrição do trabalho foi adicionado um exemplo, não muito bonito, mas com ele é possível entender o funcionamento do HSV. Para o calculo do H foi utilizada uma função arco tangente(np.arctang), a partir dela foram passados dois pontos, x e y sendo dados do tipo float32, retornando um valor em radianos, como o HSV funciona em graus foi utilizada a função np.rad2deg para que seja possível a conversão de radianos para graus. O S é pureza da imagem em que quanto mais próximo de 1, faz com que a cor seja mais pura. Abaixo os passos são demonstrados:

Trecho de Código 2
Hue
Saturation

Para finalizar a imagem é convertida de HSV para RGB com o auxílio da biblioteca cv2. A imagem final fica projetada na tela até que uma tecla seja apertada. Abaixo passos são demonstrados:

Trecho de Código 3
Resultado Final

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Para tentar ilustrar o Hue, Saturation e Value, uma pequena modificação foi feita no com código, primeiro foi feita uma alteração na Saturação para que ela fosse aplicada apenas na “metade” do circulo e o seu restante fosse aplicado Value, como ele varia de 0–1, o valor escolhido foi 0.5, assim pode-se ter uma ideia de como seria o meio da roda em que foi aplicado o Value, comparada com a parte de cima em que esta aplicado o Saturation. Abaixo passos são demonstrados:

Trecho de Código Modificado.
Circulo HSV

link para o código no git: https://github.com/LucasHelal/Proc-Imagens