Homography
L’omografia è una trasformazione proiettiva che mappa piani tra diverse viste, consentendo la correzione prospettica, la registrazione delle immagini e la creazione di panorami.
Un’omografia è una trasformazione proiettiva invertibile che mappa punti su un piano in punti su un altro, preservando le linee rette. Nella visione artificiale, descrive l’aspetto di una superficie piana da diversi punti di vista: una pagina rettangolare fotografata da un’angolazione può essere trasformata in un rettangolo visto frontalmente. Le omografie supportano la registrazione delle immagini, la correzione prospettica e la creazione di panorami. «Trasformazione proiettiva» è un sinonimo; il termine linguistico «omografo» si riferisce a parole con la stessa grafia.
Come funziona la matrice di omografia#
Un’omografia è rappresentata da una matrice 3 x 3, solitamente chiamata H. Opera su coordinate omogenee, che rappresentano un punto bidimensionale usando tre valori. Dopo la moltiplicazione matriciale, dividendo i primi due valori risultanti per il terzo si ottengono le normali coordinate dell’immagine.
Sebbene H contenga nove elementi, ha otto parametri indipendenti, o gradi di libertà: moltiplicare ogni elemento per lo stesso numero diverso da zero lascia invariata la mappatura. Questa geometria delle mappature planari delle immagini spiega perché quattro corrispondenze di punti adeguate determinano un’omografia.
Una trasformazione affine è un’omografia vincolata che preserva le rette parallele. Un’omografia generale rappresenta anche gli effetti prospettici, inclusi i bordi paralleli che convergono verso un punto di fuga. Le distanze e gli angoli in genere cambiano. Michel Chasles sviluppò il concetto nel suo mémoire del 1837 sulla dualità e l’omografia.
Come stimare un’omografia#
La stima inizia con punti corrispondenti: posizioni che rappresentano le stesse caratteristiche fisiche in due immagini. Possono essere angoli selezionati manualmente o punti chiave abbinati, ottenuti tramite l’estrazione delle caratteristiche. Metodi come la trasformata delle caratteristiche invarianti alla scala forniscono descrittori, ovvero riepiloghi numerici dell’aspetto locale, per abbinare le caratteristiche tra diverse viste.
Sono necessarie almeno quattro coppie di punti, senza che tre punti siano collineari in uno dei due insiemi. L’algoritmo della trasformata lineare diretta (DLT) converte le relazioni tra le loro coordinate in un sistema lineare. Ulteriori corrispondenze migliorano la stima quando le misurazioni contengono rumore.
Le corrispondenze errate richiedono un adattamento robusto. Il consenso di campioni casuali (RANSAC) adatta ripetutamente trasformazioni candidate a piccoli sottoinsiemi e individua gli inlier: corrispondenze coerenti con una trasformazione candidata. L’errore di riproiezione misura la distanza tra un punto sorgente trasformato e la sua destinazione osservata. L’API di stima dell’omografia di OpenCV espone questo processo tramite cv2.findHomography e restituisce sia H sia una maschera degli inlier.
Applicare un’omografia in Python#
OpenCV fornisce operazioni distinte per stimare una matrice e deformare un’immagine. Installa le dipendenze con pip install opencv-python numpy. Questo esempio mappa il contorno rettangolare dell’immagine di esempio in un trapezio:
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]
# Mantieni lo stesso ordine orario degli angoli in entrambi gli array.
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)L’immagine salvata mostra un accorciamento prospettico: il bordo superiore è più stretto, mentre i bordi rettilinei della scena rimangono diritti.
Dove si usa l’omografia#
- Elaborazione dei documenti: la rettificazione prospettica mappa i quattro angoli di un documento piano in un rettangolo. Questo passaggio di preelaborazione regolarizza la disposizione del testo prima del riconoscimento ottico dei caratteri, seguendo la stessa geometria di deformazione planare mostrata negli esempi di correzione prospettica di OpenCV.
- Creazione di panorami: le fotografie sovrapposte vengono allineate prima della fusione. Il sistema Autostitch di Matthew Brown e David Lowe usa caratteristiche locali abbinate per automatizzare la creazione di panorami, anche individuando immagini sovrapposte all’interno di raccolte non ordinate.
In Ultralytics YOLO, l’aumento dati RandomPerspective applica deformazioni proiettive durante l’addestramento, trasformando insieme le immagini e i relativi riquadri di delimitazione, i contorni di segmentazione e i punti chiave. L’impostazione perspective controlla la componente prospettica di questo aumento dei dati.
Limiti geometrici e concetti correlati#
Una singola omografia mette in relazione esatta le viste ideali di una camera stenopeica di un piano, oppure le viste acquisite ruotando una camera attorno al proprio centro di proiezione. Quando la camera trasla e gli oggetti si trovano a profondità diverse, la parallasse produce spostamenti che dipendono dalla profondità. Allineare un piano di sfondo lascia quindi gli oggetti in primo piano spostati, creando bordi doppi o immagini fantasma nei panorami composti.
La calibrazione della camera corregge la distorsione dell’obiettivo, la cui geometria curva dell’immagine deve essere corretta prima dell’allineamento planare. Nelle scene tridimensionali generiche, la geometria epipolare vincola un punto corrispondente a una retta; un’omografia ne predice direttamente la posizione. Nella visione stereo, la posizione residua lungo la retta epipolare fornisce informazioni sulla disparità utilizzate per la stima della profondità.










