파이썬 3.7에서 NIFTI의 전체 이미지 슬라이스 변경

Batfly :

사실 파이썬을 사용하여 MRI 영상에서 일 해요. 이미지 포맷은 내가 X, Y 또는 Z 도끼에 조각을 시각화하는 방법을 얻을 NIFTI 형식이지만, 지금은 TU 사용 소벨은 그들 각각 필터링 그 조각 새로운 NIFTI 이미지를 생성합니다.

그에 대한:

  • I 메인 .nii.gz 이미지를로드 (IMG = nib.load (im_path))
  • 나는 새로운 이름으로 다시 메인 .nii.gz 이미지를로드 "img_sobel"(img_sobel = nib.load (im_path))
  • 각 슬라이스에 대한 루프를 만들기
  • 소벨은 슬라이스를 필터링
  • img_sobel의 대응하는 슬라이스에 슬라이스를 교체 ( "img_sobel_data [:, : SL] == np.hypot (SX, SY)")
  • 루프 후, 이름이 "image_XXX_Sobel"와 img_sobel 저장

부가 적 줄거리를 사용하여, 나는 각 조각에 소벨 필터링 작업을 볼 수 있지만, 그것은 라인 "img_sobel_data을 [:, :, SL] == np.hypot (SX, SY)"보인다 작동하지 않는다, 왜?

여기에 lopp 부분이다 :

    # Name the interested data
    img_data = img.get_fdata()
    img_sobel_data = img_sobel.get_fdata()

    header = img.header
    nb_img = header.get_data_shape()
    nb_img_h = nb_img[2] #Hauteur

    for sl in range(0,nb_img_h):
            slice_h = img_data[:, :, sl]
            #Sobel
            sx = ndimage.sobel(slice_h, axis=0, mode='constant')
            sy = ndimage.sobel(slice_h, axis=1, mode='constant')
            sobel_h = np.hypot(sx, sy)

            img_sobel_data[:, :, sl] = sobel_h #Change the image slice to the sobel one
# Save Sobel:
nib.save(img_sobel,imSobel_path)

뭐가 문제 야 ? 우리는 파이썬에서 다른 하나의 이미지 슬라이스를 대체 할 수 있습니까? 이 문제를 해결하기위한 트릭이 있습니까?

감사합니다 !

편집 : OK 내가 조금 더 얻을 왜 그렇게 쉽게 taht를 수행 할 수 없습니다 나는 NIFTI 이미지의 조각을 추출을 필터링,하지만 난 NIFTI 이미지 자체를 변경하지 않은! 지금 내 질문은 그래서 어떻게 img_sobel.get_fdata에서 NIFTI 이미지의 get ()을 변경하려면?

베랄 Homaidan :

당신은하지 않았다 단순히 때문에 제대로 아핀 및 헤더로, 당신의 img_sobel_data 저장 이 Nifti 이미지 저장하려는 경우, 당신은 헤더와 저장하기 전에 아핀 제공해야 img_sobel = nib.Nifti1Image(img_sobel_data, affine=img_sobel_affine, header=header)당신이 CV2 라이브러리를 사용하여 다른 형식의 이미지를 저장할 수 있습니다 그렇지 않으면 cv2.imwrite이미지를 저장을 JPG 또는 PNG 확장한다.

#======================================
# Importing Necessary Libs
#======================================
import nibabel as nib
import numpy as np 
from scipy import ndimage, misc
import matplotlib.pyplot as plt
#==============================
img  = nib.load(Nifti_img_path)
img_sobel  = nib.load(Nifti_img_sobel_path)
#==============================
if True: 
    # Name the interested data  
    img_data = img.get_fdata()
    img_sobel_data = img_sobel.get_fdata()
    img_sobel_affine = img_sobel.affine
    header = img.header
    nb_img = header.get_data_shape()
    nb_img_h = nb_img[2] #Hauteur

    for sl in range(0,nb_img_h):
            slice_h = img_data[:, :, sl]
            #Sobel
            sx = ndimage.sobel(slice_h, axis=0, mode='constant')
            sy = ndimage.sobel(slice_h, axis=1, mode='constant')
            sobel_h = np.hypot(sx, sy)

            img_sobel_data[:, :, sl] = sobel_h #Change the image slice to the sobel one
# Save Sobel:
img_sobel = nib.Nifti1Image(img_sobel_data, affine=img_sobel_affine, header=header)
nib.save(img_sobel,imSobel_path)
#==============================

추천

출처http://43.154.161.224:23101/article/api/json?id=21580&siteId=1