es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe otra opción para redimensionar nrrd’s, ya que parece que image.resizer no funciona?

He estado intentando cambiar el tamaño de las imágenes (específicamente archivos nrrd).

Probé el siguiente código en archivos JPEG y PNG normales y funciona.

data_path = r'H:\Usuario\Código\Datos de Prueba\Datos de Prueba'
path_open_patients = glob.glob(data_path + '\\' + '*')
for patient in tqdm.tqdm(path_open_patients): 
    dirs = os.listdir(patient)
    for item in dirs:
        if os.path.isfile(patient +'\\'+ item):
            im = Image.open(patient +'\\'+ item)
            f, e = os.path.splitext(patient +'\\'+ item)
            imResize = im.resize((256,256), Image.ANTIALIAS)
            imResize.save(f + ' _redimensionado.nrrd', 'nrrd')
        if not os.path.isfile(patient+item):
            print('has perdido')

Desafortunadamente, esto me da el siguiente error:
“UnidentifiedImageError: no se puede identificar el archivo de imagen ‘H:\Usuario\Código\Datos de Prueba\Datos de Prueba\BrainMets-UCSF-01261_Target 1_7\imagen.nrrd’

No quiero convertir las imágenes nrrd a JPEG porque esto podría arruinar la calidad de la imagen. ¿Existen otras opciones?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual el código anterior no funciona para archivos nrrd es porque la biblioteca Pillow utilizada en el código no admite el formato nrrd. Para cambiar el tamaño de los archivos nrrd, se puede utilizar la biblioteca SimpleITK, que es una biblioteca popular de procesamiento de imágenes utilizada en el campo de la imagenología médica.

    Aquí hay un ejemplo de código sobre cómo cambiar el tamaño de los archivos nrrd utilizando SimpleITK:

    import SimpleITK as sitk
    import os
    import glob
    
    data_path = r'H:\User\Code\TestingData\TestData'
    path_open_patients = glob.glob(data_path + '\\' + '*')
    for patient in path_open_patients: 
        dirs = os.listdir(patient)
        for item in dirs:
            if os.path.isfile(patient +'\\'+ item) and item.endswith('.nrrd'):
                image = sitk.ReadImage(os.path.join(patient, item))
                image_resampled = sitk.Resample(image, [256, 256, image.GetDepth()], sitk.Transform(), sitk.sitkLinear, image.GetOrigin(), [1,1,1], image.GetDirection(), 0.0, image.GetPixelID())
                sitk.WriteImage(image_resampled, os.path.join(patient, item.split('.')[0]+'_resized.nrrd'))
    

    En el código anterior, estamos utilizando la función sitk.Resample() de SimpleITK para cambiar el tamaño de los archivos nrrd al tamaño deseado (256*256), preservando la profundidad y origen de la imagen. También estamos utilizando la función sitk.WriteImage() para guardar la imagen nrrd redimensionada con el mismo nombre que la imagen original pero con “_resized” añadido al nombre de archivo.

    ¡Espero que esto ayude!

Comments are closed.