当前位置:网站首页>ITK learning notes (VII) the position of ITK rotation direction remains unchanged
ITK learning notes (VII) the position of ITK rotation direction remains unchanged
2022-07-03 23:50:00 【juluwangriyue】
# -*- coding : UTF-8 -*-
# @file : resample_change_direction.py
# @Time : 2022-02-14 16:19
# @Author : wmz
import os
import numpy as np
import SimpleITK as sitk
def getFiles(path, suffix):
return [os.path.join(root, file) for root, dirs, files in os.walk(path) for file in files if file.endswith(suffix)]
def resampleVolume(outspacing, vol):
""" Resample volume data to the specified spacing size \n paras: outpacing: designated spacing, for example [1,1,1] vol:sitk Read the image Information , Here is volume data \n return: Resampled data """
outsize = [0, 0, 0]
# Read the file size and spacing Information
inputsize = vol.GetSize()
inputspacing = vol.GetSpacing()
transform = sitk.Transform()
transform.SetIdentity()
# Calculation changes spacing After size, Use physical dimensions / Voxel size
outsize[0] = round(inputsize[0] * inputspacing[0] / outspacing[0])
outsize[1] = round(inputsize[1] * inputspacing[1] / outspacing[1])
outsize[2] = round(inputsize[2] * inputspacing[2] / outspacing[2])
# Set some parameters of resampling
resampler = sitk.ResampleImageFilter()
resampler.SetTransform(transform)
resampler.SetInterpolator(sitk.sitkLinear)
resampler.SetOutputOrigin(vol.GetOrigin())
resampler.SetOutputSpacing(outspacing)
resampler.SetOutputDirection(vol.GetDirection())
resampler.SetSize(outsize)
newvol = resampler.Execute(vol)
return newvol
def resample_direction(itk_img, direction=tuple([1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0])):
""" Resample volume data to the specified spacing size \n paras: outpacing: designated spacing, for example [1,1,1] vol:sitk Read the image Information , Here is volume data \n return: Resampled data """
outsize = [0, 0, 0]
# Read the file size and spacing Information
img_size = itk_img.GetSize()
spacing = itk_img.GetSpacing()
transform = sitk.Transform()
transform.SetIdentity()
# Calculation changes spacing After size, Use physical dimensions / Voxel size
outsize[0] = round(img_size[0])
outsize[1] = round(img_size[1])
outsize[2] = round(img_size[2])
origin = itk_img.GetOrigin()
new_origin = tuple([origin[0] - spacing[0] * img_size[0], origin[1] - spacing[1] * img_size[1], origin[2]])
# Set some parameters of resampling
resampler = sitk.ResampleImageFilter()
# resampler.SetReferenceImage(itk_img)
resampler.SetTransform(transform)
resampler.SetInterpolator(sitk.sitkLinear)
resampler.SetSize(outsize)
resampler.SetOutputOrigin(new_origin)
resampler.SetOutputDirection(direction)
resampler.SetOutputSpacing(spacing)
new_img = resampler.Execute(itk_img)
out_arr = sitk.GetArrayFromImage(new_img)
return new_img
def resample_image(itk_image, out_spacing,out_direction, is_label=False):
original_size = itk_image.GetSize()
original_spacing = itk_image.GetSpacing()
out_size = [
int(np.round(original_size[0] * (original_spacing[0] / out_spacing[0]))),
int(np.round(original_size[1] * (original_spacing[1] / out_spacing[1]))),
int(np.round(original_size[2] * (original_spacing[2] / out_spacing[2])))
]
resample = sitk.ResampleImageFilter()
resample.SetOutputSpacing(out_spacing)
resample.SetSize(out_size)
resample.SetOutputDirection(out_direction)
resample.SetOutputOrigin(itk_image.GetOrigin())
if is_label:
resample.SetDefaultPixelValue(0) # Fill in the value where there is no image
resample.SetInterpolator(sitk.sitkNearestNeighbor)
else:
resample.SetDefaultPixelValue(-10) # -10 I adjusted the window width out of the window
resample.SetInterpolator(sitk.sitkBSpline)
return resample.Execute(itk_image)
if __name__ == '__main__':
img_fath = r"D:\Dataset\landmark\Data_train_scaled_2"
filelist = getFiles(img_fath, "nii.gz")
dst_path = r"D:\Dataset\landmark\resample_direction_train"
for imgfile in filelist:
org_img = sitk.Image(sitk.ReadImage(imgfile))
direct = org_img.GetDirection()
direction = tuple([1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0])
spacing = org_img.GetSpacing()
img_size = org_img.GetSize()
img_arr = sitk.GetArrayFromImage(org_img)
out_img = resample_direction(org_img, direction)
# out_img = resample_image(org_img, spacing, direction)
# out_img = sitk.GetImageFromArray(sitk.GetArrayFromImage(org_img))
# out_arr = sitk.GetArrayFromImage(out_img)
# out_arr = np.flip(out_arr, [1, 2])
# out_img = sitk.GetImageFromArray(out_arr)
# # setup other image characteristics
# origin = org_img.GetOrigin()
# new_origin = tuple([origin[0] - spacing[0] * img_size[0], origin[1] - spacing[1] * img_size[1], origin[2]])
# # out_img.SetOrigin(org_img.GetOrigin())
# out_img.SetOrigin(new_origin)
# out_img.SetSpacing(org_img.GetSpacing())
# set to RAI
out_img.SetDirection(tuple([1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]))
out_arr = sitk.GetArrayFromImage(out_img)
dst_file = os.path.join(dst_path, imgfile.rsplit("\\")[-1])
sitk.WriteImage(out_img, dst_file)
print("saved file: ", dst_file)
边栏推荐
- Pytorch learning notes 5: model creation
- 股票开户最低佣金炒股开户免费,网上开户安全吗
- Tencent interview: can you pour water?
- Double efficiency. Six easy-to-use pychar plug-ins are recommended
- "Learning notes" recursive & recursive
- Idea integrates Microsoft TFs plug-in
- How to solve the "safe startup function prevents the operating system from starting" prompt when installing windows10 on parallel desktop?
- D28:maximum sum (maximum sum, translation)
- NLP pre training technology development
- Distributed transaction -- middleware of TCC -- selection / comparison
猜你喜欢

