Artigo - Programa de Reconhecimento de Cores

August 19, 2017 | Author: Willyan Alves | Category: Rgb Color Model, Vision, Artistic Techniques, Light, Qualia
Share Embed Donate


Short Description

Download Artigo - Programa de Reconhecimento de Cores...

Description

GOVERNO DO ESTADO DE MATO GROSSO SECRETARIA DE ESTADO DE CIÊNCIA E TECNOLOGIA UNIVERSIDADE DO ESTADO DE MATO GROSSO CAMPUS UNIVERSITÁRIO “DEP. EST. RENE BARBOUR” DEP. DE CIÊNCIA DA COMPUTAÇÃO

PROGRAMA DE RECONHECIMENTO DE CORES EM UMA IMAGEM

Willyan Alves da Silva [email protected]

2

RESUMO: Programa acadêmico que reconhece algumas cores pré-definidas em uma imagem de bitmap, desenvolvido em linguagem C, utilizando a API Allegro.

PALAVRAS-CHAVE: Allegro, Reconhecimento, RGB, Cores, Imagem, Bitmap, C, API;

INTRODUÇÃO O intuito deste artigo é mostrar de maneira objetiva alguns conceitos de de RGB, Bitmap e como se tornam mais de trabalharem com os mesmos dentro da linguagem C utilizando a API Allegro.

3 1

RGB

O RGB é a abreviatura do sistema de cores aditivas formado por Vermelho (Red), Verde (Green) e Azul (Blue). O propósito principal do sistema RGB é a reprodução de cores em dispositivos eletrônicos como monitores de TV e computador, "datashows", scanners e câmeras digitais, assim como na fotografia tradicional. Em contraposição, impressoras utilizam o modelo CMYK de cores subtrativas. O modelo de cores RGB é baseado na teoria de visão colorida tricromática, de YoungHelmholtz, e no triângulo de cores de Maxwell. O uso do modelo RGB como padrão para apresentação de cores na Internet tem suas raízes nos padrões de cores de televisões RCA de 1953 e no uso do padrão RGB nas câmeras Land/Polaroid, pós Edwin Land.

1.1

FUNCIONAMENTO O modelo de cores RGB é um modelo aditivo no qual o vermelho, o verde e o azul (usados em modelos aditivos de luzes) são combinados de várias maneiras para reproduzir outras cores. O nome do modelo e a abreviação RGB vêm das três cores primárias: vermelho, verde e azul (Red, Green e Blue, em inglês), e só foi possível devido ao desenvolvimento tecnológico de tubos de raios catódicos – com os quais foi possível fazer o display de cores ao invés de uma fosforescência monocromática (incluindo a escala de cinza), como no filme preto e branco e nas imagens de televisão antigas. Estas três cores não devem ser confundidas com os pigmentos primários Ciano, Magenta e Amarelo, conhecidos no mundo das artes como “cores primárias”, já que se combinam baseadas na reflexão e absorção de fótons visto que o RGB depende da emissão de fótons de um componente excitado a um estado de energia mais elevado (fonte emissora, por exemplo, o tubo de raios catódicos). O modelo de cores RGB, por si só, não define o que significa “vermelho”, “verde” ou “azul” (espectroscopicamente), e então os resultados de misturá-los não são tão exatos (e sim relativos, na média da percepção do olho humano).

4 1.2

O SISTEMA RGB E AS TELAS

Uma aplicação comum do modelo de cores RGB é o ecrã/tela do computador ou display a cores em um tubo de raios catódicos, de cristal líquido ou de plasma, como televisões ou monitores de computador. Cada pixel na tela pode ser representado no computador ou na interface do hardware (por exemplo, uma “placa de gráficos”) como valores para vermelho, verde e azul. Esses valores são convertidos em intensidades ou voltagens via correção-gama, para que as intensidades procuradas sejam reproduzidas nos displays com fidelidade. Por usar uma combinação apropriada para as intensidades de vermelho, verde e azul, muitas outras cores podem ser representadas. Um adaptador de display típico do ano de 2007 utiliza até 24 bits de informação para cada pixel. Geralmente, a partição é de 8 bits para cada uma das cores (vermelho, verde e azul), dando um alcance de 256 possíveis valores, ou intensidades, para cada tom. Com este sistema, mais de 16 milhões (16.777.216 ou 256³) diferentes combinações de tons, saturação e brilho podem ser especificados, mesmo que não sejam facilmente distinguidos . 1.3

