fbpx
Sigmoidal
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
  • English
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
Sigmoidal
Sem Resultado
Ver Todos Resultados

Como usar OpenCV e Python para calibrar câmeras

Carlos Melo por Carlos Melo
março 17, 2023
em Python, Teoria, Tutoriais, Visão Computacional
2
99
COMPARTILHAMENTOS
3.3k
VIEWS
Publicar no LinkedInCompartilhar no FacebookCompartilhar no Whatsapp

Os olhos da equipe de cirurgiões estão fixos nas telas, onde cada movimento do robô cirúrgico é ampliado e analisado minuciosamente. O bisturi desliza suavemente pela pele do paciente, cortando camadas e camadas de tecido. O som é agudo e penetrante, ecoando pelo ar estéril da sala de cirurgia. Os médicos observam a cena atentamente, as mãos suando frio enquanto o robô cirúrgico executa seus movimentos precisos.

A sala de cirurgia é um lugar assustador, Iluminado apenas pela luz azul dos monitores que refletem a imagem da câmera, onde a vida e a morte caminham de mãos dadas. Afinal, mesmo com a equipe mais bem preparada, há sempre a possibilidade de falha. Os equipamentos utilizados na cirurgia podem apresentar problemas técnicos e os algortimos usados normalmente são desconhecidos.

Nesse ambiente de extrema pressão, um erro pode ser fatal. E é por isso que a calibração da câmera é tão importante.

Mas você já havia parado para pensar como a falta de calibração pode ser crítica em situações onde a precisão é fundamental, como em uma cirurgia robótica ou em uma operação militar? Imagine uma cirurgia robótica onde um milímetro de erro pode representar a morte do paciente. Ou imagine disparar um míssil a milhares de quilômetros de distância em um alvo militar, enquanto do lado há uma escola infantil. A distorção de lente e a calibração imperfeita de uma câmera podem levar a erros fatais em situações como essas.

Na área da pesquisa em visão computacional, técnicas de camera calibration têm elevado valor teórico e prático. Neste post, você aprenderá os conceitos básicos de calibração de câmera e como usá-los com o OpenCV e Python.

Fundamentos da calibração de câmera

A distorção de lentes é um fenômeno comum na captura de imagens e ocorre quando uma lente não consegue reproduzir com precisão a perspectiva de uma cena na imagem capturada.

Esse problema pode gerar distorções de forma e perspectiva na imagem, o que pode ser especialmente problemático em aplicações envolvendo visão computacional e realidade aumentada. Dentre as várias distorções existentes, as duas principais são a distorção radial e distorção tangencial.

A distorção radial ocorre quando os raios de luz que passam através da borda da lente são desviados em diferentes ângulos do que aqueles que passam pelo centro da lente. Isso pode resultar em linhas curvadas ou distorcidas nas bordas da imagem.

Exemplo de distorção radial. Fonte: Analytics Vidhya

Já a distorção tangencial ocorre quando a lente não está perfeitamente alinhada com o sensor da câmera, o que pode resultar em linhas retas que parecem curvas ou inclinadas. É aquela sensação de que aquela moto do retrovisor parecia estar mais longe ou até mais próximos do que realmente estavam.

Exemplo de distorção tangencial. Fonte: Analytics Vidhya

Felizmente, a distorção de lentes pode ser corrigida por meio da calibração da câmera, que envolve a medição da distorção de lentes e a correção dos dados da imagem de acordo com essas medições. Esse processo é especialmente importante em aplicações que exigem alta precisão, como a visão computacional em carros autônomos e sistemas de monitoramento de segurança.

Por que acontece a distorção?

É importante destacar que a distorção de lentes não é um problema exclusivo de câmeras de baixa qualidade ou baratas. Mesmo lentes de alta qualidade podem sofrer de distorção se não forem calibradas adequadamente.

Para entender, veja esse exemplo simples de uma modelo de câmera conhecido como pinhole (modelo de câmera pontual). Quando uma câmera foca em um objeto, ela o enxerga de maneira similar aos nossos olhos, concentrando a luz refletida no mundo real. Por meio de um pequeno orifício, a câmera concentra a luz refletida do objeto 3D em um plano na parte de trás da câmera.

Modelo de câmera pontual (pinhole).

