当前位置:网站首页>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)
边栏推荐
- Ningde times and BYD have refuted rumors one after another. Why does someone always want to harm domestic brands?
- Iclr2022: how does AI recognize "things I haven't seen"?
- What are the securities companies with the lowest Commission for stock account opening? Would you recommend it? Is it safe to open an account on your mobile phone
- NLP Chinese corpus project: large scale Chinese natural language processing corpus
- "Learning notes" recursive & recursive
- China standard gas market prospect investment and development feasibility study report 2022-2028
- 炒股开户佣金优惠怎么才能获得,网上开户安全吗
- Pyqt5 sensitive word detection tool production, operator's Gospel
- No qualifying bean of type ‘com. netflix. discovery. AbstractDiscoveryClientOptionalArgs<?>‘ available
- Briefly understand the operation mode of developing NFT platform
猜你喜欢

2022.02.13

It is forbidden to splice SQL in code

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

China standard gas market prospect investment and development feasibility study report 2022-2028

QT creator source code learning note 05, how does the menu bar realize plug-in?

Is user authentication really simple

"Learning notes" recursive & recursive

NLP pre training technology development

2022 t elevator repair registration examination and the latest analysis of T elevator repair

leetcode-43. String multiplication
随机推荐
Fluent learning (5) GridView
C # basic knowledge (3)
2022 t elevator repair registration examination and the latest analysis of T elevator repair
[network security] what is emergency response? What indicators should you pay attention to in emergency response?
2022 a special equipment related management (elevator) examination questions and a special equipment related management (elevator) examination contents
股票开户佣金最低的券商有哪些大家推荐一下,手机上开户安全吗
[MySQL] sql99 syntax to realize multi table query
[note] glide process and source code analysis
Gossip about redis source code 83
Alibaba cloud container service differentiation SLO hybrid technology practice
Recursive least square adjustment
2022 free examination questions for hoisting machinery command and hoisting machinery command theory examination
Idea set class header comments
I would like to ask how the top ten securities firms open accounts? Is it safe to open an account online?
Live app source code, jump to links outside the station or jump to pages inside the platform
The difference between single power amplifier and dual power amplifier
Amway by head has this project management tool to improve productivity in a straight line
Double efficiency. Six easy-to-use pychar plug-ins are recommended
SQL data update
Kubedl hostnetwork: accelerating the efficiency of distributed training communication