[Reconstrucción 3D] [Aprendizaje profundo] [Conjunto de datos] Cree su propio conjunto de datos NeuS (formato DTU) basado en COLMAP

[Reconstrucción 3D] [Aprendizaje profundo] [Conjunto de datos] Cree su propio conjunto de datos NeuS (formato DTU) basado en COLMAP

Consejo: Recientemente comencé a realizar investigaciones sobre [reconstrucción 3D], registrar puntos de conocimiento relevantes y compartir métodos que se han resuelto para problemas encontrados en el aprendizaje.



Prefacio

El formato DTU es uno de los formatos de conjuntos de datos utilizados para el entrenamiento del modelo de red NeuS. Este artículo utiliza el software COLMAP para mostrar el proceso completo desde la producción del conjunto de datos en formato DTU hasta el inicio del entrenamiento del modelo. NeuS realiza un modelado implícito tridimensional de la escena ingresando imágenes bidimensionales y poses de la cámara desde diferentes perspectivas de la misma escena, y utiliza una nueva fórmula imparcial aproximada de primer orden, de modo que puede realizar operaciones actualizadas incluso sin supervisión de máscara. Reconstrucción superficial precisa.


Descargue e instale el software colmap

Descargue el software COLMAP [ Dirección de descarga ] Este artículo utiliza la versión CUDA en Windows:

después de descomprimirlo, haga doble clic para abrir COLMAP.bat y aparecerá la siguiente interfaz:

El software se instaló correctamente.


Descargar el código fuente de LLFF

# 可能需要科学上网从Github上直接git下载,博主下载到neus下
git clone https://github.com/Fyusion/LLFF.git
# 激活虚拟环境
conda activate XXX
# eg: activate neus
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-image
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple imageio

Recopile fotografías y use colmap para obtener la pose de la cámara.

Recopilar imágenes

Las imágenes necesarias para crear el conjunto de datos de este artículo se obtienen extrayendo fotogramas después de grabar vídeos con un teléfono móvil.

# 激活虚拟环境
conda activate XXX
# eg: activate neus
# 安装opencv
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

Cree un nuevo archivo Video_to_frame.py y ejecute el siguiente código para completar la extracción de fotogramas (personalice el intervalo de extracción de fotogramas).

