Publicado el 15 de Septiembre del 2020
477 visualizaciones desde el 15 de Septiembre del 2020
751,6 KB
17 paginas
Creado hace 15a (12/04/2010)
Trabajo final
PROCESAMIENTO DE IMÁGENES 3D EN
GPU
Para la materia de posgrado: Procesamiento digital de imágenes
Dictada por el Profesor: Dr. Claudio Delrieux
Propuesta presentada por
Ing. Juan P. D’Amato
Tandil – 2010
Objetivos
Se plantea como objetivo y como finalización del curso de posgrado, desarrollar una
herramienta para procesar imágenes 2D y 3D, la que incluirá las siguientes capacidades:
• Filtros de procesamiento por pixel (brillo, contraste, etc.)
• Filtros morfológicos (Erosión/Dilatación)
• Filtros basados en vecindario (Gradientes, promedios, medianas, media)
• Aplicar técnicas de cambio de tamaño (linear sampling, bicubic, MinMax
gradient) y algún filtro no convencional ( bilateral)
• Realizar aritmética de imagen : Suma-Resta-Max-Min-Promedio
Adicionalmente, se espera que la herramienta tenga la capacidad de:;
• Abrir y visualizar mapas de bits 3D de algún formato conocido (RAW,
BMP,LATTICE,VTK)
Importar mallas 3D y convertirlas en formato de mapa 3D
•
• Modificar la función de Transferencia
• Definir planos de corte de forma sencilla
• Soporte GPU / MultiCore, detectando y notificando si hay compatibilidad
• Extracción y comparativa de tiempos de procesamiento
Descripción de la aplicación .......................................................................................................... 4
Render volumétrico ....................................................................................................................... 5
Definición de la función de transferencia ................................................................................. 7
Archivos soportados ...................................................................................................................... 8
Detalles de implementación del módulo de ejecución de filtros ................................................. 9
Filtros de procesamiento ............................................................................................................ 10
Resultados ................................................................................................................................... 12
Anexo 1 : Implementación del filtro bilateral ............................................................................. 15
Filtro bilateral con implementación Better Brute-force ......................................................... 15
Anexo 2 : Min-Max Gradient ................................................................................................... 15
Descripción de la aplicación
La aplicación de procesamiento 3D es una aplicación CPU/GPU generada en Delphi compatible
con Windows que utiliza la placa gráfica a través de OpenCL para realizar los procesamientos y
la visualización. En caso que la PC no incluya una placa gráfica apropiada, la aplicación ejecuta
en modo CPU siempre.
La aplicación de procesamiento 3D se compone de las siguientes partes:
- Un render volumétrico basado en RayCasting (1) y un módulo de definición de la
función de transferencia (3)
- Un módulo para importar y convertir archivos desde múltiples formatos al formato
base( 3D monocromático)
- Un módulo de ejecución de filtros y operaciones sobre imágenes 2D y 3D
(6) Menú de Acceso rápido
(2) Lista de imágenes
(3) Función de Transferencia
(4) Historial de Operaciones
(1) PANEL RENDER VOLUMÉTRICO
(5) Distrib. de Intensidades
Figura 1: Vista principal de la aplicación
Cada vez que se carga una nueva imagen, se añade la Lista de Imágenes(2) , se marca como
activa y se calcula la Distribución de Intensidades correspondientes (5).
Cuando se ha realizado alguna modificación sobre la imagen, se indica la misma en el Historial
de operaciones(4).
Para activar/desactivar el renderizado por GPU, hacer clic en el siguiente Checkbox
. Dado que el modo CPU es mucho más lento, se baja la definición del render.
Para modificar el color de fondo, seleccionarlo del siguiente combo de colores
.
Las imágenes por defecto se encuentran normalizadas en el cubo [0..1,0..1,0..1]. Para trabajar
con la imagen en las proporciones originales, hacer clic en el checkbox
.
Importante: Como la versión utilizada de OpenCL no permite la ejecución en CPU, se re-
implementaron los métodos equivalentes.
Render volumétrico
La técnica utilizada para el renderizado de imágenes 3D con transparencia en la aplicación es
un ray-casting. Por cada pixel de la pantalla, se tira un rayo de forma normal al plano que la
forma, y se computa el color del pixel de salida, como la acumulación de transparencia en la de
los pixeles del volumen que se encuentran en la dirección del rayo dado, tal como se
esquematiza en la Figura 2.
Figura 2: Esquema de un render de ray-casting
Como se está trabajando con imágenes monocromáticas, a cada valor leído en la imagen de
entrada se le asocia una función de coloreo o función de transferencia. A cada valor de pixel,
normalizado en el rango [0..1], se lo utiliza como índice en una tabla de coloreo que describe
tanto el color RGB como la transparencia.
A su vez, como las imágenes se encuentran en el espacio tri-dimensional, es posible operar
sobre las mismas, cambiando el punto de vista. Las operaciones básicas involucradas son:
rotación, traslación y escala, cada una se corresponde con los siguientes botones.
. Para aplicar alguna de estas transformaciones, se debe hacer click en el botón
correspondiente y mover el mouse sobre el panel del Render manteniendo el botón izquierdo
apretado.
Como estas operaciones son muy frecuentes, y en especial en los casos que la aplicación solo
es compatible con el modo CPU, la visualización tiene un modo “Motion” en la cual se
renderiza la vista con menor resolución, para mantener la interactividad con el usuario. En
caso que el usuario libere el mouse, se renderiza la imagen con buen nivel de detalle En la
figura 3 se ven ambos casos.
Figura 3: (izq) Modo “Motion” (der) Modo “Normal”
Parámetros del Render
Para acceder a la configuración del Rendering, hacer click en
y mostrará la siguiente
ventana.
Figura 4: Ventana de configuración del Rendering
Los parámetros a modificar son:
• Brillo : ajuste de brillo de la visualización
• Density : multiplicador de transparencia por pixel. Cuando el valor es mayor, el objeto
se vuelve más opaco.
• Transferencia: multiplicador de transferencia entre pixeles
• Offset: desplazamiento sobre la función de transferencia
• Render Precission : calidad en proporción a la cantidad de pixeles que recorre el
render. La mayor precisión, implica que se evalúan mucho más pixeles, y la peor, la
menor cantidad.
• Box Size XYZ: Proporción de tamaño de cada eje del cubo normalizado que contiene la
parte visible de la imagen.
• Offset XYZ: desplazamiento del centro cubo que contiene la imagen.
Importante: Para definir un plano de corte en algún eje, llevar el tamaño de la caja al
mínimo y desplazarse con las barras de Offset.
Definición de la función de transferencia
Como se nombró, la función de transferencia es una tabla de coloreo o paleta, codificada en
una imagen 1D. La función que se está utilizando en el momento, se muestra en la pantalla
principal de la siguiente forma. Para modificar la función de transferencia, existe un editor, que
se accede haciendo Doble Click en la imagen en la imagen de la paleta.
El editor tiene la siguiente presentación vista:
Figura 5: Vista del Editor de Escalas
Las operaciones que se pueden hacer por Paleta son:
• Para elegir la paleta activa, seleccionarla de la lista.
• Para añadir una nueva paleta, hacer click en el botón “New”
• Para quitar una paleta, seleccionar de la lista y hacer click en “Remove”
• Para salvar el estado de las paletas, hacer click en “Save”. Solo en este caso se guarda
la configuración
Para editarla, es necesario operar sobre la imagen de la paleta. Los puntos de edición se
indican con un círculo, y el resto de la imagen se calcula por interpolación entre estos puntos.
Esta paleta siempre está asociada al rango 0..1.
• Para añadir un punto o seleccionar, hacer click izquierdo sobre la imagen
• Para quitar un punto, hacer click derecho
• Para modificar los valores, primero seleccionar el punto , luego
o Elegir el color del combo
o La transparencia se ingresa manualmente en el siguiente campo
o El valor escalar es de solo lectura
Luego de cambiar algún atributo, la paleta se re-calcula automáticamente.
Archivos soportados
La herramienta soporta distintos tipos de archivos tipo Bitmap 3D, siendo:
• BMP (si el alto es mucho mayor que el ancho, se procesa como si fuera una tira de
imágenes)
• RAW (8 bits) : es necesario ingresar manualmente las dimensiones del archivo
• VTK (formato texto)
También se incluye un importador, el cual toma mallas 3D basadas en triángulos, y mediante
un algoritmo de discretización por celdas regulares, genera el bitmap 3D correspondiente;
distinguiendo celdas interiores de exteriores. Como dato de entrada se requiere solamente la
resolución máxima deseada.
Detalles de implementación del módulo de ejecución de filtros
Para la implementación de filtros, se definió un módulo capaz de ejecutar filtros u operaciones
tanto en GPU como en CPU. Dicho módulo no es visual, sino interno de la aplicación, y forma
parte del diseño de la misma.
Para el mismo, se definieron clases que abstraen la información de las operaciones utilizadas,
de forma similar a como se invocan en OpenCL. Cada filtro es representado por un kernel
encargado de procesar píxeles, el cual se genera internamente por dos formas, con un Script
compilado para la GPU o por una referencia a una implementación.
Las clases invo
Comentarios de: Procesamiento de imágenes 3D en GPU (0)
No hay comentarios