Clear boundaries between pixels after zoom in

What you refer to “blurring” is a low-pass filter and dense resampling that reconstructs the original continuous signal from discrete samples (voxel values). Performing this interpolation is not a user preference but the right thing to do. If you just display the raw sample values then you will see edges that were not present in the original signal (harsh, visible boundaries of each voxel) that may make it harder to see real changes in the signal.

I know that some imaging software disable it by default (ImageJ, ITK-Snap), probably because long time ago the additional computation slowed down the image display; and the artifacts are not as complex because these software mostly just show 2D image slices - they cannot work on arbitrarily positioned and oriented slices in a 3D volume. However, in 3D Slicer each slice view position can be freely positioned and oriented in the volume, so if you just display the closest sample value instead of showing the reconstructed signal then you may get very confusing artifacts like this:

Some users wants to disable interpolation because they segment low-resolution images and it matters where where the exact pixel boundaries are. However, this means that you are trying to represent a signal with less samples than it would be required, which would lead to most processing algorithm working incorrectly and reconstructed 3D surface would lose details or contain step artifacts. One solution to this is to resample the input image (for example, using Crop volume module) to have higher resolution before starting the segmentation.

If you just want to see the pixel boundaries for software debugging then disabling interpolation is again not a good approach. The problem is that you can only make those pixel boundaries visible where value of the neighbors are sufficiently different. Even if you artificially increase the contrast to see more of the pixel boundaries, you will never be able to visualize boundaries between voxels that have exactly the same value. For this kind of debugging tasks, you can copy past this code snippet into the Python console, which displays the voxel grid (replace the volumeNode = ... line by volumeNode = getNode("MyVolumeName") where MyVolumeName is the name of the image you want to see the voxel boundaries of).

You can find further related discussions in these topics:

1 Like