Cores para o intelecto e o bolso

Vale a pena estudar como um computador apresenta cores — não só porque o estudante se sente obrigado a rever a ideia de número, mas porque essa é uma linha de pesquisas difícil e rentável.


Teresa Chambel dá aulas para jovens estudantes de engenharia na Faculdade de Ciências da Universidade de Lisboa (em Portugal), porque é especialista na interface entre pessoas e máquinas, especialmente computadores. Pouca gente dá um minuto de pensamento para o modo como o computador mostra imagens ao usuário, e ainda por cima imagens coloridas, mas Teresa faz seus alunos virar o assunto do avesso. “Eles desvendam a mágica pela qual o computador realiza as tarefas com as quais estão acostumados”, diz Teresa. Eles descobrem que a tela do computador é feita de milhares de pontos (ou pixels); num monitor de tela plana com 1.080 linhas e 1.920 colunas, são 2.073.600 pixels. Eles descobrem que, para cada pixel, o computador atribui três números de 0 a 255, e cada um desses números vai dizer à tela como iluminar o pixel com vermelho, verde e azul. Eles descobrem que um pixel laranja escuro pode ser representado com três números na base decimal, ou três números na base hexadecimal, ou três números na base binária. São três modos distintos de representar a cor de um pixel, mas são equivalentes:

Vermelho (R)

Verde (G)

Azul (B)

249

144

17

F9

90

11

11111001

10010000

00010001

“Curiosamente”, diz Teresa, “durante as aulas eles finalmente entendem alguns dos conceitos que estudaram quando crianças, como a aritmética da notação posicional de base 10. Eles só compreendem isso quando fazem contas com números escritos em outras bases, como a binária e a hexadecimal.” E aí eles não só estudam engenharia, como começam a fazer uns aos outros perguntas interessantes sobre matemática: como alguém pode identificar um número par ou um número ímpar numa outra base, como a binária ou a hexadecimal?

Quando o jovem estudante de engenharia (vamos chamá-lo de Dante) passa a investigar como os computadores mostram imagens e cores, descobre que nunca tinha parado para pensar que, até poucos anos atrás, os computadores só mostravam imagens com 480.000 pixels em tons de verde (se o monitor fosse de fósforo verde) ou tons de laranja (se o monitor fosse de fósforo âmbar). Descobre também que, embora hoje os computadores mostrem ao usuário imagens com mais pixels e com pixels coloridos, falta muito para apresentar imagens com a mesma qualidade daquelas que o cérebro do usuário produz com a ajuda de seus próprios olhos. Em resumo, há muito o que fazer para deixar os computadores melhores na arte de capturar e de apresentar imagens; essa é uma linha de pesquisas satisfatória para o intelecto e para o bolso.

Para máquinas e pessoas. Hoje os físicos sabem que a luz, em certas ocasiões, se comporta como se fosse feita de partículas discretas (os fótons), mas, em outras ocasiões, como se fosse feita de perturbações em ondas eletromagnéticas — ou, em outras palavras, a luz vibra ou oscila. Ondas eletromagnéticas podem vibrar tão lentamente quanto 1 quilohertz (mil oscilações por segundo) ou tão rapidamente quanto 2,4 ∙ 1023 hertz (240 milhares de bilhões de bilhões de oscilações por segundo), mas o olho humano só consegue ver uma parcela pequena do espectro eletromagnético, que vai de uns 400 terahertz (vermelho) a uns 789 terahertz (violeta). Segundo cientistas especializados no assunto, uma pessoa saudável reconhece 10 milhões de cores.

Quando surgiram os monitores coloridos, surgiu também o sistema RGB de representação de cores. Para cada pixel do monitor, o computador atribui três números: primeiro representa a quantidade de vermelho (red); o segundo representa a quantidade de verde (green); e o terceiro representa a quantidade de azul (blue). Como o computador usa 1 byte para representar cada número, e como 1 byte tem 8 bits, então o computador usa 24 bits para representar a cor de cada pixel, de:

00000000|00000000|00000000

Até:

11111111|11111111|11111111

Cada byte pode ir de 0 até 255 em notação decimal, isto é, de 00 até FF em notação hexadecimal. (Com oito bits por byte, o número de combinações é igual a 28 = 256.) Se um pixel ganha o código RGB (0, 0, 0), ele será 100% preto, pois nenhuma cor estará ativada. Se um pixel ganha o código RGB (255, 255, 255), ele será 100% branco, pois todas as cores estão ativadas ao máximo. Nos cursos de engenharia, talvez o Dante monte tabelas de cores, só para ir se acostumando com os efeitos de mais vermelho ou menos vermelho, mais verde ou menos verde, mais azul ou menos azul:

