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.