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. 512^{3}).

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 p_{i} 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 512^{3 }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.