Thanks to visit codestin.com
Credit goes to github.com

Skip to content

jocile/reducao-de-dimensionalidade

Repository files navigation

Redução de Dimensionalide de imagens

Este é um Desafio de Projeto: Redução de Dimensionalidade em Imagens para Redes Neurais da DIO.me com o objetivo de criar um programa em Python que processa imagens de uma URL fornecida pelo usuário e converte para escala de cinza e binarizando-as.

Redução de Dimensionalidade: Um Guia para Imagens

A redução de dimensionalidade é a técnica utilizada para simplificar os dados, eliminando informações irrelevantes ou redundantes.

O Que É Redução de Dimensionalidade?

Imagine que você está lidando com uma base de dados gigante. Essa base pode conter muitas colunas e linhas cheias de valores, mas nem todos esses dados são necessários para o aprendizado do sistema. Às vezes, há informações duplicadas ou até irrelevantes — como a data de nascimento em um banco de dados sobre clientes, que não é tão importante quanto o sexo ou a renda.

Por exemplo: um veículo autônomo detectando pedestres na rua, ele precisa se concentrar nas pessoas que estão realmente atravessando. Mas e se eu reduzir as informações? Pode ser útil para focar apenas nos dados relevantes — como o movimento das pessoas ou a presença de obstáculos.

Por Que Reduzir a Dimensionalidade?

A principal razão é diminuir a complexidade do processamento. Quanto mais dados você tiver, maior será a carga computacional para analisar e armazenar essas informações - e isso pode até atrapalhar o sistema.

Por exemplo, em um banco de dados sobre clientes:

  • A data de nascimento talvez nem seja necessária.
  • O sexo também pode ser simplificado (feminino/masculino).
    Mas cuidado: não podemos eliminar tudo! Temos que garantir que as informações essenciais para a tarefa não sejam descartadas.

Exemplos Práticos

1. Veículos Autônomos

Um carro autônomo pode estar processando imagens de alta resolução em tempo real, mas nem sempre precisa analisar todos os detalhes com exatidão. Por exemplo:

  • Calçadas próximas à rua podem ser ignoradas.
  • Detalhes como a marca de um carro ou o número da placa não são tão importantes quanto sua posição e movimento.

Mas quando se trata de placas de trânsito, semáforos ou outros objetos que exigem precisão — então é necessário manter uma resolução maior. O desafio está em identificar quais dados são realmente relevantes para cada caso.

2. Robótica e Reconhecimento

Na robótica, podemos pensar no exemplo de um jogo de futebol com robôs. Os robôs precisam detectar a bola, mas não importa o modelo ou a cor exata — apenas sua localização.

  • A imagem pode ser convertida para tons de cinza (redução de dimensionalidade).
  • Mesmo em preto e branco, é possível identificar os objetos importantes.

Já no caso da representação facial, como a famosa "Lena", que foi usada historicamente nos primeiros experimentos com computadores:

# Exemplo simplificado usando biblioteca de processamento de imagem
import cv2  # Biblioteca OpenCV

imagem = cv2.imread("lena.jpg")
cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)  # Converte para tons de cinza (redução de dimensionalidade)

# Visualização da imagem original e convertida
cv2.imshow("Original", imagem)
cv2.imshow("Tons de Cinza", cinza)

Algoritmos Usados

Um dos exemplos mais comuns é o Binarizador, que reduz a imagem para apenas dois valores — preto ou branco.

# Exemplo de binarização usando OpenCV (biblioteca de visão computacional)
import cv2  # Biblioteca OpenCV

imagem = cv2.imread("foto.jpg")
binaria = cv2.threshold(imagem, 160, 255, cv2.THRESH_BINARY)[1]  # Aplica um limiar para binarizar a imagem

Nesse caso:

  • Valores abaixo do limiar (ex: 160) são convertidos em preto.
  • Valores acima são convertidos em branco.

Isso permite que o sistema se concentre apenas nas bordas e objetos definidos, ignorando detalhes menores.

Aplicações no Dia-a-dia

Você já deve ter notado isso: quando compartilhamos fotos no WhatsApp ou outras redes sociais, elas são enviadas com menor qualidade. Mas ainda assim conseguimos entender o que está acontecendo na imagem! Isso é possível graças à redução de dimensionalidade.

Outro exemplo:

  • Veículos teleguiados (como os usados em Marte) transmitem imagens simplificadas para a Terra.
  • A redução ajuda no armazenamento e processamento mais rápido dos dados, sem perder a essência da informação transmitida.

