簡體   English   中英

將.nrrd 分段轉換為帶有參考卷的 Nifti 卷

[英]Converting .nrrd Segmentation to Nifti Volume with reference volume

我有 200 多個具有匹配分段的 CT 卷文件。 卷為 .nrrd 格式,分段為 seg.nrrd 格式。 我需要這兩種 as.nii.gz 格式,我想編寫從一種格式到另一種格式的轉換腳本。

關於卷,一切都很簡單,使用sitk:

將 SimpleITK 導入為 sitk

img = sitk.ReadImage(“your_image.nrrd”) sitk.WriteImage(img, “your_image.nii.gz”)

我也對分段做了同樣的事情,乍一看效果很好。 但現在的問題是分段不再注冊到卷中。 圖像尺寸和圖像原點不再相同,因此我無法處理轉換后的圖像。

當我使用 3D-Slicer 執行以下手動步驟時,也會發生同樣的情況: 1. 將 .seg.nrrd 文件加載到 Slicer 作為分段 2. 將分段保存為 .nrrd 文件而不是 seg.nrrd 3. 導入 .nrrd 文件as Volume 並將分割保存為.nii.gz

但是我想出了一種在保留所有維度的同時手動轉換數據類型的方法: 1. 導入卷以及相應的分段 (.seg.nrrd) 2. 將分段導出到標簽圖,並將參考卷設置為我的對應卷3.將Labelmap另存為nii.gz(4.不確定我的項目是否需要該步驟:將Labelmap轉換為標量並安全為nii.gz)

在這兩種情況下 3. 和 4. 我有一個具有匹配尺寸的 nii.gz 文件。 但因為我有 200 多卷,所以我需要編寫腳本。 但到目前為止我還沒有發現任何東西。 你有什么想法? 謝謝!

我相信您可以為此使用TorchIO中的Resample轉換:

import torchio as tio

# Fill these two lists
ct_paths = []
seg_paths = []

for ct_path, seg_path in zip(ct_paths, seg_paths):
    image = tio.LabelMap(seg_path)
    transform = tio.Resample(ct_path)
    transformed = transform(image)
    out_path = seg_path.replace('.seg', '_registered')
    transformed.save(out_path)

如果您的對具有相同的間距和方向,這將簡單地填充您的分段,以便原點和形狀是連貫的。

免責聲明:我是 TorchIO 的主要開發者。

我認為我們必須將 label.nrrd 轉換為參考圖像,例如具有 FTITI 或 nrrd 格式的 CT 或 MRI 圖像。 關鍵字是使用一個SimpleITK function,TransformPhysicalPointToIndex,將label.nrrd的原點轉換為圖像空間中的相關索引。 希望下面的demo可以幫到你

roi_data = sitk.GetArrayFromImage(roi_image)
start_point = ref_image.TransformPhysicalPointToIndex(roi_image.GetOrigin())
  
new_roi_array = np.zeros(ref_image.GetSize())
new_roi_array[start_point[0]: start_point[0] + roi_image.GetSize()[0], 
              start_point[1]: start_point[1] + roi_image.GetSize()[1], 
              start_point[2]: start_point[2] + roi_image.GetSize()[2]
              ] = roi_data
  
new_roi_image = sitk.GetImageFromArray(new_roi_array)
new_roi_image.CopyInformation(ref_image)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM