2016-10-21 1 views
0

Je suis en train de mettre en œuvre une méthode pour trier spatialement les tranches DICOM dans un volume. La façon dont je le fais est de trier par la position le long de la tranche normale. Ceci est calculé comme suit:la position de la tranche calculée est différente de celle du fichier DICOM

slice_normal = [0, 0, 0] 
dir_cosines = ds[0x0020, 0x0037] # Direction cosines 
slice_normal[0] = dir_cosines[1] * dir_cosines[5] - dir_cosines[2] * dir_cosines[4] 
slice_normal[1] = dir_cosines[2] * dir_cosines[3] - dir_cosines[0] * dir_cosines[5] 
slice_normal[2] = dir_cosines[0] * dir_cosines[4] - dir_cosines[1] * dir_cosines[3] 

image_pos = ds[0x0020, 0x0032] # IPP 
distance_along_normal = 0 
for i in range(len(slice_normal)): 
    distance_along_normal += slice_normal[i] * image_pos[i] 

Maintenant, cette valeur distance_along_normal doit être égale à la slice location(0x0020, 0x1041), sauf dans mon cas, il a le signe opposé. L'ordre des tranches semble donc être inversé par rapport à ce qu'il devrait être. Je voudrais savoir quoi d'autre dois-je prendre en compte quelque chose d'autre pour calculer l'ordre de la tranche correcte.

Répondre

3

Il n'y a aucune raison de penser que le signe ou la valeur du décalage calculée par votre implémentation doit être identique au signe ou à la valeur de la valeur Slice Location (0020,1041). Conformément à la spécification DICOM

Slice Lieu de travail (0020,1041) est définie comme la position relative du plan d'image exprimée en mm. Cette information est relative à un point de référence spécifique à l'implémentation non spécifiée .

Notez que la direction de l'emplacement n'est pas spécifié du tout, et il est dit explicitement que l'origine est arbitraire, ce qui signifie que la seule chose garantie de faire correspondre entre votre calcul et la Slice Location est la distance (valeur absolue de la différence) des positions de 2 tranches quelconques.

Notez également que Slice Location est de type 3 - il n'est pas nécessaire de le fournir.

En ce qui concerne la commande de tranches, l'ordre de présentation est votre décision. Si vous voulez un ordre spatial, vous devez décider des critères de votre commande. Par exemple, les coupes axiales devraient-elles être présentées à partir de la tête ou des pieds? C'est votre appel complètement et cela dépendra de l'application (utilisation prévue) de votre logiciel.

Si vous ne tenez pas compte de la géométrie, vous pouvez présenter des images classées par exemple par Instance Number (0020,0013). Mais il n'y a aucune garantie que la commande aura une signification géométrique (bien qu'elle le soit habituellement).

+0

Merci pour la réponse. Cela me rassure un peu. Cependant, comment les étiquettes anatomiques auraient-elles un sens si cet ordre est arbitraire? – Luca

+0

Quelles étiquettes anatomiques avez-vous en tête - «Orientation du patient (0020,0020)»? Si c'est le cas, notez qu'il s'agit uniquement d'une orientation dans le plan. L'ordre des tranches n'influence pas l'orientation dans le plan. Par ailleurs, la valeur de «Orientation du patient» doit être cohérente avec la valeur de «Orientation de l'image (Patient)» si les deux valeurs sont présentes. –

+0

Je voulais dire en faisant défiler dans la direction de la place ... comment peut-on déterminer si on va de la tête> orteil ou l'inverse si la commande n'est pas unique. – Luca