REPRESENTAÇÃO NUMÉRICA

Uma cor no modelo de cores RGB pode ser descrita pela indicação da quantidade de vermelho, verde e azul que contém. Cada uma pode variar entre o mínimo (completamente escuro) e máximo (completamente intenso). Quando todas as cores estão no mínimo, o resultado é preto. Se todas estão no máximo, o resultado é branco. Uma das representações mais usuais para as cores é a utilização da escala de 0 à 255, bastante encontrada na computação pela conveniência de se guardar cada valor de cor em 1 byte (8 bits). Assim, o vermelho completamente intenso é representado por 255, 0, 0. • Branco - RGB(255,255,255) • Azul - RGB(0,0,255) • Vermelho - RGB(255,0,0) • Verde - RGB(0,255,0) • Amarelo - RGB(255,255,0) • Magenta - RGB(255,0,255) • Ciano - RGB(0,255,255)

5 • Preto - RGB(0,0,0) Outro sistema adaptado é o tipo numérico real. Valores decimais para definir tons da cor. São eles utilizados da seguinte forma RGB(0.554,1,0.200) o que gera a cor verde-limão. Nos programas de edição de imagem, esses valores são habitualmente representados por meio de notação hexadecimal, indo de 00 (mais escuro) até FF (mais claro) para o valor de cada uma das cores. Assim, a cor #000000 é o preto, pois não há projeção de nenhuma das três cores; em contrapartida, #FFFFFF representa a cor branca, pois as três cores estarão projetadas em sua intensidade máxima.

2

BITMAP

O formato BMP é um dos formatos mais simples, desenvolvido conjuntamente pela Microsoft e pela IBM, o que explica que seja partucularmente usadonas plataformas Windows e OS/2. Um ficheiro BMP é um ficheiro bitmap, ou seja, um ficheiro de imagem gráfico que armazena os pixéis sob a forma de quadro de pontos e gerindo as cores, quer em cor verdadeira, quer graças a uma paleta indexada. O formato BMP foi estudado de maneira a obter um bitmap independente do periférico de afixação (DIB, Device independent bitmap). A estrutura de um ficheiro bitmap é a seguinte: • Rubrica do ficheiro(em inglês file header) • Rubrica do bitmap(em inglês bitmap information header, chamado também information Header) • Paleta (opcional) • Corpo da imagem

2.1

RUBRICA DO FICHEIRO

A rubrica do ficheiro fornece informações sobre o tipo de ficheiro (Bitmap), a sua dimensão e indica onde começam as informações relativas à imagem propriamente dita. A rubrica compõe-se de quatro campos :

6 • A assinatura (em 2 bytes), indicando que se trata de um ficheiro BMP com a ajuda dos dois caracteres. • BM, 424D hexadecimal, indica que se trata de um Bitmap Windows. • BA indica que se trata de um Bitmap OS/2. • CI indica que se trata de um ícone cor OS/2. • CP indica que se trata de um ponteiro de cor OS/2. • CI indica que se trata de um ícone OS/2. • PT indica que se trata de um ponteiro OS/2. • A dimensão total do ficheiro em bytes (codificado em 4 bytes) • Um campo reservado (em 4 bytes) • O deslocamento da imagem (em 4 bytes), ou seja, o endereço relativo do início das informações relativas à imagem em relação ao início do ficheiro. 2.2

RUBRICA DA IMAGEM

