Estoy tratando de hacer la calibración de la cámara Kinect y la cámara externa, con Emgu/OpenCV. Estoy atascado y realmente agradecería cualquier ayuda.Rectificación de cámaras no calibradas, a través de la matriz fundamental
He elegido hacer esto a través de la matriz fundamental, es decir, la geometría epipolar. Pero el resultado no es el esperado. Las imágenes de resultados son negras o no tienen ningún sentido. Los puntos Mapx y Mapy son generalmente todos iguales a infinito o infinito, o todos son iguales a 0.00 y rara vez tienen valores regulares.
Esta es la forma en que traté de hacer la rectificación:
1.) puntos de imagen Búsqueda obtienen dos conjuntos de puntos de imagen (uno por cada cámara) del conjunto de imágenes. He hecho esto con el tablero de ajedrez y la función FindChessboardCorners.
2.) Encuentra matriz fundamental
CvInvoke.cvFindFundamentalMat(points1Matrix, points2Matrix,
_fundamentalMatrix.Ptr, CV_FM.CV_FM_RANSAC,1.0, 0.99, IntPtr.Zero);
puedo pasar todos los puntos recogidos de todo el conjunto de imágenes, o simplemente a partir de dos imágenes que tratan de rectificar?
3.) matrices Búsqueda homográficos
CvInvoke.cvStereoRectifyUncalibrated(points11Matrix, points21Matrix,
_fundamentalMatrix.Ptr, Size, h1.Ptr, h2.Ptr, threshold);
4.) Get MapX y mapy
double scale = 0.02;
CvInvoke.cvInvert(_M1.Ptr, _iM.Ptr, SOLVE_METHOD.CV_LU);
CvInvoke.cvMul(_H1.Ptr, _M1.Ptr, _R1.Ptr,scale);
CvInvoke.cvMul(_iM.Ptr, _R1.Ptr, _R1.Ptr, scale);
CvInvoke.cvInvert(_M2.Ptr, _iM.Ptr, SOLVE_METHOD.CV_LU);
CvInvoke.cvMul(_H2.Ptr, _M2.Ptr, _R2.Ptr, scale);
CvInvoke.cvMul(_iM.Ptr, _R2.Ptr, _R2.Ptr, scale);
CvInvoke.cvInitUndistortRectifyMap(_M1.Ptr,_D1.Ptr, _R1.Ptr, _M1.Ptr,
mapxLeft.Ptr, mapyLeft.Ptr) ;
Tengo un problema aquí ... ya no estoy usando tarada imágenes, ¿cuál es la matriz de mi cámara y los coeficientes de distorsión? ¿Cómo puedo obtenerlo de las matrices fundamentales de matriz o de homografía?
5.) Reasignar
CvInvoke.cvRemap(src.Ptr, destRight.Ptr, mapxRight, mapyRight,
(int)INTER.CV_INTER_LINEAR, new MCvScalar(255));
Y esto no regresar buen resultado. Agradecería que alguien me dijera qué estoy haciendo mal.
Tengo un conjunto de 25 pares de imágenes y un tamaño de patrón de tablero de ajedrez de 9x6.