import os
import cv2
def extract_images(video_path, output_folder):
    # 获取视频文件名
    video_name = os.path.splitext(os.path.basename(video_path))[0]
    # 新建文件夹
    output_path = os.path.join(output_folder, video_name)
    if not os.path.exists(output_path):
        os.makedirs(output_path)
    # 打开视频
    cap = cv2.VideoCapture(video_path)
    # 设置帧间隔
    frame_interval = int(2)
    # 逐帧提取并保存满足间隔要求的帧
    count = 0
    while cap.isOpened():
        ret, frame = cap.read()
        if ret:
            print(frame_interval)
            if count % frame_interval == 0:
                image_name = os.path.join(output_path, f"{
      
      video_name}_{
      
      count//frame_interval}.jpg")
                cv2.imwrite(image_name, frame)
            count += 1
        else:
            break
    cap.release()

if __name__ == '__main__':
    video_path = 'C:/Users/XXX/Desktop/test_video/test.mp4'  # 视频文件路径
    output_folder = 'C:/Users/XXX/Desktop/test_frame'  # 输出文件夹路径
    extract_images(video_path, output_folder)

Insertar descripción de la imagen aquí

cálculo de pose

Cree un proyecto: haga clic en Archivo -> Nuevo proyecto para crear un nuevo proyecto.
1. Haga clic en Nuevo, seleccione una carpeta (el blogger y las imágenes de prueba se colocan en el mismo directorio) y establezca el nombre del proyecto para crear un nuevo archivo de datos del proyecto.

2. Haga clic en Seleccionar, seleccione la carpeta donde se encuentra la imagen y haga clic en Guardar.

Se crea y configura un nuevo proyecto de ingeniería.

Extracción y coincidencia de características
1. Extracción de características de imagen, haga clic en Procesamiento -> Extracción de características, seleccione SIMPLE_PINHOLE para el modelo de cámara y use la configuración predeterminada para otras configuraciones. Después de hacer clic en Extraer, la extracción de características de imagen comenzará automáticamente.

Cierre la ventana una vez completada la extracción de funciones.

2. Para hacer coincidir las características de la imagen, haga clic en Procesamiento -> Coincidencia de características, use la configuración predeterminada y haga clic en Ejecutar directamente para realizar la coincidencia de características.

Cierre la ventana una vez completada la coincidencia de características.

Puede verificar el progreso de la extracción y coincidencia de características en la columna Registro a la derecha. Asegúrese de que no haya errores durante el proceso.

Reconstrucción dispersa
Haga clic en Reconstrucción -> Iniciar reconstrucción para reconstruir. Puede ver el proceso de reconstrucción en la ventana. Este proceso puede durar un tiempo.

Una vez completada la reconstrucción, obtendrá la siguiente imagen: puede juzgar aproximadamente si la reconstrucción fue exitosa a través de las Imágenes y Puntos en la esquina inferior derecha.

Nota: Las diferentes poses coincidentes y la cantidad de imágenes causarán errores en los pasos siguientes. El blogger explicará en detalle cómo resolver este problema a continuación, así que continúe siguiendo los pasos por ahora.

Guarde la pose y los puntos dispersos
. Haga clic en Archivo -> Exportar modelo para exportar el modelo. Cree una nueva carpeta /sparse/0/ en el directorio donde se encuentra la carpeta de la imagen. Seleccione la carpeta para importar el modelo al directorio.

Obtenga el siguiente archivo en el directorio /sparse/0/ y guarde la pose de la imagen correctamente.


Convertir al formato de datos LLFF

Ingrese al directorio LLFF, abra el archivo imgs2poses.py, agregue el siguiente contenido, default = 'que es la ruta absoluta del directorio donde se encuentra sparse' y cambie el parámetro 'scenedir' a '- -scenedir'.

El nombre de la carpeta donde se almacenan las fotos debe ser imágenes, de lo contrario se producirá un error, el blogger aquí es de prueba, por lo que es necesario cambiarlo a imágenes.
Ejecutando código imgs2poses.py

# 注意要在imgs2poses.py所在目录执行命令
python imgs2poses.py
# 或者附带imgs2poses.py的路径
python XXXX\imgs2poses.py
# eg: python LLFF\imgs2poses.py

Si no se agrega default=''.

# 在运行imgs2poses.py代码时,即使有默认值也必须传入路径(与scenedir参数有关)
python imgs2poses.py "XXXX/XXXX/"

Ocurre el siguiente problema:

este problema se debe a las diferentes poses coincidentes y la cantidad de imágenes mencionadas anteriormente por el blogger. El blogger resuelve este problema aquí. Agregando el siguiente código alrededor de la línea 32 del archivo LLFF/llff/poses/pose_utils.py:

    #---------输出匹配到位姿的图片名---------
    for i in np.argsort(names):
       print(names[i],end=' ')
    #---------输出匹配到位姿的图片名---------

Agregue la ubicación del código como se muestra a continuación:

Se muestran todas las imágenes que coinciden con la pose.

Ingrese al directorio donde se guardan las imágenes, elimine las imágenes que no coincidan con la pose y luego realice el paso de "cálculo de pose" nuevamente.

Después de resolver el problema, el resultado de la ejecución es el que se muestra en la siguiente figura:

se genera el archivo npy relacionado con la pose de la imagen y se completa el paso de conversión de formato.


Convertir al formato de datos DTU

El blogger proporcionó el código para convertir el formato de datos LLFF al formato de datos DTU .
Descomprima el código en la carpeta correspondiente, aquí el blogger lo descomprimió en la ruta NeuS.

Ejecute la instrucción para convertir el formato de datos LLFF al formato de datos DTU.

# XXX表示sparse所在的路径,不包含sparse。
python tools/preprocess_llff.py XXXX
#eg: python tools/preprocess_llff.py C:\Users\AYU\Desktop\test_frame


Todos los preparativos han sido completados.


Resumir

Introducir el proceso de producción de conjuntos de datos en formato DTU de la manera más simple y detallada posible y resolver posibles problemas durante el proceso de producción.

Supongo que te gusta

Origin blog.csdn.net/yangyu0515/article/details/132300778
Recomendado
Clasificación