A rubrica da imagem fornece informações sobre a imagem, nomeadamente as suas dimensões e as suas cores. A rubrica da imagem é composta por quatro campos: • A dimensão da rubrica da imagem em bytes (codificada em 4 bytes). Os valores hexadecimais seguintes são possíveis, de acordo com o tipo de formato BMP : • 28 pour Windows 3.1x, 95, NT,… • 0C pour OS/2 1.x • F0 pour OS/2 2.x • A largura da imagem (em 4 bytes), ou seja, o número de pixéis horizontalmente (em inglês width) • A altura da imagem (em 4 bytes), ou seja, o número de pixéis verticalmente (em inglês height) • O número de planos (em 2 bytes). Este valor vale sempre 1

7 • A profundidade de codificação da cor (em 2 bytes), ou seja, o número de bits utilizadas para codificar a cor. Este valor pode ser igual a 1,4,8,16,24 ou 32 • O método de compressão (em 4 bytes). Este valor vale 0 quando a imagem não é comprimida, ou 1,2 ou 3, de acordo com o tipo de compressão utilizado: • 1 para uma codificação LAN de 8 bits por pixel • 2 para uma codificação LAN de 4 bits por pixel • 3 para uma codificação bitfields, significando que a cor é codificada por uma tripla máscara representada pela paleta • A dimensão total da imagem em bytes (em 4 bytes). • A resolução horizontal (em 4 bytes), ou seja, o número de pixéis por metro horizontalmente • A resolução vertical (em 4 bytes), ou seja, o número de pixéis por metro verticalmente • O número de cores da paleta (em 4 bytes) • O número de cores importantes da paleta (em 4 bytes). Este campo pode ser igual a 0 quando cada cor tem a sua importância. 2.3

PALETA DA IMAGEM A paleta é opcional. Quando uma paleta é definida, contém sucessivamente 4 bytes para

cada um das suas entradas que representam : • A componente azul (sobre um byte) • A componente verde (sobre um byte) • A componente vermelha (sobre um byte) • Um campo reservado (sobre um byte)

2.4

CODIFICAÇÃO DA IMAGEM A codificação da imagem faz-se escrevendo sucessivamente as bits que correspondem a

cada pixel, linha por linha, começando pelo pixel inferior à esquerda.

8 • As imagens em 2 cores utilizam 1 bit por pixel, o que significa que um byte permite codificar 8 pixéis • As imagens em 16 cores utilizam 4 bits por pixel, o que significa que um byte permite codificar 2 pixéis • As imagens em 256 cores utilizam 8 bits por pixel, o que significa que um byte codifica cada pixel • As imagens em cores reais utilizam 24 bits por pixel, o que significa que são necessárias 3 bytes para codificar cada pixel, tendo o cuidado de respeitar a ordem da alternância azul, verde e vermelha. Cada linha da imagem deve comportar um número total de bytes que seja um múltiplo de 4; se não for o caso, a linha deve ser completada com 0 de maneira a respeitar este critério.

3

ALLEGRO

Allegro é uma biblioteca para programação de jogos, criada por Shawn Hargreaves. O intuito principal era de fazer uma biblioteca de código simples de maneira a facilitar a vida dos iniciantes na área de programação de jogos reduzindo os esforços em aprender sobre DirectX, OpenGL ou outras API’s. E o Allegro cumpre bem sua missão. É uma biblioteca de utilização simples, com uma pequena curva de aprendizado e que nos possibilita de fazer coisas muito interessantes além de multiplataforma. Para instalar a API no Dev C++ é simples o software tem um pequeno plug-in que facilita o trabalho de instalação do Allegro. Basta ir no menu Ferramentas >> Atualizações >> Selecione o Mirror >> Check for Updates >> Allegro.

4

PROGRAMA CÓDIGO FONTE

#include #include #include #define LARG 640 #define ALT 480 void init();

9 void deinit(); BITMAP *buffer; int preto, vermelho, branco, azul, verde, cor,r,g,b; int main() { init(); while (!key[KEY_ESC]) { buffer=load_bitmap("c:\\imagem.bmp",NULL);// imagemm int i; i = 1; preto = 0; vermelho = 0; branco = 0; azul = 0; verde =0; for (i=1;i
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF