In che modo il ridimensionamento di un'immagine influisce sulla matrice intrinseca della fotocamera?


18

Ho una matrice di telecamere (conosco sia i parametri intrinseci che quelli estrinseci) nota per l'immagine di dimensioni HxW. (Uso questa matrice per alcuni calcoli di cui ho bisogno).

Voglio usare un'immagine più piccola, ad esempio: H2×W2 (metà dell'originale). Quali cambiamenti devo apportare alla matrice per mantenere la stessa relazione?

Ho, K come parametri intrinseci, ( rotazione , e traduzione)RT

Camera=K[RT]

K=(un'X0u00un'yv0001)

K è 3 * 3, ho pensato di moltiplicareax ,ay ,u0 ev0 per 0,5 (il fattore è stato ridimensionato l'immagine), ma non sono sicuro.

Risposte:


13

Nota: dipende dalle coordinate utilizzate nell'immagine ridimensionata. Suppongo che tu stia utilizzando un sistema a base zero (come C, a differenza Matlab) e 0 viene trasformato in 0. Inoltre, presumo che tu non abbia alcuna inclinazione tra le coordinate. Se hai una inclinazione, anche questa dovrebbe essere moltiplicata

Risposta breve : supponendo che si stia utilizzando un sistema di coordinate in cui u=u2,v=v2 , sì, dovresti moltiplicareax,ay,u0,v0per 0,5.

Risposta dettagliata La funzione che converte un punto P in coordinate mondiali in coordinate della telecamera (x,y,z,1)>(u,v,S) è:

(un'X0u00un'yv0001)(R11R12R13TXR21R22R23TyR31R32R33Tz0001)(Xyz1)

Dove (u,v,S)->(u/S,v/S,1) , poiché le coordinate sono omogenee.

In breve, questo può essere scritto come u=m1Pm3P,v=m2Pm3P
doveMè il prodotto delle due matrici di cui sopra, emioè la fila-esima della matriceM. (Il prodotto è prodotto scalare).

Si può pensare a ridimensionare l'immagine:

u'=u/2,v'=v/2

così

u'=(1/2)M1PM3Pv'=(1/2)M2PM3P

La conversione in forma matrice ci dà:

(0.50000.50001)(un'X0u00un'yv0001)(R11R12R13TXR21R22R23TyR31R32R33Tz0001)(Xyz1)

Che è uguale a

(0.5un'X00.5u000.5un'y0.5v0001)(R11R12R13TXR21R22R23TyR31R32R33Tz0001)(Xyz1)

Per ulteriori informazioni, consultare Forsyth , capitolo 3 - Calibrazione geometrica della videocamera.


Grazie mille per la spiegazione !!! Non sono così sicuro di cosa intendi per sistema a base zero, sto usando matlab, ho bisogno di altre regolazioni?
matlabit,

u'=(u-1)/2+1,v'=(v-1)/2+1

8

Andrey ha affermato che la sua soluzione presuppone che 0 sia trasformato in 0. Se si utilizzano le coordinate pixel, ciò probabilmente non è vero quando si ridimensiona l'immagine. L'unico presupposto che devi davvero fare è che la trasformazione delle tue immagini può essere rappresentata da una matrice 3x3 (come ha dimostrato Andrey). Per aggiornare la matrice della tua fotocamera, puoi semplicemente pre-moltiplicarla per la matrice che rappresenta la trasformazione dell'immagine.

[new_camera_matrix] = [image_transform]*[old_camera_matrix]

2n

X'=2n*(X+.5)-.5

y'=2n*(y+.5)-.5

questo può essere rappresentato dalla matrice

(2n02n-1-.502n2n-1-.5001)

quindi la tua matrice finale della fotocamera sarebbe

(2n02n-1-.502n2n-1-.5001)(un'X0u00un'yv0001)


Potresti per favore spiegare perché aggiungi .5 e poi sottrai .5? 0,5 si applica solo al ridimensionamento con un fattore2n? In caso contrario, come si calcola quel numero di sub-pixel?
Gurumonster,

1
Penso che il punto sia che il centro del pixel "0, 0" non sia realmente a "0, 0" (= angolo superiore sinistro del pixel) ma a "0,5, 0,5". Quindi devi tenere conto di quell'offset prima e dopo la trasformazione e il fattore è sempre 0,5, indipendentemente dal fattore di ridimensionamento.
Jan Rüegg,

Sì, è esattamente vero
Hammer
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.