2016-07-17 3 views
0

Ich arbeite am Rendern einiger Volumendaten über Cuda v6.5 Beispielcode - VolumeRender. Ich habe einige Voxeldaten mit anderer RGB-Farbe in einem anderen Programm. Ich möchte sie rendern, indem ich sie in das .raw-Dateiformat ausgabe. Wie man jedoch das exakt gleiche .raw-Format als Eingabe ausgibt .raw-Datei in VolumeRender verwirrte mich sehr.Was ist das .raw-Dateiformat im Cuda-Beispielcode?

Nach meinem Wissen kann eine .RAW-Datei ein Array von Volumendaten enthalten. Ich habe versucht, .raw Datei, namens "Bucky.raw", in volumrRender, mit Text-Editor, aber es hat nicht funktioniert. Der Text war verstümmelter Text. Ich habe also keine Ahnung vom Format der .raw-Datei.

Als nächstes habe ich versucht, Beispielcode zu lesen und herauszufinden, wie die .cpp-Datei dieses Format lesen. Die einzige Information, die ich bekomme, war die Lautstärke. Es ist unsigned char * width * height * depth.

Dosis, die bedeutet, dass jede Voxeldaten nur durch ein vorzeichenloses Zeichen dargestellt werden? Was bedeutet dieser nicht signierte Char? Ist es die Graustufe von Voxel?

Ich habe versucht, Graustufen meiner Voxel RGB-Daten auszugeben, aber das Ergebnis ist wie folgt verdrahtet.

enter image description here enter image description here

An der Spitze ist mein Voxeldaten und von PCL visualisieren. Das andere ist das Renderergebnis. Offensichtlich ist es das falsche Format für das VolumeRender-Programm.

Ich weiß, dass es viele verschiedene Formate von .raw-Dateien gibt, aber ich denke, es gibt vielleicht nur eine Art von .raw-Format nur für Cuda-Beispielcode. Kann jemand .raw Format wie "Bucky.raw" Format speichern?

+1

Sie haben den Beispielcode, so dass Sie es herausfinden können, wie Greifen Sie auf die RAW-Datei zu. – kangshiyin

Antwort

2

Bedeutet das, dass jede Voxeldaten nur durch ein vorzeichenloses Zeichen dargestellt werden? Was bedeutet dieser nicht signierte Char? Ist es die Graustufe von Voxel?

Ja, jedes Voxel dargestellt wird durch eine unsigned char (dh VolumeType), der Wert (0-255) stellt die „Durchlässigkeit“ der Voxel (dh die Umkehrung der Dichte), mit einem Wert von 0 Voxel die niedrigste Transmissivität/höchste "Dichte" (Erzeugen von "dunkleren" Bereichen) und der Voxelwert von 255 sind niedrige Dichte (Erzeugen von "helleren" Bereichen).

Die Speicherreihenfolge hat eine schnell variierende Dimension in x, dann y, dann z. Die tatsächlichen Abmessungen des Volumens können leicht im Programm als volumeSize.width (x), volumeSize.height (y) und volumeSize.depth (z) entdeckt werden. x steht für die horizontale Richtung, y für die Vertikale und z für die Richtung in oder aus dem Bildschirm.

Kann jemand .raw Format genau wie "Bucky.raw" Format speichern?

Hier ist ein Programm, mit dem Sie verschiedene Arten von "Bucky.raw" -Dateien schreiben können. Die Abmessungen sind 32,32,32, das sind die Standardwerte im Programm.

Wenn Sie dieses Programm kompilieren und dann mit einem Befehlszeilenparameter von 0-4 ausführen, können Sie verschiedene Muster sehen, wenn Sie den volumeRender Beispielcode ausführen.

cat buckywriter.cpp 
#include <fstream> 
#include <iostream> 
#include <string> 
#include <cstdlib> 

using namespace std; 
const int sz = 32; 
const int method_max = 4; 


int myfunc(int x, int y, int z, int method){ 

    switch (method){ 
    case 0: 
     return x; 
     break; 
    case 1: 
     return y; 
     break; 
    case 2: 
     return z; 
     break; 
    case 3: 
     return x+y; 
     break; 
    case 4: 
     return (x+y)*2*((z+1)/float(sz)); 
     break; 
    default: 
     return x; 
     break; 
    } 
    return 0; 
} 



int main(int argc, char *argv[]){ 

    int method = 0; 
    if (argc > 1) method = atoi(argv[1]); 
    ofstream fout; 
    string foname("Bucky.raw"); 
    fout.open(foname.c_str()); 
    if (!fout) {std::cout << "file open failed" << std::endl; return 1;} 
    for (int z = 0; z < sz; z++) 
    for (int y = 0; y < sz; y++) 
     for (int x = 0; x < sz; x++) 
     fout << (unsigned char)(myfunc(x, y, z, method)); 
    if (!fout) {std::cout << "file write failed" << std::endl; return 1;} 
    fout.close(); 
    return 0; 
} 

$ g++ buckywriter.cpp -o buckywriter 
$ ./buckywriter 3 
$ ./volumeRender 

Dies ist die grafische Ausgabe für den oben buckywriter 3 Fall, die eine zunehmende Durchlässigkeit Gradienten in x und y erzeugt:

enter image description here

+0

Der Voxelwert ist "transmissivity" !!! Das erklärt alles! Es ist Arbeit in meinem Programm. Vielen Dank! –