4

Je cherche des idées sur la façon de convertir une série d'images TIFF 30 + gb, 2000+ couleur en un jeu de données pouvant être visualisé en temps réel (interactif taux de trame) en utilisant le rendu de volume basé sur GPU (en utilisant OpenCL/OpenGL/GLSL). Je veux utiliser une approche de visualisation de volume direct au lieu d'ajustement de surface (c'est-à-dire raycasting au lieu de cubes de marche).IDEAs: comment rendre interactivement de grandes séries d'images en utilisant le rendu de volume direct basé sur GPU

Le problème est double, d'abord j'ai besoin de convertir mes images en un jeu de données 3D. La première chose qui m'est venue à l'esprit est de voir toutes les images comme des textures 2D et de les empiler simplement pour créer une texture 3D.

Le deuxième problème concerne les fréquences d'images interactives. Pour cela, j'aurai probablement besoin d'une sorte de downsampling en combinaison avec "details-on-demand" en chargeant le jeu de données haute résolution lors d'un zoom ou quelque chose comme ça.

Une première approche point par point i est trouvé:

  1. polygonisation des données de volume complet à travers la couche par couche de traitement et de génération de texture d'image correspondant;
  2. effectuer toutes les transformations essentielles à travers les opérations du processeur vertex;
  3. divisant des tranches polygonales en fragments plus petits, où les coordonnées de profondeur et de texture correspondantes sont enregistrées;
  4. dans le traitement de fragments, déployer la technique de programmation vertex shader pour améliorer le rendu des fragments.

Mais je n'ai aucune idée concrète de la façon de commencer à mettre en œuvre cette approche.

J'aimerais avoir des idées ou des idées nouvelles sur la façon de commencer à mettre en œuvre l'approche présentée ci-dessus.

Répondre

2

Si quelqu'un a des idées nouvelles dans ce domaine, il va probablement essayer de les développer et de les publier. C'est un domaine de recherche en cours. Dans votre «approche par points», il semble que vous ayez décrit la méthode de base du rendu de volume basé sur les tranches. Cela peut donner de bons résultats, mais beaucoup de gens passent à une méthode de diffusion de matériel. Il y a un exemple de ceci dans le SDK CUDA si vous êtes intéressé.

Une bonne méthode pour le rendu de volume hiérarchique a été détaillée par Crassin et al. dans leur document appelé Gigavoxels. Il utilise une approche basée sur octree, qui ne charge que les briques nécessaires en mémoire quand elles sont nécessaires.

Un très bon livre d'introduction dans ce domaine est Real-Time Volume Graphics.

+0

Lien intéressant, j'ai lu quelques notions de base sur octree et je pensais que c'était une approche courante. – bastijn

+0

D'après mon expérience, l'utilisation d'une décomposition spatiale de quelque sorte est l'approche la plus courante pour un grand ensemble de données volumétriques. – tkerwin

+0

Oui, il semble que ce soit.Basé sur votre article, j'ai trouvé plusieurs autres qui sont plus applicables à mon domaine de travail (jeux de données médicales), donc probablement dans quelques jours, je vais vous donner la réponse finale. Encore besoin d'un moyen de convertir mes images en voxels, donc je vais chercher des papiers sur ce sujet aussi (et essayer de combiner avec vos informations). – bastijn

1

J'ai fait un peu de rendu de volume, bien que mon code ait généré une isosurface en utilisant des cubes de défilement et l'ait affiché. Cependant, dans ma modeste auto-éducation de rendu de volume, je suis tombé sur un court article intéressant: Volume Rendering on Common Computer Hardware. Il est livré avec un exemple de source aussi. Je n'ai jamais eu le temps de vérifier, mais cela semblait prometteur. C'est bien DirectX, pas OpenGL. Peut-être qu'il peut vous donner quelques idées et un endroit pour commencer.