Как стать автором
Обновить

Тайны мозга. Анализируем данные MRI с помощью FreeSurfer и Python

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров2.2K

Визуализация мозга это революционное направление в неврологии, оно позволяет исследователям получать беспрецедентное представление о структуре и функциях человеческого мозга. Одной из областей, где визуализация показала особые перспективы, является выявление паттернов мозговой активности, связанных с различными предрасположенностями, такими как черты личности, когнитивные способности и психические расстройства. В этой статье мы рассмотрим, как эту технологию можно использовать для выявления предрасположенностей человека, и какие открытия были сделаны в этой области, увидим как, используя данные MRI получить сведения о базовых структурах мозга на примере его коры.

Немного теории

Прежде чем мы углубимся в детали, давайте начнем с краткого обзора.

Существует несколько методов, которые можно использовать для визуализации головного мозга, это магнитно‑резонансная томография (MRI), функциональная магнитно‑резонансная томография (fMRI), позитронно‑эмиссионная томография (PET) и электроэнцефалография (EEG). MRI дает подробные изображения структуры мозга, а fMRI, PET и EEG используются для измерения мозговой активности.

Теперь рассмотрим, каким путем можно использовать данные о мозге для вывления предрасположенностей человека.

Один из подходов заключается в изучении мозговой активности людей, проявляющих определенную склонность, и сравнении ее с мозговой активностью тех, у кого такой склонности нет. Например, исследователи могут сравнить мозговую активность людей с высокими баллами по такой черте личности, как экстраверсия, с мозговой активностью тех, у кого низкие баллы. Выявив различия в активности мозга между двумя группами, исследователи могут получить представление о нейронных механизмах, лежащих в основе склонности данного типа.

Другой подход заключается в изучении мозга людей с высоким риском определенной наклонности, например, у людей с семейной историей психических расстройств. Сравнивая мозговую активность этих людей с активностью контрольной группы, исследователи могут определить закономерности мозговой активности, связанные с данным типом наклонности. Этот подход также можно использовать для изучения влияния таких внешних факторов как терапия или лекарства на активность мозга людей этой группы.

Некоторые результаты исследований

Одним из самых захватывающих открытий в области визуализации мозга стало выявление участков мозга, связанных с определенными когнитивными функциями, такими как внимание, память и принятие решений. Например, исследователи определили области мозга, которые активируются, когда людей просят принять решения, связанные с риском и неопределенностью. Эти области были названы «decision‑making network», и считается, что они играют ключевую роль в нашей способности принимать сложные решения.

Еще одним захватывающим открытием стала идентификация областей мозга, связанных с конкретными психическими расстройствами. Например, исследователи обнаружили, что у людей с депрессией, как правило, снижается активность префронтальной коры — области мозга, которая участвует в регулировании эмоций и принятии решений. Точно так же люди с тревожными расстройствами, как правило, имеют повышенную активность в миндалевидном теле, области мозга, которая участвует в обработке страха и тревоги.

Визуализация предоставила исследователям мощные инструменты для понимания предрасположенностей человека. Изучая мозг людей, которые проявляют определенную наклонность или подвержены высокому риску ее проявления, исследователи могут выявить закономерности мозговой активности, связанные с этим фактором. Эти идеи уже привели к лучшему пониманию нейронных механизмов, лежащих в основе различных когнитивных функций и психических расстройств. Поскольку технология визуализации мозга продолжает совершенствоваться, мы можем ожидать еще более захватывающие открытия в этой области.

Давайте перейдем к практике, ниже мы узнаем, как мы можем работать с MRI данными. Первый пример покажет как улучшать визуализацию, а второй, как извлекать данные об участках мозга.

Улучшение MRI изображений

Зачастую нам нужно улучшить данные MRI для более четкой визуализации, ниже мы увидим несколько полезных примеров.

  1. Image denoising. MRI зачастую содержит много шума, который снижает качество изображения. Следующий код использует библиотеку NiftyNet для его удаления:

import numpy as np
import nibabel as nib
from niftynet.engine.application_factory import get_application
from niftynet.io.image_reader import ImageReader

# Load MRI data
reader = ImageReader().initialise({'image': 'path/to/mri.nii.gz'})
data = reader(idx=0)['image_data']

# Apply denoising
app = get_application('denoiser')
app.net_param.batch_size = 1
app.net_param.validation_every_n = np.inf
app.action(data, 'infer')
denoised_data = app.output['denoised_data'][0]

# Save denoised data
nib.save(nib.Nifti1Image(denoised_data, reader.output_path), 'path/to/denoised_mri.nii.gz')
  1. Bias Field Correction. Иногда у нас возникает неоднородность интенсивности MRI сканов, что может снижать качество визуализации. Следующий пример использует библиотеку SimpleITK для коррекции:

import SimpleITK as sitk

# Load MRI data
mri = sitk.ReadImage('path/to/mri.nii.gz')

