Éste prototipo surgió de la idea inicial del modelo de integración descrito en la sección anterior. Aquí se mostraba una imagen haciendo uso del sistema de partículas de OGRE 3D, la imagen era cargada con ITK usando la clase Image.
La primera prueba consistió en cargar un corte en 2D de la imagen. Se pretendía utilizar una partícula para representar cada pixel de la imagen, es decir, cada partícula del sistema tendría asociado el color y la posición del pixel correspondiente. En el desarrollo de esta idea se encontró que los sistemas de partículas de OGRE 3D no permiten manipular por código la ubicación en el espacio de cada billboard. Por lo tanto fue necesario implementar una nube de billboards (Ver sección Conceptos de un sistema de partículas) haciendo uso de un BillboardSet, el cual permite manipular la posición y características de cada billboard.
Para representar cada pixel de la imagen se utilizó un billboard del BillboardSet, este billboard tomaba el color asociado al pixel, el tamaño y la ubicación del mismo. Los datos de los píxeles eran brindados por la imagen cargada con ITK, la cual es una clase definida a partir de un tipo de pixel y una dimensión, ejemplos de esto son: una imagen de Pixeles RGB con dimensión 2, o una imagen con Pixeles de tipo short (intensidades de color en escala de grises) con dimensión 3 (Ver sección Image para conocer más sobre la clase Image de ITK).
Un plano
Para representar cada plano de la imagen se utilizó un BillboardSet, se tomó la decisión de usar un BillboardSet para cada plano y no uno para toda la imagen debido a que la capacidad de billboards que puede contener un BillboardSet es limitada y puede variar según el computador en que se ejecute la aplicación. Para el computador en el que se desarrolló que tiene 4Gb de memoria RAM y para los computadores de la sala Takina, el límite de BillboardSets que podían ser creados era de 20.
Se encontró que por restricciones en la capacidad de memoria de un BillboardSet y porque al tener todos los planos agrupados podría haber complicaciones en la manipulación de cada billboard, era mejor generar una nube de billboards para cada plano de la imagen, es decir, crear un BillboardSet distinto para cada plano de la imagen.
La siguiente imagen muestra el resultado de crear un plano 2D de la imagen usando un BillboardSet de OGRE 3D.
Ilustración : Plano de una imagen con un sistema de partículas
Imagen completa
Luego de cargar un plano 2D de la imagen en un BillboardSet, se intentó cargar los demás planos de la imagen. Para este fin la imagen es iterada por planos, ITK ofrece un iterador para Imágenes que toma cortes de la imagen en el plano deseado por el usuario. Para cada uno de los cortes tomados fue creada una nube de billboards haciendo uso de un BillboardSet.
Finalmente fue posible cargar la imagen completa, este resultado se puede observar a continuación.
Ilustración : Imagen completa con un sistema de partículas
Nivel de detalle
Además de poder representar las imágenes por planos y completas, se propuso crear un filtro que generara niveles de detalle para un plano de una imagen (el cual se puede extender a todos los planos), esto con el fin de mejorar la velocidad de la navegación por el modelo y la visualización si esta llegase a ser demorada.
Los niveles de detalle sirven para mostrar la imagen en una menor o mayor resolución, y para determinar qué resolución mostrar en cada instante es necesario determinar la relación del nivel de detalle mostrado respecto a la distancia de la cámara al modelo, dado que no siempre es necesario mostrar la mejor resolución de la imagen pues la distancia a la cámara no permitirá que se vea perfectamente la imagen. Al reducir el nivel de detalle de una imagen, menos pixeles son cargados en la imagen, por lo tanto no se ocupa tanto espacio en memoria en cada instante. (Ver sección Nivel de detalle (LOD: Level of detail) [18])
El filtro planteado tomaba un plano de una imagen y generaba todos los niveles de detalle posibles para el mismo, es decir, desde cargar todos los pixeles de la imagen, cargando menos pixeles en cada nivel hasta cargar solo un pixel que representara toda la imagen.
Por cada nivel de detalle planteado, se tomaban 4 pixeles de la imagen de los cuales se promediaba el color asociado a cada uno, el color resultante sería el color del nuevo pixel, el tamaño sería el doble del tamaño que tenían los píxeles promediados.
Se decidió tomar 4 pixeles porque era la mínima cantidad que se podía promediar para garantizar que el pixel resultante conservaría una forma cuadrada como los pixeles originales. La ubicación de los 4 pixeles debía ser la que se muestra en la siguiente imagen, es decir, dos encima y dos debajo formando una figura cuadrada.
Ilustración : Correspondencia entre niveles de detalle del filtro planteado
Finalmente, este pixel quedaría ubicado en el espacio que ocupaban los 4 pixeles promediados de la siguiente manera.
Ilustración : Correspondencia entre niveles de detalle del filtro planteado en la imagen completa
La siguiente imagen muestra tres niveles de detalle para un plano de la imagen cargada, cada uno es el resultado de filtrar el anterior. La imagen original es la primera a la izquierda, la segunda es el resultado de filtrar la primera, la imagen que se encuentra más a la derecha es el resultado de filtrar la imagen del medio.
Ilustración : Primeros 3 niveles de detalle de un plano
Este procedimiento se realiza hasta que ya no sea posible, es decir, cuando no hay 4 pixeles disponibles para promediar y la imagen queda reducida a un pixel en el espacio. La siguiente imagen muestra los últimos 3 niveles de detalle de la imagen anterior.
Ilustración : Últimos 3 niveles de detalle de un plano
Como un posible trabajo futuro queda determinar en qué momento se debe mostrar un nivel de detalle indicado para algún plano de la imagen. Por ejemplo, el plano más cercano a la cámara podría ser el nivel de mayor resolución del mismo, pero a medida que los planos se alejan de la cámara y no se necesita toda la resolución, se escogería para cada uno de ellos el nivel de detalle adecuado para que la imagen 3D se vea bien para la cámara sin necesidad de que todos sus planos se encuentren en su máxima resolución.
Conclusión del primer prototipo
Los resultados fueron satisfactorios porque se logró visualizar una imagen médica cargada con ITK usando OGRE 3D, por lo tanto fue posible concluir que el primer modelo de integración planteado (Ver sección Idea inicial del modelo) funciona y probar que la idea era válida. El siguiente paso era determinar los beneficios o pérdidas brindados por este modelo de integración a la visualización de imágenes médicas. (Ver sección Beneficios y pérdidas del uso del modelo).
Dostları ilə paylaş: |