Impossibile capire come ottenere (x ', y') di originale (x, y) nell'immagine, per distorsione Barrel/Pincushion.Formule per barile/distorsione a cuscinetto
risposta
La sezione 2 di this paper spiega la trasformazione. Fondamentalmente:
Qui ho fatto un esempio in Mathematica:
semplice distorsione a cuscinetto barilotto \ in opencv C++
IplImage* barrel_pincusion_dist(IplImage* img, double Cx,double Cy,double kx,double ky)
{
IplImage* mapx = cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);
IplImage* mapy = cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);
int w= img->width;
int h= img->height;
float* pbuf = (float*)mapx->imageData;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
float u= Cx+(x-Cx)*(1+kx*((x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)));
*pbuf = u;
++pbuf;
}
}
pbuf = (float*)mapy->imageData;
for (int y = 0;y < h; y++)
{
for (int x = 0; x < w; x++)
{
*pbuf = Cy+(y-Cy)*(1+ky*((x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)));
++pbuf;
}
}
/*float* pbuf = (float*)mapx->imageData;
for (int y = 0; y < h; y++)
{
int ty= y-Cy;
for (int x = 0; x < w; x++)
{
int tx= x-Cx;
int rt= tx*tx+ty*ty;
*pbuf = (float)(tx*(1+kx*rt)+Cx);
++pbuf;
}
}
pbuf = (float*)mapy->imageData;
for (int y = 0;y < h; y++)
{
int ty= y-Cy;
for (int x = 0; x < w; x++)
{
int tx= x-Cx;
int rt= tx*tx+ty*ty;
*pbuf = (float)(ty*(1+ky*rt)+Cy);
++pbuf;
}
}*/
IplImage* temp = cvCloneImage(img);
cvRemap(temp, img, mapx, mapy);
cvReleaseImage(&temp);
cvReleaseImage(&mapx);
cvReleaseImage(&mapy);
return img;
}
forma più complicata http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html
Un'approssimazione del modello distorsione radiale polinomiale si può trovare in Fitzgibbon, 2001
è
dove ° e ru sono le distanze dal centro di distorsione. Questo è anche usato per filtrare la distorsione da una fotocamera grandangolare per scopi di visione del computer e di elaborazione delle immagini.
È possibile trovare una spiegazione più dettagliata del principio e il codice dello shader per implementare il filtraggio undistortion (e anche la trasformazione in avanti) qui: http://marcodiiga.github.io/radial-lens-undistortion-filtering
Sto anche postare le carte si dovrebbe dare un'occhiata a se vuoi conoscere i dettagli matematici per il metodo che ho postato
- Zhang Z. (1999). Calibrazione flessibile della telecamera visualizzando un piano dall'orientamento sconosciuto
- Andrew W. Fitzgibbon (2001). Simultanea stima lineare di vista multipla geometria e distorsione della lente
- 1. Categoria CLLocation per il rilevamento del cuscinetto con funzione Haversine
- 2. Android Maps V2 newLatLngBounds con cuscinetto
- 3. cambiamento sovrapposizione fotocamera con cuscinetto e l'elevazione
- 4. PHP Excel Calcola formule
- 5. Keg sola formule homebrew
- 6. Excel: modifica più formule contemporaneamente?
- 7. Esportazione dei dati da R a Excel: formule non ricalcolare
- 8. Installare più formule homebrew contemporaneamente
- 9. Excel come formule con pandi
- 10. Excel: formule di conservazione ClearContent
- 11. Espressioni lambda Haskell e formule a logica semplice
- 12. Risolutore Prolog solutore di forza Brute-force per formule booleane
- 13. Trova e sostituisci excel semplice per le formule
- 14. Visualize ANCOVA formule inclusa (per esempio libreria HH)
- 15. C'è un modo per includere formule matematiche in Scaladoc?
- 16. C# Excel RTD Server Istanze multiple disconnettere tutte le formule su un foglio ferma formule sull'altro
- 17. semplificare le formule nel software maxima
- 18. Formule matematiche su textview in android
- 19. Formule R e nomi dei coefficienti risultanti
- 20. formule di risolutore interno in z3
- 21. Formule in funzioni definite dall'utente in R
- 22. C# - Valuta le formule logiche di Excel
- 23. Come utilizzare le formule di matrice di Excel per un UDF per leggere correttamente ogni cella?
- 24. Come memorizzare formule, anziché valori, in panda DataFrame
- 25. Come si aggiungono le formule a Google Spreadsheet utilizzando Google Apps Script?
- 26. Utilizzo di colonne con caratteri speciali nelle formule in R
- 27. POI/Excel: applicazione di formule in modo "relativo"
- 28. Calcolo numero di Fibonacci ennesima utilizzando le formule in python
- 29. Excel: rimozione delle formule ma mantenimento delle risposte come testo
- 30. Contare solo i campi con testo/dati, non le formule
Quando ricrea questo codice in openGL senza tagliare (come si deve nel 1 ° 2 foto) l'immagine sembrava sconnesso. Ho avuto più successo usando questo algoritmo http://www.geeks3d.com/20140213/glsl-shader-library-fish-eye-and-dome-and-barrel-distortion-post-processing-filters/2/ – user819640
Your transform è valido solo per trasformare un'immagine rettilinea in un'immagine distorta, per invertire quella distorsione serve la funzione inversa che è 'p1 = cbrt (2/(3 * a)); \t p2 = cbrt (sqrt (3 * a) * sqrt (27 * a * x * x + 4) - 9 * a * x); \t p3 = cbrt (2) * pow (3 * a, 2/3); \t ritorno p1/p2 - p2/p3; ' –