Each link is a .txt file containing lines in the following format:
phi theta value
where theta and phi are longitudinal and azimuthal incident angles, respectively. Note that, both theta and phi are using coordinates of the gantry, where theta in [40, 80] maps to [50, 10] degrees and phi in [70, 290] maps to [-20, 200] degrees, following the notations in our paper. If a value cannot be measured, it shows '?'.
The plots show logarithm values.
Bobcat | Cat | ||
Deer | Dog | ||
Human | Mouse | ||
Raccoon | Sprningbok | ||
Rabbit |
Both CN and CM are 1D profiles for 3D sets of parameters, so they are essentially 4D tables. We provide the accurate pre-computed data without compression here:
Here is a code snippet showing how to read the scattering profiles. Should be very easy to understand.
// Number of bins
#define NUM_SCATTERING_INNER 64
#define NUM_H 64
#define NUM_THETA 64
#define NUM_G 16
#define NUM_BINS 720
// Storage
float scattered[NUM_SCATTERING_INNER][NUM_H][NUM_G][NUM_BINS];
float scatteredDist[NUM_SCATTERING_INNER][NUM_H][NUM_G][NUM_BINS];
float scatteredM[NUM_SCATTERING_INNER][NUM_THETA][NUM_G][NUM_BINS];
float integratedM[NUM_SCATTERING_INNER][NUM_THETA][NUM_G][NUM_BINS];
void initialize(const char *medullaFilename) {
// Read precomputed medulla profiles (azimuthal)
FILE *fMedullaN = fopen((std::string(medullaFilename) + "_azimuthal.bin").c_str(), "rb");
fread(scattered, sizeof(float), NUM_SCATTERING_INNER * NUM_H * NUM_G * NUM_BINS, fMedullaN);
fread(scatteredDist, sizeof(float), NUM_SCATTERING_INNER * NUM_H * NUM_G * NUM_BINS, fMedullaN);
fclose(fMedullaN);
// Read precomputed medulla profiles (longitudinal)
FILE *fMedullaM = fopen((std::string(medullaFilename) + "_longitudinal.bin").c_str(), "rb");
fread(scatteredM, sizeof(float), NUM_SCATTERING_INNER * NUM_THETA * NUM_G * NUM_BINS, fMedullaM);
fread(integratedM, sizeof(float), NUM_SCATTERING_INNER * NUM_THETA * NUM_G * NUM_BINS, fMedullaM);
fclose(fMedullaM);
}