es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

TIFF – Problema de rendimiento de libtiff para conjuntos de datos largos (c/c++)

Intentando leer y escribir un gran archivo tiff estándar con las siguientes características, me he encontrado con una disminución en el rendimiento después de que se procesa cada fotograma:

  • 10000 fotogramas
  • Tamaño del fotograma 512×512
  • 16 bits por muestra

Parece que la instrucción TIFFWriteDirectory tiene una progresión lineal del tiempo de ejecución. Hay una diferencia de tiempo de cálculo desde el primer fotograma en comparación con el último fotograma calculado de alrededor de 400ms. No creo que haya ninguna razón para tener esta diferencia teniendo en cuenta cómo libtiff escribe metadatos IFDs.

He intentado usar diferentes versiones de libtiff 4.1.0, 4.2.0 y 4.3.0, pero el resultado es el mismo. En los registros y foros no veo nada relevante con respecto a este problema y me preguntaba si alguien ha encontrado el mismo problema de rendimiento con grandes conjuntos de datos.

Mi programa simplemente lee una imagen TIFF de entrada (todos los IFDs y datos de imagen), luego se aplican algunos cambios a los datos de imagen y se guardan nuevamente todos los IFDs en el archivo TIFF de salida junto con los datos de imagen.

Dentro de un bucle for hay las siguientes instrucciones donde se llama a TiffWriteDirectory:

Si la desplazamiento de ifd es igual a 0, entonces establecerlo al final del archivo. Luego, se establecen los campos de ifd y se llama a la función TIFFWriteDirectory ().

En este hilo -> discusión en StackOverflow

El usuario [@jonny-taylor] parece tener el mismo problema, pero la discusión no continuó.

Gracias por su ayuda y contribución.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Rendimiento lento al procesar grandes imágenes TIFF estándar

    Soy un experto en TI especializado en c++, c, rendimiento, tiff y libtiff.

    Me he encontrado con una disminución en el rendimiento después de cada imagen procesada cuando intento leer y escribir un gran TIFF estándar con las siguientes características:

    • 10000 imágenes
    • Tamaño de imagen 512×512
    • 16 bits por muestra

    Parece que la instrucción TIFFWriteDirectory tiene una progresión lineal de tiempo de ejecución. Hay una diferencia de tiempo de computación desde la 1ra imagen en comparación con la última imagen calculada de alrededor de 400ms.

    He intentado usar diferentes versiones de libtiff 4.1.0, 4.2.0 y 4.3.0, pero el resultado es el mismo. También he buscado en los registros y foros, pero no he encontrado información relevante sobre este problema.

    Mi programa lee una imagen TIFF de entrada (todos los IFD y datos de imagen), luego aplica algunos cambios a los datos de la imagen y guarda la imagen y todos los IFD en el archivo TIFF de salida.

    Dentro de un bucle for, hay el siguiente código donde se llama a TIFFWriteDirectory:

    ifd.offset = (TIFFSeekFile(m_tiff,0,SEEK_END)+1) & (~((toff_t)1));
    ifd.set_fields(m_tiff);
    TIFFDeferStrileArrayWriting(m_tiff);
    TIFFWriteCheck(m_tiff, 0, "TiffWrapper (pass 1)");
    return TIFFWriteDirectory(m_tiff) != 0;
    

    También he visto un problema similar discutido en Stack Overflow por el usuario @jonny-taylor, pero no se proporcionó una solución.

    Cualquier ayuda o contribución para resolver este problema sería muy apreciada.

Comments are closed.