Below I will show you how to estimate a normalized histogram for a 3D image.
In image processing, a histogram shows the number of pixels (or voxels in the case of a 3D image) for each intensity value in a given image.
Let us suppose we have a 3D image that is 512 x 512 x 512 (width x height x depth). This image has 134,217,728 voxels (i.e. 5123).
If we assume the image is grayscale with 256 distinct intensity levels i (where i = 0 [black], 1, 2, …. 253, 254, 255 [white]), the probability p that a voxel chosen at random will have an intensity level i is as follows:
Note that there will be a different probability p for each intensity value of i. For this reason, the i on pi is subscripted.
Let h(i) represent the normalized histogram where h is the count and i is the intensity value. Let K represent the total number of possible intensity values (e.g. 256). The general equation for the normalized histogram is as follows:
Here is the pseudocode for estimating a normalized histogram of a given 3D image of size 5123 with 256 intensity levels:
// Create the initial unnormalized histogram.
// Initialize all values to 0
for (i = 0; i < 256; i++) {
h(i) = 0;
}
// Traverse each voxel in the image and keep
// a count of the number of times an intensity
// value i appeared.
// w means width, h means height, and d means depth.
for (w = 0; w < 512; w++) {
for (h = 0; h < 512; h++) {
for (d = 0; d < 512; d++) {
// Extract the intensity value for the voxel
i = image[w][h][d];
// Update the histogram for the intensity
// value found above
h(i) = h(i) + 1;
}
}
}
// Now that we have the unnormalized histogram, we have
// to normalize it by dividing each value of the
// histogram by the total number of pixels in the image.
for (i = 0; i < 256; i++) {
h(i) = h(i) / (5123)
}
The sum of all the components in the normalized histogram above is equal to 1.