Atividade Prática: Redução de Dimensionalidade em Imagens

Objetivo da Atividade

Nesta atividade, é implementada uma função Python que reduza as dimensões das imagens. Isso inclui converter imagens coloridas para tons de cinza e realizar a binarização (conversão para preto e branco).


Parte 1: Conversão para Tons de Cinza

Descrição

Converter uma imagem colorida em uma imagem com tons de cinza. Cada pixel da imagem colorida terá três valores de cor (vermelho, verde, azul). Para obter o valor do cinza, podemos usar a média ponderada desses valores.

Passos

  1. Requisitos

    • A função deve receber uma imagem em formato RGB.
    • Deve retornar uma nova imagem com tons de cinza.
  2. Lógica da Conversão
    O valor do pixel em tons de cinza pode ser calculado pela fórmula:

cinza = 0.299 * R + 0.587 * G + 0.114 * B

Substituir cada componente RGB (R, G, B) do pixel pelo valor de cinza.

  1. Implementação

    • Ler a imagem e obtenha os valores RGB para cada pixel.
    • Para cada pixel, calcule o valor de cinza usando a fórmula acima.
    • Criar uma nova imagem onde cada pixel tenha apenas um valor (cinza).
  2. Exemplo
    Supor um pixel com valores RGB: (70, 120, 50).

cinza = 0.299 * 70 + 0.587 * 120 + 0.114 * 50
      ≈ (20.93) + (70.44) + (5.7)
      ≈ 97

O pixel resultante será (97, 97, 97).


Parte 2: Binarização

Descrição da binarização

Converta uma imagem de tons de cinza em uma imagem preto e branco (binária). Defina um limiar para converter os pixels abaixo desse valor em preto e os demais em branco.

Passos da binarização

  1. Requisitos

    • A função deve receber uma imagem em tons de cinza.
    • Deve retornar uma imagem binária com apenas dois valores: 0 (preto) ou 255 (branco).
  2. Lógica da Binarização Escolha um valor de limiar (threshold). Por exemplo, se o limiar for 128:

    • Valores de cinza abaixo de 128: preto (0)
    • Valores de cinza acima ou igual a 128: branco (255)
  3. Implementação

    • Leia a imagem em tons de cinza.
    • Para cada pixel, compare o valor com o limiar definido.
    • Se o valor for menor que o limiar, converta para 0 (preto).
    • Caso contrário, converta para 255 (branco).

Exemplo

Supor uma imagem em tons de cinza com um pixel de valor 97 e outro de 150.

Limiar = 128
Pixel 97: abaixo do limiar → preto (0)
Pixel 150: acima do limiar → branco (255)

Dicas

  • Usar a biblioteca Pillow para manipular imagens, mas se preferir uma abordagem mais básica, pode usar listas e estruturas de dados.
  • A função deve manter as dimensões originais da imagem.

Funcionalidades

  • Faz o download de uma imagem a partir de uma URL.
  • Converte a imagem original para tons de cinza.
  • Realiza a binarização da imagem (preto e branco) com base na média dos valores de pixel.
  • Exibe as três versões da imagem (original, escala de cinza, binarizada) lado a lado.

Tecnologias Utilizadas

  • Python 3.10+
  • Bibliotecas:
    • Pillow para manipulação de imagens.
    • numpy para processamento de arrays de pixels.
    • matplotlib para exibição das imagens.
    • requests para realizar o download da imagem.

Como Usar

  1. Clone este repositório:

    git clone https://github.com/jocile/reducao-de-dimensionalidade.git
    cd reducao-de-dimensionalidade
  2. Instale as dependências:

pip install -r requirements.txt
  1. Execute o programa:
python binarizacao_de_imagem.py
  1. Siga as instruções no terminal:
  • Insira a URL de uma imagem para processar.
  • Escolha se deseja processar outra imagem ou encerrar o programa.

Exemplo de Entrada e Saída Entrada URL da imagem: https://example.com/imagem.jpg

Saída: O programa exibirá as três versões da imagem:

  1. Original (colorida).
  2. Escala de cinza.
  3. Preto e branco.

Conclusão

Nesta atividade, foram implementadas funções que realizam a redução de dimensionalidade em imagens. Isso é uma base sólida para entender conceitos mais avançados como processamento de imagem e aprendizado de máquina.

About

Desafio de Projeto: Redução de Dimensionalidade em Imagens para Redes Neurais da DIO.me

Topics

Resources

Stars

Watchers

Forks

Languages