A matriz da câmera, que mapeia uma cena 3D em um plano de imagem 2D, é representada por uma matriz 3×4, também chamada de matriz de projeção. Essa matriz é composta pela multiplicação da matriz intrínseca pela matriz extrínseca. A matriz intrínseca, que representa os parâmetros internos da câmera, é dada por:

    \[ K=\begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \\ \end{bmatrix} \]

Onde f_x e f_y são as distâncias focais em pixels nas direções x e y, respectivamente. c_x e c_y são as coordenadas do ponto principal, ou centro óptico, da câmera na imagem em pixels. A última coluna da matriz é usada para calcular a projeção dos pontos 3D na imagem, mas não é necessária para a calibração da câmera.

A matriz extrínseca, que representa a posição e orientação da câmera no espaço 3D, é dada por:

    \[ \begin{bmatrix} u \\ v \\ w \\ \end{bmatrix} = K \cdot [R | t] \cdot \begin{bmatrix} X \\ Y \\ Z \\ 1 \\ \end{bmatrix} \]

onde u, v e w são as coordenadas homogêneas na imagem 2D. Para obter as coordenadas da imagem (x, y), basta dividir u e v por w:

    \[ x = \frac{u}{w},\ y = \frac{v}{w} \]

Portanto, a calibração da câmera é uma etapa crucial em qualquer aplicação de visão computacional, que pode ter um impacto significativo na precisão e confiabilidade dos resultados obtidos.

Ao reconhecer a importância da calibração de câmera, os desenvolvedores podem garantir que suas soluções baseadas em visão computacional sejam confiáveis e eficazes, independentemente do ambiente ou das condições de captura de imagem.

Implementação da calibração de câmera com OpenCV e Python

Agora que compreendemos a importância da calibração de câmera e os fundamentos por trás disso, vamos abordar a implementação prática usando OpenCV e Python. O OpenCV é uma biblioteca de visão computacional amplamente utilizada e possui funções embutidas para realizar a calibração de câmera de maneira eficiente.

Preparação do ambiente

Primeiro, instale o OpenCV no seu ambiente Python, se você ainda não o fez. Você pode instalar o OpenCV usando o seguinte comando:

pip install opencv-python

Coleta de imagens

Antes de começarmos a implementar a calibração da câmera, é necessário coletar um conjunto de imagens de um padrão conhecido, como um tabuleiro de xadrez. As imagens devem ser tiradas em diferentes ângulos e posições para garantir uma calibração precisa. Neste exemplo, usaremos um conjunto de imagens de um tabuleiro de xadrez de 7×6.

Exemplos de imagens que serão usadas para calibrar a câmera.

Com o conjunto de imagens do tabuleiro de xadrez, podemos prosseguir para a detecção dos cantos do tabuleiro e a calibração da câmera. O código a seguir demonstra como fazer isso:

import cv2
import numpy as np
import glob

# Parâmetros do tabuleiro de xadrez
chessboard_size = (7, 6)  # Número de cantos internos no tabuleiro (largura x altura)

# Preparar pontos do objeto 3D
objp = np.zeros((np.prod(chessboard_size), 3), dtype=np.float32)
objp[:, :2] = np.indices(chessboard_size).T.reshape(-1, 2)

# Listas para armazenar pontos do objeto 3D e pontos da imagem 2D
object_points = []
image_points = []

list_of_image_files = glob.glob('./data/chessboard/*.jpg')

# Carregar e processar cada imagem
for image_file in list_of_image_files:
    image = cv2.imread(image_file)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Detectar cantos do tabuleiro de xadrez
    ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None)

    # Se os cantos forem encontrados, adicione os pontos do objeto e da imagem
    if ret:
        object_points.append(objp)
        image_points.append(corners)

        # Desenhar e exibir os cantos
        cv2.drawChessboardCorners(image, chessboard_size, corners, ret)
        cv2.imshow('img', image)
        cv2.waitKey(500)

cv2.destroyAllWindows()

# Calibrar a câmera
ret, K, dist, rvecs, tvecs = cv2.calibrateCamera(
    object_points, image_points, gray.shape[::-1], None, None
)

print("Matriz de calibração K:\n", K)
print("Distorção:", dist.ravel())

Neste código, primeiro definimos o tamanho do tabuleiro de xadrez e preparamos os pontos do objeto 3D. Em seguida, carregamos as imagens do tabuleiro de xadrez e convertemos cada imagem para escala de cinza. Detectamos os cantos do tabuleiro de xadrez usando a função cv2.findChessboardCorners e armazenamos os pontos do objeto e da imagem correspondentes nas listas object_points e image_points.

