Homography
A homografia é uma transformação projetiva que mapeia planos entre vistas, permitindo corrigir a perspectiva, registrar imagens e montar panoramas.
Uma homografia é uma transformação projetiva invertível que mapeia pontos de um plano para pontos de outro, preservando as linhas retas. Em visão computacional, ela descreve como uma superfície plana aparece de diferentes pontos de vista: uma página retangular fotografada de um ângulo pode ser transformada em um retângulo de frente. As homografias permitem fazer registro de imagens, corrigir a perspectiva e montar panoramas. "Transformação projetiva" é um sinônimo; o termo linguístico "homógrafo" se refere a palavras com grafia idêntica.
Como funciona a matriz de homografia#
Uma homografia é representada por uma matriz 3 x 3, geralmente chamada de H. Ela opera sobre coordenadas homogêneas, que representam um ponto bidimensional usando três valores. Após a multiplicação matricial, dividir os dois primeiros valores de saída pelo terceiro produz coordenadas de imagem comuns.
Embora H contenha nove elementos, ela tem oito parâmetros independentes, ou graus de liberdade: multiplicar todos os elementos pelo mesmo número diferente de zero não altera o mapeamento. Essa geometria dos mapeamentos de imagens planares explica por que quatro correspondências adequadas entre pontos determinam uma homografia.
Uma transformação afim é uma homografia restrita que preserva linhas paralelas. Uma homografia geral também representa efeitos de perspectiva, incluindo bordas paralelas que convergem para um ponto de fuga. Em geral, distâncias e ângulos mudam. Michel Chasles desenvolveu o conceito em seu memorial de 1837 sobre dualidade e homografia.
Como estimar uma homografia#
A estimativa começa com pontos correspondentes: locais que representam as mesmas características físicas em duas imagens. Eles podem ser cantos selecionados manualmente ou pontos-chave correspondidos, obtidos por meio da extração de características. Métodos como a Transformada de características invariante à escala fornecem descritores — resumos numéricos da aparência local — para corresponder características entre vistas.
O mínimo é de quatro pares de pontos, sem que quaisquer três pontos sejam colineares em cada conjunto. O algoritmo Transformação Linear Direta (DLT) converte as relações entre as coordenadas em um sistema linear. Correspondências adicionais melhoram a estimativa quando as medições contêm ruído.
Correspondências incorretas exigem um ajuste robusto. Consenso de Amostras Aleatórias (RANSAC) ajusta repetidamente transformações candidatas a pequenos subconjuntos e identifica os valores atípicos internos: correspondências consistentes com uma candidata. O erro de reprojeção mede a distância entre um ponto de origem transformado e seu destino observado. A API de estimativa de homografia do OpenCV disponibiliza esse processo por meio de cv2.findHomography, retornando H e uma máscara de valores atípicos internos.
Aplicar uma homografia em Python#
O OpenCV oferece operações separadas para estimar uma matriz e deformar uma imagem. Instale as dependências com pip install opencv-python numpy. Este exemplo mapeia o contorno retangular da imagem de amostra para um trapézio:
from urllib.request import urlopen
import cv2
import numpy as np
image_url = "https://ultralytics.com/images/bus.jpg"
with urlopen(image_url) as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
image = cv2.imdecode(encoded, cv2.IMREAD_COLOR)
height, width = image.shape[:2]
# Mantenha a mesma ordem dos cantos no sentido horário em ambos os arrays.
source = np.float32([[0, 0], [width - 1, 0], [width - 1, height - 1], [0, height - 1]])
target = np.float32([[120, 80], [width - 121, 80], [width - 1, height - 1], [0, height - 1]])
matrix, _ = cv2.findHomography(source, target)
warped = cv2.warpPerspective(image, matrix, (width, height))
cv2.imwrite("homography_result.jpg", warped)A imagem salva mostra o encurtamento em perspectiva: sua borda superior é mais estreita, enquanto as bordas retas da cena continuam retas.
Onde a homografia é usada#
- Processamento de documentos: A retificação da perspectiva mapeia os quatro cantos de um documento plano para um retângulo. Essa etapa de pré-processamento regulariza o layout do texto antes do reconhecimento óptico de caracteres, seguindo a mesma geometria de deformação planar demonstrada nos exemplos de correção de perspectiva do OpenCV.
- Montagem de panoramas: Fotografias sobrepostas são alinhadas antes da mesclagem. O sistema Autostitch de Matthew Brown e David Lowe usa características locais correspondidas para automatizar a construção de panoramas, incluindo a identificação de imagens sobrepostas em coleções sem ordenação.
No Ultralytics YOLO, a ampliação RandomPerspective aplica deformações projetivas durante o treinamento, transformando imagens e suas caixas delimitadoras, contornos de segmentação e pontos-chave associados em conjunto. A configuração perspective controla o componente de perspectiva dessa ampliação de dados.
Limites geométricos e conceitos relacionados#
Uma única homografia relaciona exatamente as vistas ideais de uma câmera pinhole de um plano, ou as vistas capturadas ao girar uma câmera em torno do seu centro de projeção. Com a translação da câmera e objetos a diferentes profundidades, a paralaxe produz deslocamentos dependentes da profundidade. O alinhamento de um plano de fundo deixa os objetos em primeiro plano deslocados, criando bordas duplicadas ou efeitos fantasma nas imagens panorâmicas montadas.
A calibração da câmera corrige a distorção da lente, cuja geometria de imagem curva precisa ser corrigida antes do alinhamento planar. Em cenas tridimensionais gerais, a geometria epipolar restringe um ponto correspondente a uma linha; uma homografia prevê diretamente sua localização. Na visão estéreo, a posição restante ao longo da linha epipolar fornece informações de disparidade usadas para a estimativa de profundidade.










