Ícone do site Universidade da Tecnologia

Computação Gráfica, Processamento de Imagens, Visão Computacional & Cia

Quando trabalhamos com projetos que envolvem um software 3D é comum misturarmos conhecimentos de diferentes disciplinas de cursos de TI, por isso vou compartilhar neste post como certas funcionalidades podem ser relacionadas a áreas de estudo que empregam imagens e dados.

Computação gráfica é a disciplina que estuda como armazenar, gerar, processar e exibir imagens (ou gráficos) em equipamentos com telas. Ela representa um campo de estudo muito amplo, sendo dividida em áreas menores, como a Síntese de Imagens, o Processamento de Imagens e a Visão ou Análise Computacional. Muitas vezes o termo Computação Gráfica é usado como sinônimo da área de Síntese de Imagens, relacionada à geração de imagens por meio de um computador.

Na síntese de imagens ou Computação Gráfica, geramos imagens a partir de dados de entrada, sejam eles escritos via programação (como para desenhar objetos na tela via código) ou criados em um editor (3D ou de imagens). Das duas formas temos dados gerando uma ou várias (sequência de) imagens como resultado final. Quando desenhamos um objeto na tela, seja ele 2D ou 3D, usamos conhecimentos de computação gráfica, como modelagem de dados e objetos gráficos, texturização, iluminação e renderização. A Figura 1 mostra um exemplo de um trecho de código que gera uma face triangular no espaço tridimensional.

void Update() {

  // Gizmo 3D
  Debug.DrawLine(Vector3.zero, Vector3.right, Color.red); // eixo X
  Debug.DrawLine(Vector3.zero, Vector3.up, Color.green); // eixo Y
  Debug.DrawLine(Vector3.zero, -Vector3.forward, Color.blue); // eixo Y

  Mesh malha = new Mesh();
  malha = this.GetComponent<MeshFilter>().mesh;
  malha.name = "Procedural Grid";

vertices = new Vector3[4];

vertices[0] = new Vector3(6.0f, 0.0f, 6.0f); 
vertices[1] = new Vector3(6.0f, 0.0f, -6.0f);
vertices[2] = new Vector3(-6.0f, 0.0f, -6.0f);
vertices[3] = new Vector3(-6.0f, 0.0f, 6.0f);

malha.vertices = vertices;

int[] triangulos = new int[3];
for(int i=0;i<triangulos.Lenght(); i++)
  triangulos[i] = i;

malha.triangles = triangulos;


}

Figura 1: (a) algumas linhas de código que geram (b) uma face triangular no universo 3D.

O inverso desse fluxo “dados ➡ imagem”, ou seja, “imagem ➡ dados”, é chamado de Visão Computacional, disciplina que estuda a extração de dados a partir de imagens. Por exemplo, imagine um software inteligente de estacionamento que, usando as imagens capturadas em tempo real por uma câmera, reconhece a placa do carro e já imprime as letras e os números no ticket de entrada. Um sistema desse tem utilidade também em estradas, pedágios e qualquer sistema viário que precise identificar os veículos (figura 2). Tecnicamente, é preciso segmentar a região de interesse da imagem (como achar o menor retângulo possível que englobe toda a placa), varrer a região usando máscaras ou blocos em busca de padrões (de letras e números) e, então, processar todos os dígitos e incluir essa informação no formulário que será impresso.

Existem vários outros exemplos também, como tradução de texto em tempo real a partir da imagem capturada pela câmera, análise de imagens de exames para atuar como ferramenta de auxílio de laudos, mapeamento de uma área com filmagens aéreas e outras possibilidades que envolvam dados a partir da análise de imagens.

Figura 2: Visão computacional estuda a segmentação da imagem e extração de dados.

Quando os dados desejados nas imagens formam um objeto ou cenário a ser reconstruído no espaço 3D, entramos em uma disciplina mais específica, chamada de Visão Robótica (Figura 3).

Nela estudamos como podemos reconstruir uma cena 3D a partir de imagens, como se cada pixel da imagem levasse para um ponto do espaço e assim conseguimos recriar o cenário capturado pela câmera. Essa tecnologia é usada por exemplo em esportes, como o tira-teima do futebol ou o challenge do tênis. O sistema pega algumas imagens e reconstrói o cenário e o objeto de interesse, no caso a quadra e a bola, e assim sabe exatamente se a bola pegou ou passou da linha com extrema precisão. Um robô autônomo pode usar essas técnicas também para reconstruir em tempo real o ambiente em que está e conseguir navegar evitando paredes e obstáculos normais apenas pelas imagens captadas pelas câmeras, sem usar sensores de distância.

Figura 3: Visão Robótica estuda a reconstrução de cenários 3D a partir de imagens.

Em Processamento de Imagens, temos uma imagem como entrada e uma imagem como saída. Os filtros do app Instagram, Prisma e vários outros do estilo, são exemplos de software com funcionalidades de processamento de imagens. Existem outros exemplos, como passar um filtro na imagem para deixa-la mais suavizada nas bordas, mudar o sistema de cores, segmentar objetos na imagem e outros. A biblioteca OpenCV da Intel, gratuita, possui uma série de rotinas de Processamento de Imagem e de Visão Computacional.

Figura 4: Filtros do aplicativo Instagram são exemplos de Processamento de Imagens.

Apesar dessas disciplinas serem separadas para estudo, é comum ver alguns tipos de software, como apps 3D, de AR (Realidade Aumentada), de VR (Realidade Virtual) ou até mesmo o Instagram, combinando funcionalidades que misturam conhecimentos multidisciplinares. O
Instagram usa Processamento de Imagem, Visão Computacional e Computação Gráfica. Vamos falar dele em um próximo post.

O curso de Desenvolvimento Multiplataforma da Mental Guild engloba conhecimentos de Processamento de Imagens e de Visão Computacional, enquanto que o curso de Especializações aborda Computação Gráfica.

Quer saber mais diferenças como esta?
Escreva-nos e participe da construção de conteúdo sugerindo um tema.

Que tal aprender Programação a partir do Level 1 por menos de R$ 20?

Temos 140 alunos que já fizeram nosso curso de Desenvolvedor Júnior.

Digite abaixo em qual email você deseja receber o CUPOM de Desconto.

Enviamos o Cupom para o seu email. Acesse agora e Garanta seu Desconto!

Sair da versão mobile