Note
Go to the end to download the full example code. or to run this example in your browser via Binder
Smoothing an image¶
Here we smooth a mean EPI image and plot the result.
We then show how to smooth a SurfaceImage.
As we vary the smoothing FWHM, note how we decrease the amount of noise, but also lose spatial details. In general, the best amount of smoothing for a given analysis depends on the spatial extent of the effects that are expected.
Smoothing a mean EPI image¶
We start by loading a 4D image from the brain development functional dataset.
from nilearn.datasets import fetch_development_fmri
from nilearn.image import mean_img, smooth_img
from nilearn.plotting import plot_epi, show
data = fetch_development_fmri(n_subjects=1)
# Print basic information on the dataset
print(
f"First subject functional nifti image (4D) is located at: {data.func[0]}"
)
first_epi_file = data.func[0]
[fetch_development_fmri] Dataset directory found:
/home/runner/work/nilearn/nilearn/nilearn_data/development_fmri
[fetch_development_fmri] Dataset directory found:
/home/runner/work/nilearn/nilearn/nilearn_data/development_fmri/development_fmri
[fetch_development_fmri] Dataset directory found:
/home/runner/work/nilearn/nilearn/nilearn_data/development_fmri/development_fmri
First subject functional nifti image (4D) is located at: /home/runner/work/nilearn/nilearn/nilearn_data/development_fmri/development_fmri/sub-pixar123_task-pixar_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz
We compute the mean image from the 4D image
Then we smooth using smooth_img,
with a varying amount of smoothing, from none to 20mm by increments of 5mm
for fwhm in [None, 5, 10, 15, 20, 25]:
smoothed_img = smooth_img(mean_func, fwhm)
title = "No smoothing" if fwhm is None else f"Smoothing {fwhm} mm"
plot_epi(
smoothed_img,
title=title,
colorbar=True,
cmap="gray",
vmin=0,
)
show()
Smoothing a SurfaceImage¶
The smooth_img function can also be used to smooth a
SurfaceImage.
from nilearn.datasets import (
load_fsaverage,
load_fsaverage_data,
load_sample_motor_activation_image,
)
from nilearn.plotting import plot_surf_stat_map
from nilearn.surface import SurfaceImage
fsaverage_meshes = load_fsaverage()
stat_img = load_sample_motor_activation_image()
curvature = load_fsaverage_data(data_type="curvature")
surface_image = SurfaceImage.from_volume(
mesh=fsaverage_meshes["pial"],
volume_img=stat_img,
)
for fwhm in [None, 5, 10, 15, 20, 25]:
smoothed_img = smooth_img(surface_image, fwhm)
title = "No smoothing" if fwhm is None else f"Smoothing {fwhm} mm"
plot_surf_stat_map(
surf_mesh=fsaverage_meshes["inflated"],
stat_map=smoothed_img,
title=title,
threshold=1.0,
vmax=8,
bg_map=curvature,
)
show()
Total running time of the script: (0 minutes 8.582 seconds)
Estimated memory usage: 179 MB











