FIB Tomography Post-Processing

Processing a FIB tomography image stack into a 3D model may require additional work to align, clean-up, and segment the micrographs. Depending on the quality of the data and the desired results, some of these steps may be omitted. Many instrument vendors as well as 3rd party software providers may provide programs and scripts to make these steps easier. The examples contained within the Post Processing category will use the Python language for examples.

Stack Alignment #

The typical first step for data reconstruction is to align the images. Many times during tomogram acquisition, small variations in the stage position or SEM lens strength will lead to small changes in the x-y alignment of the image stack that. While the use of fiducial markers significantly helps with acquiring data that is closely aligned, many times further refinement of the data is necessary. Several methods can be used to help determine the shift of an image relative to the previous image in the stack. Many are pixel intensity based, but others can be based on feature recognition or frequency domain matching. See the image alignment page for more details and methodology.

Image Clean-up #

The process of cleaning micrographs from a FIB tomography acquisition will depend greatly on the original image quality. Most of the processing done below is adapted from standard image analysis routines. This article is not exhaustive for all image processing that can be done to enhance the data.

De-noising #

Many times during acquisition, the data acquired has ‘salt and pepper’ noise; random fluctuations in the intensity at any given pixel. There are may methods that can be applied to reduce this type of noise: simple mathematical filters like median and bilateral filtering, or more advanced processes like principle component analysis, compressed sensing, and neural networks. Typically, the more advanced the filtering algorithm the longer data takes to process.

img = si.io.imread('heatdamage.jpg',as_gray=True)
#Add salt and pepper noise
noisy = si.util.random_noise(img, mode = 's&p')
#Denoise with median filter with a 3x3 kernel
denoise = si.filters.median(noisy,np.ones((3,3)))

#Plot Results
fig,ax = plt.subplots(1,3,figsize = (6,4), dpi = 150)
ax[0].imshow(img, cmap='gray')
ax[0].set_title('Original Image', size = 6)
ax[1].imshow(noisy, cmap='gray')
ax[1].set_title('Added Salt and Pepper Noise', size = 6)
ax[2].imshow(denoise, cmap = 'gray')
ax[2].set_title('Median Filtered', size = 6)
for x in ax.ravel():
    x.set_axis_off()
fig.tight_layout()
Figure X. Salt and pepper denoising of an image with median filtering.

Curtaining Removal #

Curtaining is a common artifact of cross-sectioning and needs to be handled with many FIB tomography acquisitions. With the long time-scale of the experiments, simply re-acquiring the data under conditions that minimize curtaining is not always feasible. Several methods have been found to minimize curtaining artifacts in images.

The simplest method of removing curtaining artifacts is by replacement of the highly directional pixels by filtering in the Fourier (FFT) domain. However, this approach can lead to blurring of features of interest that are near the curtaining artifacts. Similar to FFT filtering, wavelet filtering also has been used for removing curtaining artifacts.

#FFT filtering Example here

A more advanced method for curtaining artifact removal uses compressed-sensing algorithms to minimize the differences between the areas around the curtaining artifact.

Perspective Skew #

When imaging in most FIB-SEM systems during a tomogram acquisition, the cut sample surface is tilted with respect to the electron beam. The angle of the tilt will be defined by the FIB-SEM instrument, with many systems having a tilt angle of 52° between the ion beam and the electron beam (Figure 1). The result is that the image is foreshortened in the vertical direction. Many systems are able to automatically correct for the tilted perspective of the sample during image acquisition. In the example in Figure 1, the image would need to be tilted by -38° to correct for the sample tilt.

Figure 1. Schematic of the orientation of the electron and ion beams in a FIB-SEM relative to the sample.

It is also possible to correct for the tilt during the post-processing steps manually. With OpenCV, one can warp the image using the warpPerspective function. In order to perform the warping, a transformation matrix is needed to map onto the original image using an affine transformation. In this case, correction for tilt in the y-direction would result in scaling the image’s y-direction. As an example, in Figure 2 a TEM grid is imaged at 0° and 52° degree stage tilts, along with automated tilt correction from the SEM manufacturer.

Figure 2. SEM micrographs of a TEM grid imaged at 0° and 52° tilt without tilt correction (left and center), and with automatic tilt correction from the SEM manufacturer (right).
#Load the images into arrays
no_tilt = si.io.imread('tem_grid_0_tilt.tif')
tilt_no_tc = si.io.imread('tem_grid_52_tilt.tif')
tilt_tc = si.io.imread('tem_grid_52_tilt_TC.tif')

#Plot the images
fig,ax = plt.subplots(1,3,figsize = (6,4), dpi = 150)
ax[0].imshow(no_tilt, cmap = 'gray')
ax[0].set_title('0° Tilt - No Tilt Correction', size = 6)
ax[1].imshow(tilt_no_tc, cmap = 'gray')
ax[1].set_title('52° Tilt - No Tilt Correction', size = 6)
ax[2].imshow(tilt_tc, cmap = 'gray')
ax[2].set_title('52° Tilt - Auto Tilt Correction', size = 6)
for x in ax.ravel():
    x.set_axis_off()
fig.tight_layout()

The affine transformation matrix needs to stretch the y-pixels to be larger

Segmentation #

The last step of FIB-tomography post-processing is identification of the areas of interest for the 3D model. This is called segmentation, which is dividing up images into different regions, phases, or other divisions of interest. Segmentation of the image stack can be accomplished through many different features of the image: contrast and brightness, texture, shape, etc.

Thresholding #

The simplest method to segment an image stack is to use a thresholding algorithm, which identified pixels that meet a defined criteria and assign it to a phase. Global thresholding based on pixel intensity is a common method, where pixels that have an intensity brighter than the threshold value are assigned to one phase, and the pixels less than the threshold value are assigned to a different phase. Multiple thresholds can be combined to create several phases.

Texture Selection #

Shape Analysis #