Come posso ottenere la calibrazione della fotocamera più accurata?


16

Prima di tutto, spero che questa sia la scheda Stack Exchange corretta. Mi scuso se non lo è.

Sto lavorando a qualcosa che mi richiede di calibrare la fotocamera. Ho implementato con successo il codice per farlo in OpenCV (C ++). Sto usando le funzioni integrate della scacchiera e una scacchiera che ho stampato.

Ci sono molti tutorial su Internet che affermano di dare più di una vista della scacchiera ed estrarre gli angoli da ogni frame.

Esiste un set ottimale di viste da dare alla funzione per ottenere la calibrazione della fotocamera più accurata? Cosa influenza l'accuratezza della calibrazione?

Ad esempio, se gli do 5 immagini della stessa vista senza spostare nulla, si ottengono alcuni risultati dritti quando provo a non distorcere il feed della webcam.

Cordiali saluti a tutti coloro che visitano: ho recentemente scoperto che è possibile ottenere una migliore calibrazione della fotocamera utilizzando una griglia di cerchi asimmetrici e la rispettiva funzione OpenCV.

Risposte:


8

Devi scattare le immagini per la calibrazione da diversi punti di vista e angoli, con la maggiore differenza possibile tra gli angoli (tutti e tre gli angoli di Eulero dovrebbero variare), ma in modo che il diametro del motivo si adattasse ancora al campo visivo della videocamera. Più visualizzazioni stai usando, migliore sarà la calibrazione. Ciò è necessario perché durante la calibrazione si rilevano i parametri di lunghezza focale e distorsione, quindi per ottenerli con il metodo meno quadrato sono necessari angoli diversi. Se non si sposta affatto la videocamera, non si ottengono nuove informazioni e la calibrazione è inutile. Tieni presente che di solito hai bisogno solo della lunghezza focale, i parametri di distorsione sono generalmente trascurabili anche per le fotocamere di consumo, le webcam e le fotocamere per telefoni cellulari. Se si conosce già la lunghezza focale dalle specifiche della fotocamera, potrebbe non essere necessaria la calibrazione.

Il coefficiente di distorsione è più presente nelle fotocamere "speciali" come grandangolari o 360 °.

Ecco la voce di Wikipedia sulla calibrazione . E qui c'è una distorsione non lineare , che è trascurabile per la maggior parte delle fotocamere.


Per angoli di Eulero, suppongo che intendi ruotare la telecamera attorno alla scacchiera (con la scacchiera come perno) in x, y e spostare la telecamera verso e lontano dalla scacchiera in z? Ho letto di qualcuno che ha semplicemente stampato le scacchiere trasformate e ha tenuto la macchina fotografica nello stesso posto. Ad esempio: i.imgur.com/rYzV4.png e i.imgur.com/McG9z.png . Usare cose come questa è una decisione sbagliata in quanto potrebbe non rappresentare come le cose distorcerebbero nella realtà?
Ghepardo,

Sì per spostare la telecamera. Sì, ancora una volta a rimanere sul posto.
mirror2image,

@ mirror2image Intendi, nelle operazioni pratiche, è meglio cambiare diverse angolazioni. Ciò significa che visioni diverse avranno sistemi di coordinamento mondiale diversi. Devo utilizzare un sistema di coordinamento mondiale condiviso per mantenere i punti oggetto nello stesso sistema di coordinamento?
Richard,

3

@Ben - il numero di visualizzazioni dipende dalla telecamera e dalla precisione finale richiesta.

Con obiettivi di altissima qualità e bassa distorsione (SLR 35 mm di fascia alta) che utilizzano molte immagini della scacchiera per mappare le distorsioni, può essere instabile, poiché le distorsioni sono frazioni di pixel.
Hai ancora bisogno di più scatti con la scheda (o la fotocamera) ruotata poiché il centro dell'immagine è normalmente solo entro un paio di pixel del valore nominale x / 2, y / 2 e cambierà con la messa a fuoco. E ovviamente lo zoom cambia tutto.

Una volta che hai il centro del chip dell'obiettivo e la lunghezza focale (in X e Y) hai bisogno di una sola scacchiera per scattare la posizione della fotocamera


