Несоответствие размеров NIfTI и DICOM, несмотря на совпадение ориентаций в Python с использованием pydicom и nibabel?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Несоответствие размеров NIfTI и DICOM, несмотря на совпадение ориентаций в Python с использованием pydicom и nibabel?

Сообщение Anonymous »

Описание:
Я работаю над выравниванием изображения NIfTI по ​​пиксельной системе координат DICOM. Я следил за блогом «Попиксельное выравнивание DICOM по NIFTI», чтобы реализовать преобразование. Однако после переориентации данных NIfTI форма изображения NIfTI остается такой же, как и оригинал, что неожиданно.
Следите за этим блогом
Я пишу этот код для выравнивания nifti -> Dicom:

Код: Выделить всё

import nibabel as nib
import numpy as np
import pydicom
import os

def generate_coordinate_matrix(coord_system):
"""
Generate a transformation matrix from the given coordinate system
to the world coordinate system.
:param coord_system: String representing the coordinate system (e.g., 'LSP', 'RAS', etc.)
:return: 4x4 transformation matrix
"""
if len(coord_system) != 3:
raise ValueError("Coordinate system must have exactly 3 characters (e.g., 'RAS', 'LSP').")

# Mapping from coordinate labels to axis directions
axis_mapping = {
'R': [1, 0, 0],   # Right (positive X)
'L': [-1, 0, 0],  # Left (negative X)
'A': [0, 1, 0],   # Anterior (positive Y)
'P': [0, -1, 0],  # Posterior (negative Y)
'S': [0, 0, 1],   # Superior (positive Z)
'I': [0, 0, -1]   # Inferior (negative Z)
}

# Extract the directions for X, Y, Z
x_axis = axis_mapping[coord_system[0]]
y_axis = axis_mapping[coord_system[1]]
z_axis = axis_mapping[coord_system[2]]

# Ensure the coordinate system is valid
if not np.isclose(np.dot(x_axis, y_axis), 0) or not np.isclose(np.dot(x_axis, z_axis), 0) or not np.isclose(np.dot(y_axis, z_axis), 0):
raise ValueError(f"Invalid coordinate system: {coord_system}.  Axes must be orthogonal.")

# Create the transformation matrix
transform_matrix = np.eye(4)
transform_matrix[:3, 0] = x_axis  # X axis
transform_matrix[:3, 1] = y_axis  # Y axis
transform_matrix[:3, 2] = z_axis  # Z axis

return transform_matrix

def calculate_transform_matrix(source_coord, target_coord):
"""
Calculate the transformation matrix to convert coordinates
from source_coord to target_coord.
:param source_coord: Source coordinate system (e.g., 'LSP')
:param target_coord: Target coordinate system (e.g., 'RAS')
:return: 4x4 transformation matrix
"""
# Generate matrices for both systems
source_to_world = generate_coordinate_matrix(source_coord)
target_to_world = generate_coordinate_matrix(target_coord)

# Calculate the transform from source to target
transform_matrix = np.linalg.inv(target_to_world) @ source_to_world
return transform_matrix

Следите за трансформацией,

Код: Выделить всё

M_{DICOM 

Подробнее здесь: [url]https://stackoverflow.com/questions/79356835/nifti-and-dicom-dimensions-mismatch-despite-matching-orientations-in-python-usin[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»