En esta práctica se ha empezado de cero completamente ya que el año pasado no conseguí empezarla, por eso no hay publicaciones.
Para empezar la práctica, como me bajé el repositorio de JdeRobot(Academy) hace tiempo, que no tenía incorporado el 3D Viewer-web, y seguí las instrucciones del
github (nuevas) para lanzar la práctica tardé bastante en comprender que no tenía la misma versión del repositorio.
Una vez pude arrancar el entorno, me fijé en las imágenes que capturaba el robot Kobuki y me parecían muy similares. Para comprobarlo hice una resta de ambas imágenes en valor absoluto y sume todos los valores, aparte de visualizarlo como una imagen. Como me temía, ambas imágenes eran iguales y rebuscando en el interior del código para ver de donde venían las imágenes me topé con un bug en el archivo Academy > src > 3d_reconstruction > sensors > sensor.py en la línea 39:
basecameraR = ic.stringToProxy(proxyStrCL)
e intercambiándolo por esta, se solucionaba:
basecameraR = ic.stringToProxy(proxyStrCR)
Para simplificar el problema transformé las imágenes a escala de grises y elegí como imagen inicial la izquierda (imageLeft). Posteriormente calculé la imagen gradiente de esta, normalizada de 0 a 1, calculando primero las derivadas con el eje x (dx) y con el eje y (dy) con la función gradient() de la biblioteca numpy. Para después hacer la siguiente fórmula para juntar ambas, normalizándola con su valor máximo:
√(dx² + dy²)
Obteniendo así el gradiente de la imagen píxel a píxel:
Una vez hecho esto, habría que recorrer la imagen con una ventana determinada, encontrando la epipolar de ambas imágenes y determina que ventana de la imagen derecha es más parecida a la imagen izquierda(en la línea epipolar).
Para ello primero se ha fijado tamaño de ventana (windowSize en el código) de 30x30 píxeles.
Aunque como tuve problemas para recorrer la imagen a través del tamaño de su ventana, ya que OpenCV saca el tamaño de la imagen (image.shape) con un array de número de filas, de columnas y de colores y desde un inicio pensaba que saldría con un array de x(columnas), y(filas), número de colores. (Con las filas y las columnas intercambiadas)
Con tantos problemas, ya avanzaré la práctica en otro momento.