How to resize and save a slice from a nii file as a PNG image in Python?

  • Python
  • Thread starter BRN
  • Start date
  • Tags
    File
In summary, I solved the problem by cropping the image with the 'Mathshow ()' function and saving it in the correct size.
  • #1
BRN
108
10
Hello everyone,

I have to extract a slice from a nii files and resize it with dimensions 256x256. Once this is done, I have to save it as a PNG image.

This is my code:

slice from nii file:
def img_from_nii(height, width, n_slice, label,  in_path, temp_path):
    
    filenames = os.listdir(in_path)
    
    for i in range(len(filenames)):
        mri_file = in_path + filenames[i]
        img_data = nib.load(mri_file).get_fdata()
        img_data = np.transpose(img_data, (2, 1, 0))
        slice_2D = Image.fromarray(img_data[:, :, n_slice]).resize((height, width))
        
        resized_slice = plt.matshow(slice_2D, cmap = 'gray', fignum = 0)
        plt.axis('off')
        plt.gca().set_axis_off()
        plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)
        plt.margins(0, 0)
        
        plt.savefig(temp_path + label + '_ADNI_' + 'slc' + str(n_slice) + '_' + str(i + 1) + '.png')
        plt.close()
    
    print('dataset done!')

The problem is that PNG files are correctly created, but if you check the image size I do not get 256x256. How is it possible?

check size:
im = Image.open('./outputs/ADNI_png_temp/P_ADNI_slc150_3.png')

width, height = im.size

print('width:', width)
print('height:', height)

outputs:
width: 432
height: 288

How can I solve?

Thanks.
 
Technology news on Phys.org
  • #2
Have you looked at the images in Paint or something? From memory savefig pads the images the same way show() does.

Doesn't the Image class have a save method? Have you tried that?
 
  • #3
If as Image class you mean that of Pillow, yes there is the save method, but it does not support 32-bit images and I lose quality.

By opening the image with any reader, I see the image in the correct size 256x256, but I also have two completely empty side bands.

I believe that the save method of Matplotlib does not provide for the cropping.
 
  • #4
Oops! I forgot to update this post ...:-p

The problem was given by the 'Mathshow ()' function that adds additional spaces around the figure even if the axes are hidden.

I solved this way:
slice from nii file ok:
def img_from_nii(height, width, n_slice, label,  in_path, temp_path):
    
    filenames = os.listdir(in_path)
    
    for i in range(len(filenames)):
        mri_file = in_path + filenames[i]
        img_data = nib.load(mri_file).get_fdata()
        img_data = np.transpose(img_data, (2, 1, 0))
        slice_2D = Image.fromarray(img_data[:, :, n_slice]).resize((height, width), resample = Image.Resampling.LANCZOS)

        plt.imsave(temp_path + label + '_ADNI_' + 'slc' + str(n_slice) + '_' + str(i + 1) + '.png', slice_2D)
        
        plt.close()
    
    print('ADNI ' + label + ' dataset done!')
 

FAQ: How to resize and save a slice from a nii file as a PNG image in Python?

How do I resize a slice from a nii file in Python?

To resize a slice from a nii file in Python, you can use libraries such as nibabel to load the nii file, extract the desired slice, and then use libraries like OpenCV or PIL to resize the image to the desired dimensions.

How can I save a slice from a nii file as a PNG image in Python?

To save a slice from a nii file as a PNG image in Python, you can use libraries like nibabel to load the nii file, extract the desired slice, and then use libraries like PIL or OpenCV to save the slice as a PNG image.

Can I resize the slice while saving it as a PNG image in Python?

Yes, you can resize the slice while saving it as a PNG image in Python. After extracting the slice from the nii file, you can resize it using libraries like PIL or OpenCV before saving it as a PNG image.

What are the advantages of saving a slice from a nii file as a PNG image in Python?

Saving a slice from a nii file as a PNG image in Python allows you to easily visualize and share the image with others. PNG format is widely supported and can be easily opened in most image viewing applications.

Are there any limitations to resizing and saving a slice from a nii file as a PNG image in Python?

One limitation of resizing and saving a slice from a nii file as a PNG image in Python is that resizing may lead to loss of image quality or detail depending on the resizing algorithm used. It is important to carefully choose the resizing method to preserve the integrity of the image.

Similar threads

Replies
3
Views
1K
Replies
1
Views
2K
Replies
1
Views
1K
Back
Top