Código RGB

Cor do pixel

(80, 150, 200)10

(200, 150, 80)10

(200, 20, 115)10

(30, 255, 180)10

(90, 90, 90)10

Com menos vermelho, as cores tendem mais para o ciano (azul esverdeado). Com menos verde, elas tendem mais para a fúchsia (um tipo de violeta). Com menos azul, elas tendem mais para tons de amarelo e de laranja.

A certa altura do curso, Dante se pergunta quantas cores distintas um computador pode mostrar, e para achar a resposta recorre a um arranjo simples:

256 · 256 · 256 = 16.777.216

E aí pergunta a si mesmo: se o olho humano vê 10 milhões de cores, e se um computador consegue mostrar 16 milhões de cores, então um computador pode mostrar com perfeição todas as cores que o ser humano vê? Na verdade, não. Nem todas as cores podem ser convertidas em três componentes, sendo um vermelho, um verde, e um azul. A figura 1 mostra todas as cores do sistema RGB dentro de uma área cinza: essa área cinza representa as cores que um homem vê, mas que o sistema RGB não consegue reproduzir. É por isso que, no computador, mesmo as fotos mais realistas têm um quê de artificial.

Fig. 1. Com o sistema RGB, engenheiros conseguem mostrar as cores dentro do triângulo; o olho humano, contudo, pode ver cores que os engenheiros não podem representar com o sistema RGB. Nesta figura, tais cores estão mostradas em cinza.

Depois de estudar o sistema RGB, o Dante entende como os computadores manipulam pixels coloridos, mas ele não pode usar códigos RGB para conversar sobre cores com leigos — por exemplo, para conversar com o usuário que lhe encomendou um sistema. Para conversar com profissionais de artes gráficas, Dante terá de mencionar o sistema CMYK — C de ciano, M de magenta, Y de amarelo, K de preto. No sistema CMYK, Dante deve trabalhar com porcentagens — a porcentagem de ciano, de magenta, de amarelo e de preto. “Esse código é útil para quem lida com dispositivos à base de tintas, como as impressoras”, informa Teresa Chambel. Para calcular a conversão, Dante pode usar um portal especializado, como o Wolfram Alpha. Por exemplo, para converter o pixel de cor RGB (130, 60, 200), digita o comando “color #823CC8 in CMYK” e o portal devolve várias informações, entre elas:

Cor do pixel

Código RGB (decimal)

(130, 60, 200)

Código RGB (hexadecimal)

#823CC8

Código CMYK

(35%, 70%, 0%, 22%)

Sabendo disso, Dante deve dizer ao artista: “Este violeta tem 35% de ciano, 70% de magenta, nada de amarelo, e 22% de preto.” Mas o portal Wolfram Alpha devolve outra informação importante: o código HSB. Dante deve usar esse código quando quer que seu programa apresente ao usuário uma paleta de cores mais amigável. O programa (escrito por Dante) pede ao sistema operacional do computador (por exemplo, o Windows): apresente ao usuário a cor HSB (270º, 70%, 78%), e o sistema operacional vai apresentar ao usuário uma caixa de diálogo feita com base no sólido da figura 2 (abaixo). Para escolher uma cor no sistema HSB, a única coisa que o usuário tem de fazer, em geral, é posicionar o cursor sobre a cor desejada e apertar uns botões para determinar a saturação e o brilho. “O modelo HSB é orientado às pessoas”, diz Teresa. “Ele usa conceitos com os quais artistas, ou qualquer pessoa que trabalhe com cores, estão familiarizados.”

Fig. 2. No sistema HSB, o usuário informa o ângulo em que está a cor que lhe interessa (em graus), a saturação (em porcentagem) e o brilho (também em porcentagem). Note que Hue = Matiz, Saturation = Saturação, e Value = Brilho.

Pilha prima de biscoitos. Num curso de engenharia, depois de conhecer o básico sobre como representar uma cor, Dante se debruça sobre questões mais complicadas:

1. Como representar uma imagem por meio de figuras geométrica num plano (duas dimensões), de tal forma que as imagens deem a sensação de três dimensões? Ana Paula Cláudio, também professora na Universidade de Lisboa, diz que o aluno vai estudar geometria analítica à beça para representar os pontos no plano e o modo como os pontos devem ser mover — por exemplo, no caso de um filme ou de um jogo, ou no caso de um efeito especial aplicado a uma foto ou a um fotograma de filme.