Continuo a ottenere una calibrazione davvero scadente e sinceramente non riesco a capire perché. Ho una scacchiera stampata sul muro e sto spostando la fotocamera in posizioni diverse, quindi ha viste diverse sulla scacchiera, ma ogni volta che utilizzo la funzione di distorsione in opencv ed esce molto strano e distorto rispetto all'originale. La mia fotocamera è un Microsoft LifeCam Studio 1080p.
Ghepardo,

@Ben Disabilita qualsiasi autofocus. Su webcam con obiettivo minuscolo, la lunghezza focale e il centro dell'obiettivo cambiano con la messa a fuoco. Stai ruotando abbastanza da adattarlo al centro? I quadrati escono agli angoli? Infine controlla che tutti i bersagli abbiano tutti i quadrati rilevati.
Martin Beckett,

L'autofocus è già stato disabilitato. Definisci abbastanza? Sto provando gli angoli più estremi possibile per raccogliere i punti. Non sei sicuro di cosa intendi per "quadrati che escono agli angoli", se intendi la funzione che disegna gli angoli estratti sull'immagine, allora sì. Ho già anche il controllo per vedere che tutti gli angoli sono stati rilevati. Penso che il mio problema POTREBBE riguardare ciò su cui ho impostato la lunghezza focale iniziale nella matrice intrinseca che passo alla funzione di calibrazione. Ho provato 1: 1, 16: 9 (quello che credo siano le proporzioni della webcam) e ho anche provato NIENTE (cosa che puoi fare)
Ghepardo

@Martin È possibile eseguire la calibrazione mantenendo la fotocamera in posizione di cancelleria e modificando l'orientamento della scacchiera senza modificare la distanza tra la fotocamera e la scacchiera ??

@Santosh - sì, è ovviamente esattamente equivalente. Devi assicurarti di aver coperto molti angoli diversi
Martin Beckett

3

Ho deciso di pubblicare questa risposta qui perché qualche tempo fa, questo è emerso come il miglior risultato in Google e i suoi suggerimenti mi hanno aiutato. Quindi ho deciso di condividere anche la mia esperienza.

Dopo aver trascorso innumerevoli ore nel tentativo di ottenere la migliore calibrazione stereo su un Kinect, ho condiviso i miei suggerimenti e i risultati in un post sul blog qui .

Sebbene sia orientato alla calibrazione stereo e più specificamente a Kinect, credo che i suggerimenti aiuteranno chiunque stia cercando di calibrare una fotocamera.

Inoltre, nel caso dovessi morire un giorno o dimenticare di rinnovare il mio hosting, ecco una citazione modificata dal post:

  1. Assicurarsi di disporre del modello di calibrazione più ampio possibile. Segui quello che ho detto sopra. Ottieni un bel motivo stampato professionalmente. Assicurati che ogni quadrato sia almeno 8 cm x 8 cm. Inoltre, assicurarsi che un lato del modello di calibrazione abbia un numero dispari di quadrati e l'altro lato abbia un numero pari di quadrati (ad es. 9 × 6 o 7 × 8). È importante per rilevare correttamente la posa del bersaglio. Inoltre, alcuni toolbox non saranno in grado di rilevare lo schema in questo requisito non è soddisfatto. Come accennato in precedenza, i motivi che ho usato che sono adatti per la stampa su fogli di grandi dimensioni vengono caricati qui (per quadrati di 9 cm) e qui (per quadrati di 10 cm).
  2. Assicurati che il motivo stampato abbia abbastanza bordo bianco attorno, altrimenti potrebbe non essere facilmente rilevato dalla maggior parte delle caselle degli strumenti.
  3. Assicurarsi che Kinect non si sposti. Ho usato un innesto per montare il mio Kinect su un treppiede.
  4. Cerca di ottenere quante più immagini possibile del target di calibrazione. La mia migliore calibrazione è stata ottenuta utilizzando 300 immagini, a una distanza compresa tra 0,5 e 10 metri dalla fotocamera. Assicurati di ruotare il motivo attorno agli assi X, Y e Z. Prova anche a "affiancare" la vista con le immagini scattate alla stessa distanza: ovvero scatta un'immagine, sposta il bersaglio sulla tessera successiva nel campo visivo, prendine un'altra e ripeti finché non hai "affiancato" tutta la corrente campo visivo. L'obiettivo è quello di coprire il più possibile l'intero campo visivo ad ogni distanza.
  5. Utilizzare l'app di calibrazione stereo di MATLAB, se possibile. Ti permette di sbarazzarti degli outlier dopo ogni fase di calibrazione.