# Apply bias field correction
corrector = sitk.N4BiasFieldCorrectionImageFilter()
corrected_mri = corrector.Execute(mri)

# Save corrected data
sitk.WriteImage(corrected_mri, 'path/to/corrected_mri.nii.gz')
  1. Image Registration. Может использоваться для выравнивания нескольких MRI сканов, что в свою очередь также улучшает качество. Здесь нам также поможет библиотека SimpleITK:

import SimpleITK as sitk

# Load MRI data
fixed_mri = sitk.ReadImage('path/to/fixed_mri.nii.gz')
moving_mri = sitk.ReadImage('path/to/moving_mri.nii.gz')

# Perform image registration
registration = sitk.ImageRegistrationMethod()
registration.SetMetricAsMeanSquares()
registration.SetOptimizerAsRegularStepGradientDescent(learningRate=1.0, minStep=0.001, numberOfIterations=200)
registration.SetInitialTransform(sitk.TranslationTransform(fixed_mri.GetDimension()))
registration.SetInterpolator(sitk.sitkLinear)

final_transform = registration.Execute(fixed_mri, moving_mri)

# Apply final transform to moving MRI data
registered_mri = sitk.Resample(moving_mri, fixed_mri, final_transform, sitk.sitkLinear, 0.0)

# Save registered MRI data
sitk.WriteImage(registered_mri, 'path/to/registered_mri.nii.gz')

Следует отметить что параметры, используемые в этих примерах, могут нуждаться в корректировке в зависимости от конкретных MRI данных и желаемого результата.

Извлечение данных об участках мозга

Теперь давайте попробуем поработать с MRI c помощью такого замечательного инструмента как FreeSurfer.

  1. Прежде чем мы сможем использовать FreeSurfer, нам необходимо его установить. Инструкция как это сделать. Нам нужно принять условия лицензии и поместить ее в HOME директорию FreeSurfer.

  1. Установив FreeSurfer, мы сможем использовать его для предварительной обработки данных. Вот пример обработки T1-weighted MRI скана:

import os
from nipype.interfaces.freesurfer import ReconAll

subject_id = 'sub-01'
t1w_file = '/path/to/sub-01_T1w.nii.gz'
output_dir = '/path/to/freesurfer_output'

reconall = ReconAll(subject_id=subject_id, directive='all', T1_files=t1w_file, subjects_dir=output_dir)
reconall.run()

Опция directive='all' указывает FreeSurfer выполнить все шаги предварительной обработки, а опция T1_files=t1w_file указывает путь к Т1-weighted MRI скану. Опция subject_dir=output_dir указывает куда поместить результат.

  1. После предварительной обработки мы можем приступим к анализу. Вот пример того, как извлечь данные толщины коры головного мозга:

import os
import numpy as np
from nibabel import load
from nipype.interfaces.freesurfer import SurfaceMetrics

subject_id = 'sub-01'
hemi = 'lh'
output_dir = '/path/to/freesurfer_output'

# Load the cortical surface
surf_file = os.path.join(output_dir, subject_id, 'surf', f'{hemi}.pial')
surf = load(surf_file)

# Extract cortical thickness data
surface_metrics = SurfaceMetrics(subjects_dir=output_dir)
surface_metrics.inputs.hemi = hemi
surface_metrics.inputs.subject_id = subject_id
surface_metrics.inputs.surface = 'pial'
surface_metrics.inputs.curv_measure = 'thickness'
thickness_data = np.array(surface_metrics.run().outputs.curv)

Здесь мы загружаем поверхность коры для левого полушария sub-01 и извлекаем данные о толщине коры с помощью SurfaceMetrics. Опция hemi='lh' указывает на левое полушарие, а опция curv_measure='thickness' указывает, что мы хотим извлечь данные о толщине. Результат сохраняется в переменной thickness_data.

Где искать данные для собственных исследований

Есть несколько источников, где вы можете найти нужные данные для исследований и проведения экспериментов:

  • OpenNeuro — это бесплатная и открытая платформа для обмена MRI данными и иными другими.

  • Human Connectome Project — это крупномасштабный проект, целью которого является создание карты человеческого мозга с использованием различных методов визуализации.

  • Brain/MINDS — проект, который фокусируется на маппинге человеческого мозга с пониманием функций его областей.

  • The Cancer Imaging Archive — является хранилищем медицинских изображений, в том числе MRI данных.

Заключение

Это всего лишь несколько примеров того, как мы можем использовать Python и FreeSurfer для анализа данных MRI. FreeSurfer содержит множество других команд и опций, поэтому обязательно обратитесь к документации для получения дополнительной информации и проведения самостоятельных исследований.

Теги:
Хабы:
Всего голосов 4: ↑4 и ↓0+4
Комментарии2

Публикации

Истории

Работа

Python разработчик
137 вакансий
Data Scientist
61 вакансия

Ближайшие события