2. Ao mover os pixels pela tela, como controlar sua cor e seu brilho? Numa situação real, sempre que um objeto se move, sua cor se altera, porque a luz a que está exposto se altera. Ana Paula diz que o estudante terá de criar algoritmos para tratar da reflexão e da refração da luz em cada um dos pixels da imagem. Isso significa criar algoritmos que façam cálculos com milhões de matrizes por minuto. “A luz é um fenômeno extremamente complexo”, diz Ana Paula. “O segredo é simplificar o problema e adotar artifícios técnicos para que as simplificações não comprometam a qualidade das imagens.”

3. Como usar os pixels coloridos numa imagem para determinar o formato dos objetos? Uma pessoa consegue olhar uma foto e distinguir o mergulhador da tartaruga marinha, mas o computador não consegue, exceto se tiver programas especiais de reconhecimento. É função do engenheiro bolar tais programas. Com um programa bem-feito, uma emissora de TV pode, por exemplo, catalogar automaticamente todos os filmes nos quais aparece uma determinada pessoa — dizendo em que hora, minuto, e segundo a pessoa aparece, e quanto tempo dura tal aparição.

4. E caso o computador precise apresentar ao usuário não coisas concretas, como mergulhadores e tartarugas, mas ideias mais abstratas, como arquivo, documento, índice? Beatriz Carmo, da Universidade de Lisboa, é doutora em técnicas de visualização de imagens. “Um exemplo é a visualização de uma coleção de documentos”, diz Beatriz. “Antes de bolar a visualização, preciso executar um pré-processamento da coleção, para coletar dados numéricos, como a frequência com que certa palavra ocorre. Isso me ajudará a identificar as palavras-chave.” Com essa informação, Beatriz bola um jeito de usar as cores de tal modo que o usuário compreenda rapidamente quais são os números mais importantes naquela coleção de documentos.

Teresa, Ana Paula, e Beatriz dizem que as primeiras aulas sobre o sistema RGB e sobre os outros sistemas põem os alunos para pensar em números de um jeito mais profundo. No sistema decimal, os números pares terminam com algum algarismo múltiplo de 2. E no sistema binário? Terminam com 0 — pois 2 é igual a 10, 4 é igual a 100, 6 é igual a 110. E no sistema hexadecimal? De 0 a 9, o sistema decimal e o hexadecimal coincidem, mas, a partir de (10)10, A é par, B é ímpar, C é par, D é ímpar, E é par e F é ímpar. O único modo de se habituar com esse método tão esquisito de encarar pares e ímpares é manter uma tabela colada na parede, com os números decimais de um lado e os hexadecimais de outro. Numa classe animada, logos os alunos compreendem algumas ideias que estudaram quando eram crianças e adolescentes: as propriedades de um número não têm nada a ver com o modo como o homem põe o tal número no papel. No sistema decimal, 59 é um número primo, e no sistema hexadecimal 3B também é. No sistema decimal, os divisores de 10 são 1, 2, 5, e 10, e no sistema hexadecimal, são 1, 2, 5, e A. “Conhecer os conceitos matemáticos que estão por trás das representações gráficas dá ao aluno uma maior sensação de domínio sobre o que ele usa”, diz Teresa. O aluno por fim até entende que pode ver uma pilha de biscoitos de chocolate como se fosse um número, e que, se a pilha for um número primo, por exemplo cinco, não pode ser repartida igualitariamente em pedaços inteiros, exceto por uma única pessoa (que come a pilha inteira) ou por cinco pessoas (que comem um biscoito cada uma). {FIM}



Observações:

1. Publiquei essa matéria pela primeira vez na revista Cálculo: Matemática para Todos, edição 16, maio de 2012, pág. 56. A versão que acabou de ler foi revista e ligeiramente reescrita; as informações factuais são as que valiam na ocasião.

2. As entrevistas foram feitas pelo jornalista Renato Mendes, que morava em Lisboa.

3. Se eu tivesse o poder de mudar o sistema brasileiro de educação por mágica, daria maior ênfase ao ensino de matemática discreta — conjuntos, relações e funções, máquinas de estados finitos e máquinas de Turing, semântica, probabilidade discreta, teoria da informação, teoria das decisões e dos jogos. Tudo isso sempre com o apoio de computadores, e com uma linguagem de computação boa para explorações e prototipagem, tipo Python. Em particular, colocaria meus alunos para jogar muitas variedades de jogos simples e, quando estivessem bons num jogo relativamente fácil, faria com que escrevessem programas de computador para apoiá-los durante as partidas, ou até programas que jogassem por si mesmos.