2

Ecco un elenco di "migliori pratiche" per la calibrazione della fotocamera che ho pubblicato inizialmente qui: https://calib.io/blogs/knowledge-base/calibration-best-practices

  • Scegli il target di calibrazione della taglia giusta. Abbastanza grande da vincolare correttamente i parametri. Preferibilmente dovrebbe coprire ca. metà dell'area totale quando viene vista parallela parallela nelle immagini della telecamera.
  • Eseguire la calibrazione alla distanza di lavoro approssimativa (WD) dell'applicazione finale. La fotocamera dovrebbe essere messa a fuoco a questa distanza e la messa a fuoco dovrebbe essere invariata dopo la calibrazione.
  • Il target dovrebbe avere un elevato numero di funzionalità. È preferibile utilizzare modelli fini. Tuttavia, a un certo punto la robustezza del rilevamento ne risente. La nostra raccomandazione è di usare conteggi di modelli fini per telecamere superiori a 3 MPx e se l'illuminazione è controllata e buona.
  • Raccogliere immagini da diverse aree e inclinazioni. Spostare il bersaglio per coprire completamente l'area dell'immagine e puntare a una copertura uniforme. La distorsione dell'obiettivo può essere determinata correttamente solo da immagini parallele parallele, ma la stima della lunghezza focale dipende dall'osservazione dello scorcio. Includi entrambe le immagini parallele e le immagini scattate con la tavola inclinata fino a +/- 45 gradi sia in orizzontale che in verticale. Inclinare di più di solito non è una buona idea poiché la precisione della localizzazione delle caratteristiche ne risente.
  • Usa una buona illuminazione. Questo è spesso trascurato, ma estremamente importante. Preferibilmente, l'obiettivo di calibrazione deve essere illuminato in modo diffuso mediante un'illuminazione fotografica controllata. Le sorgenti di punti di forza generano un'illuminazione irregolare, che potrebbe non riuscire a rilevare e non utilizzare molto bene la gamma dinamica della fotocamera. Le ombre possono fare lo stesso.
  • Hai abbastanza osservazioni. Di solito, la calibrazione deve essere eseguita su almeno 6 osservazioni (immagini) di un target di calibrazione. Se si utilizza una fotocamera di ordine superiore o un modello di distorsione, sono utili ulteriori osservazioni.
  • Prendi in considerazione l'utilizzo di destinazioni codificate in modo univoco come le schede CharuCo. Ciò consente di raccogliere osservazioni dagli stessi bordi del sensore e dell'obiettivo della fotocamera, vincolando quindi molto bene i parametri di distorsione. Inoltre, consentono di raccogliere dati anche quando i singoli punti funzione non soddisfano gli altri requisiti.
  • La calibrazione è accurata solo come target di calibrazione utilizzato. Utilizzare obiettivi stampati al laser solo per convalidare e testare.
  • Montaggio corretto del target di calibrazione e della telecamera. Al fine di ridurre al minimo la distorsione e l'arco in obiettivi più grandi, montarli verticalmente o distesi su un supporto rigido. In questi casi è consigliabile spostare la videocamera. Utilizzare un treppiede di qualità ed evitare di toccare la fotocamera durante le acquisizioni.
  • Rimuovi le cattive osservazioni. Ispezionare attentamente gli errori di riproiezione. Sia per visualizzazione che per funzionalità. Se uno di questi appare come anomalo, escluderlo e ricalibrare.

Uno strumento online per generare PDF per obiettivi di calibrazione è disponibile qui: https://calib.io/pages/camera-calibration-pattern-generator


Ciao, benvenuto in DSP SE. Le risposte autopromozione non sono generalmente benvenute qui. Ti preghiamo di prendere in considerazione una risposta di qualità superiore.
jojek
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.