##Borrar esta linea y dejar la siguiente que permite que ésta página sea pública #acl BecariosGrupo:delete,read,write,admin All:read #format inline_latex <> = Calibración Multi-Cámara (How to) = /!\ Para descargar el proyecto : [[attachment:calibracion.tar.gz]] /!\ Para mas información sobre el proyecto: [[LabElectronica/MultiCameraCalibration|Calibración de múltiples cámaras]]. == Requisitos == Para realizar una Calibración de múltiples cámaras, se requiere: un Data Set (Set de imágenes), donde el Fiducial (Patron), sea visto al menos por un par de cámaras, osea que el Fiducial a detectar esté en un área de visión solapada, y la matriz de calbración de la cámara mas coeficientes de distorsión de la lente obtenidos mediante una calibración intrínseca. === Data Set === Para realizar el Data Set se propone la utilización del script {{{Captura_multiCamera.py}}} incluído en el directorio '''CreacionDataSet''' del archivo adjunto [[attachment:calibracion.tar.gz]]. {{{Captura_multiCamera.py}}} crea en el directorio donde fue ejecutado, un directorio '''Capturas_[día]_[mes]_[año]-[índice]'''(''índice:por defecto comienza en 0, de encontrarse continúa la numeración''), que contiene directorios '''cam[índice]'''(''ïndice: identifica la cámara a la que pertenece el directorio''), estós últimos directorios contienen imágenes '''''img[índiceImg]_[índiceCam]''''' referente a las cámaras. El código del script posee un encabezado de comentario ''IP & INICIALIZACION'', dentro de este una variable tipo lista '''IPoDISP''' contiene las direcciónes IP (''Formato: http://...'') o DISPOSITIVOS (''/dev/video[índice]'') a utilizar. El usuario debe editar e ingresar el/los IP o DISPOSITIVOS que posea. Se considera una realización de 20 tomas mínimas. '''Utilización:''' {{{ $ python Captura_multiCamera.py }}} '''Modulos:''' ''CAM.py'', incluído en '''CreacionDataSet'''. ''Aclaración: La captura de imágenes para formar un data set puede realizarse con los medios que el usuario disponga, manteniendo como consideración los nombres de los directorios '''cam[índice]''' y archivos tipo imagen '''''img[índiceImg]_[índiceCam]''''', para el funcionamiento de el script de Calibración de múltiples cámaras.'' === Calibraciíón Intrínseca === Para la obtención de la matriz de calibración y los coeficientes de distorsión se implementó el script {{{Calibración_Fid_Chessboard.py}}} incluído en el directorio '''CreacionDataSet''' del archivo adjunto [[attachment:calibracion.tar.gz]]. El script utiliza un conjunto de imágenes donde en su composición se observe un Fiducial (Patron) del tipo Chessboard [[attachment:Chessboard.png]], devolviendo al directorio de imagenes tres archivos con formato ''NumpyArray'' correspondientes a la matriz de calibración ('''mat_calib.npy'''), a los coeficientes de distorsión ('''coef_dist.npy''') y como referencia al error total de la calibración ('''Error_total.npy''') '''Utilización:''' {{{ $ python Calibracion_Fid_Chessboard.py -f -a -b -t }}} ||<:>'''Parámetros'''||<:>'''Descripción'''|| ||<:>-f||<:>Directorio donde se encuentran las ímagenes|| ||<:>-a||<:>N° de esquinas interiores verticales|| ||<:>-b||<:>N° de esquinas interiores horizontales|| ||<:>-t||<:>Formato de las imágenes sin considerar el punto(.) jpg,png,pnm|| ''Aclaración: la obtención de imágenes puede realizarse con {{{Captura_multiCamera.py}}}, donde el Fiducial se observe en diferentes posiciones y distancias. Como referencia se consideran 20 tomas mínimas por cámara a calibrar.'' == Calibración Extrínseca == Una vez obtenido el data set de imágenes se puede realizar la calibración extrínseca del conjunto de cámaras. Para ello, se implementó el script {{{calc_multi_ext.py}}} también presente en [[attachment:calibracion.tar.gz]] en el directorio CalibraciónExtrínseca. Para que el script {{{calc_multi_ext.py}}} funcione, se necesita un data set de imágenes generado por {{{Captura_multiCamera.py}}} ó al menos siguiendo el formato que se indicó anteriormente. Además, en los directorios '''cam[índice]''' debe incluirse las matrices de calibración intrínseca de cada cámara mediante los archivos '''mat_calib.npy''' y '''coef_dist.npy'''. === Módulos === Es necesario instalar los siguientes módulos: * Numpy * OpenCV * Matplotlib Los demás módulos importados vienen con el proyecto en [[attachment:calibracion.tar.gz]]. === Utilización === Para calcular las matrices de calibración extrínseca debe ejecutarse la siguiente línea: {{{ $ python calc_multi_ext.py -f [CHESS|CIRCLE|L1|L2] -W -H -S -p -v }}} ||<:>'''Parámetros'''||<:>'''Descripción'''|| ||-f||<(> Indica el tipo de fiducial presente en los data sets. Los valores permitidos son:|| ||'''CHESS''': en caso de utilizar un Chessboard.|| ||'''CIRCLE''': en caso de utilizar un patrón de círculos.|| ||'''L1''': en caso de usar un patrón L tamaño A3. || ||'''L2''': en caso de usar un patrón L tamaño A2.|| ||<:>-W|| N° de esquinas interiores horizontales en caso de usar un Chessboard ó la cantidad horizontal de círculos al usar patrón de círculos.|| ||<:>-H|| N° de esquinas interiores verticales en caso de usar un Chessboard ó la cantidad vertical de círculos al usar patrón de círculos.|| ||<:>-S|| Tamaño de los cuadrados del Chessboard ó la distancia vertical entre centros de círculo.|| ||<:>-p|| Path al directorio del data set.|| ||<:>-v|| Permite ver los resultados de la calibración extrínseca cámara-patrón.|| === Aclaraciones === * {{{calc_multi_ext.py}}} se adapta a data sets formados por cualquier cantidad de cámaras con cualquier cantidad de capturas. El requisito es que el fiducial pueda ser reconocido al menos en un par de imágenes. * El script soporta los siguientes tipos de figucial: 1. '''Chessboard''' [CHESS] [[attachment:Chessboard.png]] 2. '''Patrón de círculos''' [CIRCLE] [[attachment:Circle.png]] 3. '''Patrón L''' [L1|L2] [[attachment:Fid.png]] * La cámara 0 es utilizada como sistema de coordenadas global, es decir que los parámetros de las demás cámaras están referidos a ésta por defecto. En caso de necesitar referir las cámaras a un punto en particular, se deben incluir las líneas comentadas en el script, que inicializan la matriz '''Ho'''. La matriz '''Ho''' debe contener los parámetros extrínsecos de la cámara 0 respecto del punto de referencia global. * Las medidas de los cuadrados del chessboard o la distancia entre centro en el patrón de círculos, debe ingresarse mediante el parámetro {{{-S}}} en la misma unidad que se utilizó durante la calibración intrínseca de las cámaras. == Ejemplos == A continuación veremos un ejemplo de cómo utilizar el script de calibración extrínseca multicámara. Se usará el data set '''capturas_fid''' presente en el directorio '''Ejemplos'''. Este data set muestra un ejemplo de 3 cámaras dispuestas como se observa en la siguiente figura.