How to write a good title of 10w+?

2022.02.14

Ningde times and BYD have refuted rumors one after another. Why does someone always want to harm domestic brands?

NLP Chinese corpus project: large scale Chinese natural language processing corpus

JDBC Technology

The difference between single power amplifier and dual power amplifier
![[MySQL] classification of multi table queries](/img/96/2e51ae8d52ea8184945e0540ce18f5.jpg)
[MySQL] classification of multi table queries

EPF: a fuzzy testing framework for network protocols based on evolution, protocol awareness and coverage guidance

2022 Guangdong Provincial Safety Officer a certificate third batch (main person in charge) simulated examination and Guangdong Provincial Safety Officer a certificate third batch (main person in charg

QT creator source code learning note 05, how does the menu bar realize plug-in?
随机推荐
Kubedl hostnetwork: accelerating the efficiency of distributed training communication
Idea integrates Microsoft TFs plug-in
Enter MySQL in docker container by command under Linux
Pyqt5 sensitive word detection tool production, operator's Gospel
Private project practice sharing populate joint query in mongoose makes the template unable to render - solve the error message: syntaxerror: unexpected token r in JSON at
C # basic knowledge (3)
Apple released a supplementary update to MacOS Catalina 10.15.5, which mainly fixes security vulnerabilities
Sword finger offer day 4 (Sword finger offer 03. duplicate numbers in the array, sword finger offer 53 - I. find the number I in the sorted array, and the missing numbers in sword finger offer 53 - ii
2020.2.14
How to prevent malicious crawling of information by one-to-one live broadcast source server
Briefly understand the operation mode of developing NFT platform
Yyds dry goods inventory three JS source code interpretation - getobjectbyproperty method
C # basic knowledge (1)
Make small tip
How to understand the gain bandwidth product operational amplifier gain
Pandaoxi's video
D25:sequence search (sequence search, translation + problem solving)
Pytorch learning notes 5: model creation
China standard gas market prospect investment and development feasibility study report 2022-2028
Les sociétés de valeurs mobilières dont la Commission d'ouverture d'un compte d'actions est la plus faible ont ce que tout le monde recommande.