2017-06-19 1 views
1

Je ne sais pas comment définir Window Width Window Center tout en convertissant un fichier dicom en un fichier jpg.comment définir Window Width et Window Center tout en convertissant un fichier dicom en un fichier jpg

J'ai terminé une application de conversion qui peut convertir un fichier dicom en un fichier jpg par python et opencv.

Mais il a une grande différence entre le fichier dicom et le fichier jpg, parce que je n'ai pas défini la largeur de la fenêtre et le centre de la fenêtre. Cependant, je ne sais pas comment le définir.

Le Centre fenêtre est -400 et la largeur de fenêtre est 1500.

Voici mon code

# -*- coding: utf-8 -*- 
#!/usr/bin/python 

import os 
import cv2 
import dicom 

def convert_file(dcm_file_path, jpg_file_path): 
    dicom_img = dicom.read_file(dcm_file_path) 
    img = dicom_img.pixel_array 
    cv2.imwrite(jpg_file_path, img) 

if __name__ == '__main__': 
    rootdir = "D:\CT\A7" 

    for parent, dirnames, filenames in os.walk(rootdir): 
     for filename in filenames: 
      if '.dcm' in filename.lower(): 
       dicom_path = os.path.join(parent, filename) 
       name = dicom_path.replace('\\', '_')[3:] 
       jpg_path = "d:\CT_JPG\\%s.jpg" % name 
       print (jpg_path) 
       convert_file(dicom_path, jpg_path) 
+0

Changer le fenêtrage ne serait pas vraiment utile puisque vous utilisez les données de pixel lui-même. les propriétés du centre de la fenêtre et de la largeur de la fenêtre sont à des fins d'affichage sur les visionneuses DICOM. Pour voir un changement dans l'image jpg, vous devrez changer les données de pixel lui-même (qui est en HU) – Shtut

Répondre

2

Si vous voulez vraiment enregistrer l'image DICOM comme jpg, plutôt que de jouer avec Window Width et Window Center paramètres, qui, comme suggéré dans les commentaires, sont destinés à faciliter la visualisation, je recommanderais simplement de normaliser l'échelle de l'image (qui est int16) à uint8 (qui est l'échelle de la normale jpg/png/images gif). Notez cependant que cela entraînerait une perte de résolution.

Pour l'enregistrer comme un jpg, d'une façon possible serait de faire la modification suivante:

def convert_file(dcm_file_path, jpg_file_path): 
    dicom_img = dicom.read_file(dcm_file_path) 
    img = dicom_img.pixel_array 
    scaled_img = cv2.convertScaleAbs(img-np.min(img), alpha=(255.0/min(np.max(img)-np.min(img), 10000))) 
    cv2.imwrite(jpg_file_path, scaled_img) 

Si vous voulez le faire autour d'un centre et la fenêtre fixe Largeur, puis

def convert_file(dcm_file_path, jpg_file_path): 
    dicom_img = dicom.read_file(dcm_file_path) 
    img = dicom_img.pixel_array 
    scaled_img = cv2.convertScaleAbs(img-window_center, alpha=(255.0 /window_width) 
    cv2.imwrite(jpg_file_path, scaled_img) 
+0

Merci pour votre aide! Mais je viens de trouver qu'avec le premier code, l'image est trop claire pour reconnaître, et avec la seconde, c'est un peu sombre. –

+0

Je viens de réaliser une petite erreur dans le premier code (en soustrayant 'np.min (img)' du dénominateur). Vous pouvez voir si cela aide. Et en ce qui concerne la lumière ou l'obscurité, vous pouvez essayer de changer les valeurs de largeur et de centre de la fenêtre, car le deuxième code est comment DICOM Viewers rend l'image –

+0

Et si le code a aidé, sélectionnez la réponse comme bonne réponse :) –