Se os cantos forem encontrados com sucesso, desenhamos os cantos na imagem usando a função cv2.drawChessboardCorners e exibimos a imagem por um curto período de tempo.

Detectar cantos do tabuleiro de xadrez

Depois de processar todas as imagens, procedemos à calibração da câmera utilizando a função cv2.calibrateCamera, que recebe os pontos do objeto 3D, os pontos da imagem 2D e o tamanho da imagem em escala de cinza como argumentos. A função retorna a matriz de calibração K, os coeficientes de distorção, as matrizes de rotação e translação para cada imagem.

Ao final, imprimimos a matriz de calibração K e os coeficientes de distorção.

Exemplos de imagens com e sem distorção.

Agora que temos a matriz de calibração K e os coeficientes de distorção, podemos corrigir a distorção nas imagens usando a função cv2.undistort. Veja um exemplo de como fazer isso:

# Carregar uma imagem de teste
test_image = cv2.imread('./data/test_image.jpg')

# Corrigir a distorção da imagem
undistorted_image = cv2.undistort(test_image, K, dist, None, K)

# Exibir a imagem original e a imagem corrigida lado a lado
combined_image = np.hstack((test_image, undistorted_image))
cv2.imshow('Original vs Undistorted', combined_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Conclusão

A calibração da câmera é um aspecto crucial da visão computacional, especialmente em aplicações que exigem alta precisão, como cirurgia robótica e sistemas de monitoramento de segurança. Este artigo explorou os fundamentos da distorção de lente e a importância da calibração da câmera, além de apresentar uma implementação prática usando Python e a biblioteca OpenCV.

Ao entender os conceitos básicos e aplicar técnicas de calibração de câmera em suas soluções de visão computacional, os desenvolvedores podem garantir resultados mais confiáveis e eficazes, independentemente das condições de captura de imagem.

Além disso, a visão computacional é uma área em constante crescimento, oferecendo inúmeras oportunidades para aqueles que desejam aprimorar suas habilidades e conhecimentos nesta disciplina. Com a demanda por especialistas em visão computacional em ascensão, há uma abundância de vagas no exterior para profissionais qualificados. Aproveitar essas oportunidades pode abrir portas para uma carreira gratificante e diversificada, além de permitir que você contribua para o avanço da tecnologia e aprimore suas habilidades em um campo em rápido desenvolvimento.

Então, não hesite em mergulhar no mundo da visão computacional e explorar suas possibilidades, pois o futuro da tecnologia depende de mentes brilhantes e inovadoras como a sua.

Compartilhar7Compartilhar40Enviar
Post Anterior

Desvendando o Problema da Mochila (Knapsack Problem)

Próximo Post

Fundamentos da Formação da Imagem

Carlos Melo

Carlos Melo

Engenheiro de Visão Computacional graduado em Ciências Aeronáuticas pela Academia da Força Aérea (AFA) e Mestre em Engenharia Aeroespacial pelo Instituto Tecnológico de Aeronáutica (ITA).

Relacionado Artigos

Review do Livro “Mãos à obra: Aprendizado de Máquina com Scikit-Learn, Keras & TensorFlow”
Livros

Review do Livro “Mãos à obra: Aprendizado de Máquina com Scikit-Learn, Keras & TensorFlow”

janeiro 18, 2025
Carlos Melo e Sérgio Sacani – Ciência Sem Fim
Youtube

Carlos Melo e Sérgio Sacani – Ciência Sem Fim

por Carlos Melo
janeiro 16, 2025
Visão Computacional

Processamento de Nuvens de Pontos com Open3D e Python

por Carlos Melo
janeiro 2, 2025
Meta Movie Gen para gerar vídeos a partir de textos
Youtube

Inteligência Artificial criando filmes? Conheça Movie Gen, a nova ferramenta da META.

por Carlos Melo
outubro 30, 2024
O que é Visão Computacional - Podcast Data Hackers
Carreira

O que é Visão Computacional — Data Hackers Episódio #92

por Carlos Melo
agosto 12, 2024
Próximo Post
Fundamentos da Formação da Imagem

Fundamentos da Formação da Imagem

Comentários 2

  1. Henrique Cardoso says:
    2 anos atrás

    Vejo que ao nosso redor há inúmeras possibilidades de aplicação e pouco incentivo a boa utilização das técnicas de visão computacional. É necessário a formação de pessoas que apliquem nos diversos setores da sociedade soluções como essas. Excelente conteúdo!

    Responder
    • Carlos Melo Carlos Melo says:
      2 anos atrás

      É o campo mais inovador de todos, com certeza.

      Muito obrigado pelo seu feedback!

      Responder

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Pós-Graduação em Data Science Pós-Graduação em Data Science Pós-Graduação em Data Science

Mais Populares

  • Introdução ao MediaPipe e Pose Estimation

    Introdução ao MediaPipe e Pose Estimation

    451 compartilhamentos
    Compartilhar 180 Tweet 113
  • Equalização de Histograma com OpenCV e Python

    112 compartilhamentos
    Compartilhar 45 Tweet 28
  • ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

    385 compartilhamentos
    Compartilhar 154 Tweet 96
  • Geometria da Formação de Imagens: Matrizes, Transformações e Sistemas de Coordenadas

    368 compartilhamentos
    Compartilhar 147 Tweet 92
  • Redes Neurais Convolucionais com Python

    92 compartilhamentos
    Compartilhar 37 Tweet 23
  • Em Alta
  • Comentários
  • Mais Recente
Como Tratar Dados Ausentes com Pandas

Como Tratar Dados Ausentes com Pandas

agosto 13, 2019
Como usar o DALL-E 2 para gerar imagens a partir de textos

Como usar o DALL-E 2 para gerar imagens a partir de textos

dezembro 25, 2022
Introdução ao MediaPipe e Pose Estimation

Introdução ao MediaPipe e Pose Estimation

julho 15, 2023

ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

abril 10, 2023
Como Analisar Ações da Bolsa com Python

Como Analisar Ações da Bolsa com Python

15
Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

13
Como Aprender Data Science?

Como Aprender Data Science?

9
Qual o Cenário de Data Science no Brasil hoje?

Qual o Cenário de Data Science no Brasil hoje?

8
DeepSeek vazamento de dados de usuários

DeepSeek: Vazamento de dados expõe dados de usuários

fevereiro 1, 2025
DeepSeek R1 vs OpenAI o1 – Qual é o Melhor Modelo de IA

DeepSeek R1 vs OpenAI o1 – Qual é o Melhor Modelo de IA?

janeiro 25, 2025
Trump Anuncia Investimento de US$ 500 Bilhões em Infraestrutura de IA

Trump Anuncia Investimento de US$ 500 Bilhões em Infraestrutura de IA

janeiro 22, 2025
Trump revoga decreto de Biden sobre regulação de Inteligência Artificial

Trump revoga decreto de Biden sobre regulação de Inteligência Artificial

janeiro 21, 2025

Seguir

  • 🇺🇸 Green Card por Habilidade Extraordinária em Data Science e Machine Learning

Após nossa mudança para os EUA, muitas pessoas me perguntaram como consegui o Green Card tão rapidamente. Por isso, decidi compartilhar um pouco dessa jornada.

O EB-1A é um dos vistos mais seletivos para imigração, sendo conhecido como “The Einstein Visa”, já que o próprio Albert Einstein obteve sua residência permanente através desse processo em 1933.

Apesar do apelido ser um exagero moderno, é fato que esse é um dos vistos mais difíceis de conquistar. Seus critérios rigorosos permitem a obtenção do Green Card sem a necessidade de uma oferta de emprego.

Para isso, o aplicante precisa comprovar, por meio de evidências, que está entre os poucos profissionais de sua área que alcançaram e se mantêm no topo, demonstrando um histórico sólido de conquistas e reconhecimento.

O EB-1A valoriza não apenas um único feito, mas uma trajetória consistente de excelência e liderança, destacando o conjunto de realizações ao longo da carreira.

No meu caso específico, após escrever uma petição com mais de 1.300 páginas contendo todas as evidências necessárias, tive minha solicitação aprovada pelo USCIS, órgão responsável pela imigração nos Estados Unidos.

Fui reconhecido como um indivíduo com habilidade extraordinária em Data Science e Machine Learning, capaz de contribuir em áreas de importância nacional, trazendo benefícios substanciais para os EUA.

Para quem sempre me perguntou sobre o processo de imigração e como funciona o EB-1A, espero que esse resumo ajude a esclarecer um pouco mais. Se tiver dúvidas, estou à disposição para compartilhar mais sobre essa experiência! #machinelearning #datascience
  • 🚀Domine a tecnologia que está revolucionando o mundo.

A Pós-Graduação em Visão Computacional & Deep Learning prepara você para atuar nos campos mais avançados da Inteligência Artificial - de carros autônomos a robôs industriais e drones.

🧠 CARGA HORÁRIA: 400h
💻 MODALIDADE: EAD
📅 INÍCIO DAS AULAS: 29 de maio

Garanta sua vaga agora e impulsione sua carreira com uma formação prática, focada no mercado de trabalho.

Matricule-se já!

#deeplearning #machinelearning #visãocomputacional
  • Green Card aprovado! 🥳 Despedida do Brasil e rumo à nova vida nos 🇺🇸 com a família!
  • Haverá sinais… aprovado na petição do visto EB1A, visto reservado para pessoas com habilidades extraordinárias!

Texas, we are coming! 🤠
  • O que EU TENHO EM COMUM COM O TOM CRUISE??

Clama, não tem nenhuma “semana” aberta. Mas como@é quinta-feira (dia de TBT), olha o que eu resgatei!

Diretamente do TÚNEL DO TEMPO: Carlos Melo &Tom Cruise!
  • Bate e Volta DA ITÁLIA PARA A SUÍÇA 🇨🇭🇮🇹

Aproveitei o dia de folga após o Congresso Internacional de Astronáutica (IAC 2024) e fiz uma viagem “bate e volta” para a belíssima cidade de Lugano, Suíça.

Assista ao vlog e escreve nos comentários se essa não é a cidade mais linda que você já viu!

🔗 LINK NOS STORIES
  • Um paraíso de águas transparentes, e que fica no sul da Suíça!🇨🇭 

Conheça o Lago de Lugano, cercado pelos Alpes Suíços. 

#suiça #lugano #switzerland #datascience
  • Sim, você PRECISA de uma PÓS-GRADUAÇÃO em DATA SCIENCE.
  • 🇨🇭Deixei minha bagagem em um locker no aeroporto de Milão, e vim aproveitar esta última semana nos Alpes suíços!
  • Assista à cobertura completa no YT! Link nos stories 🚀
  • Traje espacial feito pela @axiom.space em parceria com a @prada 

Esse traje será usados pelos astronautas na lua.
para acompanhar as novidades do maior evento sobre espaço do mundo, veja os Stories!

#space #nasa #astronaut #rocket
  • INTERNATIONAL ASTRONAUTICAL CONGRESS - 🇮🇹IAC 2024🇮🇹

Veja a cobertura completa do evento nos DESTAQUES do meu perfil.

Esse é o maior evento de ESPAÇO do mundo! Eu e a @bnp.space estamos representando o Brasil nele 🇧🇷

#iac #space #nasa #spacex
  • 🚀 @bnp.space is building the Next Generation of Sustainable Rocket Fuel.

Join us in transforming the Aerospace Sector with technological and sustainable innovations.
  • 🚀👨‍🚀 Machine Learning para Aplicações Espaciais

Participei do maior congresso de Astronáutica do mundo, e trouxe as novidades e oportunidade da área de dados e Machine Learning para você!

#iac #nasa #spacex
  • 🚀👨‍🚀ACOMPANHE NOS STORIES

Congresso Internacional de Astronáutica (IAC 2024), Milão 🇮🇹
  • Projeto Aeroespacial do final de semana!👨‍🚀
Instagram Youtube LinkedIn Twitter
Sigmoidal

O melhor conteúdo técnico de Data Science, com projetos práticos e exemplos do mundo real.

Seguir no Instagram

Categorias

  • Aeroespacial
  • Artigos
  • Blog
  • Carreira
  • Cursos
  • Data Science
  • Deep Learning
  • Destaques
  • Entrevistas
  • IA Generativa
  • Livros
  • Machine Learning
  • Notícias
  • Python
  • Teoria
  • Tutoriais
  • Visão Computacional
  • Youtube

Navegar por Tags

camera calibration carreira chatgpt cientista de dados cnn computer vision Cursos dados desbalanceados data science data science na prática decision tree deep learning gpt-3 histograma IA generativa image formation inteligência artificial jupyter kaggle keras machine learning matplotlib mnist nft openai opencv overfitting pandas profissão python redes neurais redes neurais convolucionais regressão linear regressão logística salário scikit-learn seaborn sklearn tensorflow titanic tutorial visão computacional vídeo youtube árvore de decisão

© 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist

Sem Resultado
Ver Todos Resultados
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
  • English

© 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.