¿Qué necesito?

  • Cualquier servidor virtual o dedicado
  • Ubuntu
  • OpenCV
  • pitón

¿Qué son los mapas de profundidad?

Un mapa de profundidad es simplemente una imagen donde cada píxel contiene información de profundidad en lugar de RGB y generalmente se representa como una imagen en escala de grises. La información de profundidad significa la distancia de la superficie de los objetos de la escena desde un punto de vista. Un mapa de profundidad contiene información sobre la distancia entre la superficie de los objetos desde un punto de vista determinado. Cuando se fusiona con la imagen de origen, se crea una imagen en 3D. Parece que la imagen de origen original tiene profundidad, lo que le da un efecto casi lenticular. Esto es especialmente útil cuando puede utilizar imágenes estéreo sincronizadas. Las imágenes estéreo son dos imágenes con un ligero desplazamiento. Por ejemplo, tome una fotografía de un objeto desde el eje central. Mueva su cámara unos 6 cm hacia la derecha en el plano horizontal recto mientras mantiene la posición del objeto en su campo de visión central. Busque el mismo resultado en ambas imágenes y obtenga la profundidad de la diferencia de posición. Esto se conoce como coincidencia estéreo. Para obtener los mejores resultados al crear mapas de profundidad, sea lo más preciso posible y evite la distorsión.

Los mapas de profundidad tienen una variedad de usos. Como simular el efecto de medios semitransparentes uniformemente densos dentro de una escena, es decir, niebla, humo o cantidades de agua u otros líquidos. O simule profundidades de campo poco profundas donde partes de una escena parecen estar desenfocadas. Los mapas de profundidad se pueden utilizar para desenfocar selectivamente una imagen en diferentes niveles o grados. La poca profundidad de campo puede ser una característica de la fotografía macro y, como tal, la técnica puede formar parte del proceso de falsificación en miniatura. Incluye una técnica llamada Z-buffering y Z-culling que puede hacer que el renderizado de escenas 3D sea más eficiente. Se pueden usar para identificar objetos que no son visibles y, por lo tanto, se pueden ignorar para algunos fines de representación. Esto también es particularmente importante en aplicaciones en tiempo real, como los juegos de computadora, donde debe estar disponible una sucesión rápida de representaciones completas a tiempo para mostrarse a una velocidad regular o fija.

En este tutorial, aprenderá a utilizar dos o más imágenes para derivar datos de profundidad, que luego se pueden interpretar como una imagen de salida en escala de grises que demuestra la profundidad. La imagen de salida resultante se puede utilizar para derivar una nube de puntos 3D.

depthMapStereoImgs-stereoBM.py

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgL = cv2.imread('my_local_environment_l.jpg',cv2.IMREAD_GRAYSCALE)
imgR = cv2.imread('my_local_environment_r.jpg',cv2.IMREAD_GRAYSCALE)

stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()

depthMapStereoImgs-stereoSGBM.py

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgL = cv2.imread('my_local_environment_l.jpg',cv2.IMREAD_GRAYSCALE)
imgR = cv2.imread('my_local_environment_r.jpg',cv2.IMREAD_GRAYSCALE)

stereo = cv2.StereoSGBM_create(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()

Cambiar los valores numDisparities y blockSize puede producir resultados más refinados. Los resultados normales suelen estar contaminados con un alto nivel de ruido. Con práctica, tiempo y paciencia, puede lograr resultados que se pueden utilizar en etapas posteriores del posprocesamiento de imágenes.

FUENTE DE IMÁGENES

Cómo crear mapas de profundidad a partir de fotos 2D con OpenCV
Cómo crear mapas de profundidad a partir de fotos 2D con OpenCV

RESULTADOS DEL MAPA DE PROFUNDIDAD CRUDA

ESTÉREO-BM (cv2.StereoBM) ESTÉREO-SGBM (cv2.StereoSGBM)
Cómo crear mapas de profundidad a partir de fotos 2D con OpenCV Cómo crear mapas de profundidad a partir de fotos 2D con OpenCV

Conclusión

OpenCV tiene numerosas funciones de procesamiento de imágenes y se está convirtiendo rápidamente en una verdadera potencia para la visión por computadora. Cuando se trabaja con estereoscopía de imágenes, la reducción de ruido es extremadamente importante. Una serie de esquemas avanzados de reducción de ruido le permiten crear mapas de profundidad limpios que luego se pueden convertir fácilmente en nubes de puntos detalladas para la generación de modelos 3D. Cuanto más miras estas cosas, más emocionante se vuelve.

Descarga scripts e imágenes para imágenes de profundidad