Metodología - RaulDiazR/Image-Processing GitHub Wiki


Para el diseño de nuestra solución, enfocada en el procesamiento distribuido de imágenes de gran formato, seguimos un enfoque de maestro-esclavo implementado sobre una pequeña granja de computadoras. Este diseño permite una eficiente distribución de la carga de trabajo y optimiza el tiempo de procesamiento.

Diseño de la Solución Propuesta

La arquitectura de nuestra solución se basa en un equipo maestro y tres equipos esclavos. La comunicación entre estos equipos se establece a través de un switch Cisco, utilizando direcciones IP estáticas en el sistema operativo Ubuntu 24.04.2 LTS.

El equipo maestro es el encargado de la orquestación de la tarea principal. Su función primordial es dividir las 600 imágenes .bmp de gran formato (con un mínimo de $2000 \times 2000$ píxeles cada una) entre los equipos esclavos. La asignación de la carga de trabajo se realiza de manera inteligente, considerando la cantidad de núcleos de procesamiento disponibles en cada esclavo, lo que permite una distribución equitativa y eficiente de la tarea. Una vez procesadas, las imágenes resultantes son centralizadas y guardadas en el equipo maestro. Además, a cada imagen procesada se le agrega una terminación específica en su nombre de archivo para identificar el tipo de procesamiento que se le realizó.

Para la ejecución paralela y la comunicación eficiente entre los nodos, utilizamos MPI (Message Passing Interface) para la distribución de la carga de trabajo entre el maestro y los esclavos. Dentro de cada esclavo, empleamos OpenMP para la paralelización a nivel de núcleo, aprovechando al máximo los recursos de cada máquina y acelerando significativamente el procesamiento de las imágenes.

La interacción con el usuario se facilita mediante una interfaz gráfica (GUI) desarrollada con PyQt Designer. Esta interfaz permite al usuario:

  • Seleccionar la ruta del directorio que contiene las imágenes a procesar.
  • Especificar el directorio de salida donde se guardarán las imágenes procesadas.
  • Elegir el tamaño del kernel para el filtro de blurring, con un rango programable de 3 a 155.

Durante el procesamiento, la GUI proporciona retroalimentación visual al usuario, mostrando las imágenes que se están trabajando y una barra de progreso que indica el porcentaje de la tarea completada.


Entradas y Salidas

  • Entradas:

    • Directorio de imágenes: Ruta de un directorio que contiene 600 imágenes de gran formato (mínimo $2000 \times 2000$ píxeles).
    • Directorio de salida: Ruta donde se guardarán las imágenes procesadas.
    • Tamaño del kernel de blurring: Un valor entero entre 3 y 155, seleccionado por el usuario a través de la GUI.
    • Filtros a aplicar: Escala de grises, espejo vertical, espejo horizontal, espejo vertical en grises, espejo horizontal en grises, blurring. Estos filtros se aplican a todas las imágenes.
  • Salidas:

    • Imágenes procesadas: Archivos de imagen guardados en el directorio de salida especificado por el usuario, con una terminación específica para identificar el tipo de procesamiento realizado.

    • Archivo de reporte (.txt): Un archivo que resume la información del procesamiento, con el siguiente formato:

      --- Reporte Final ---
      Kernel utilizado para desenfoque: [Valor del kernel]
      Total de localidades leídas: [Número de localidades]
      Total de localidades escritas: [Número de localidades]
      Tiempo total de ejecución: [Tiempo en minutos y segundos]
      Velocidad : [Valor GB/s]
      MIPS estimados: [Valor MIPS]
      

Condiciones de Operación del Experimento

El experimento se llevará a cabo bajo las siguientes condiciones de operación:

  • Infraestructura de Hardware: Una granja de computadoras compuesta por un equipo maestro y tres equipos esclavos.
  • Sistema Operativo: Ubuntu 24.04.2 LTS en todos los nodos (maestro y esclavos).
  • Conectividad de Red: Los equipos estarán interconectados a través de un switch Cisco, utilizando direcciones IP estáticas para asegurar una comunicación estable y predecible.
  • Volumen de Datos: Se procesarán 600 imágenes .bmp, cada una con una resolución mínima de $2000 \times 2000$ píxeles.
  • Filtros Aplicados: A cada imagen se le aplicarán los siguientes filtros: escala de grises, espejo vertical, espejo horizontal, espejo vertical en grises, espejo horizontal en grises y blurring con un kernel programable por el usuario.
  • Software de Paralelización: Se utilizará MPI para la comunicación y distribución de tareas entre el maestro y los esclavos, y OpenMP para la paralelización a nivel de núcleo dentro de cada máquina.
  • Interfaz de Usuario: La operación se realizará a través de una interfaz gráfica desarrollada con PyQt Designer, que permitirá la configuración de parámetros y la visualización del progreso.