Scipy -- 科学计算库

发布时间 2023-07-01 18:12:54作者: Ray-Z

Scipy -- 科学计算库

目录:

  • 文件输入/输出: scipy.io
  • 特殊函数: scipy.special
  • 线性代数运算: scipy.linalg
  • 插值: scipy.interpolate
  • 优化和拟合: scipy.optimize
  • 统计和随机数: scipy.stats
  • 数值积分: scipy.integrate
  • 快速傅里叶变换: scipy.fftpack
  • 信号处理: scipy.signal
  • 图像处理: scipy.ndimage

图像处理:scipy.ndimage

scipy.ndimage 提供将 n 维数组作为图像进行操作。

图像的几何变换


rotate -- 旋转
scipy.ndimage.rotate(input, angle, axes=(1, 0), reshape=True, output=None, order=3, mode='constant', cval=0.0, prefilter=True)

input :array_like(数组)必要

angle :float(浮点型)必要 旋转角度,单位是度。

axes :tuple of 2 ints, optional(2个整数的元组,可选 ) 定义旋转平面的两个轴。默认是前两个轴。

reshape :bool, optional(布尔型,可选 ) 如果 reshape 为真,输出的形状会被调整,使输入的数组完全包含在输出中。默认为 True 。

output :array or dtype, optional(数组或者类型,可选 ) 用于放置输出的数组,或者返回数组的dtype。默认情况下,将创建一个与输入相同dtype的数组。

order :int, optional(整型,可选 ) ,插值,默认=3,在0-5之间

mode :{‘reflect’, ‘grid-mirror’, ‘constant’, ‘grid-constant’, ‘nearest’, ‘mirror’, ‘grid-wrap’, ‘wrap’}, optional 模式,可选 默认值 = ‘constant’

‘reflect’ (d c b a | a b c d | d c b a)

输入通过对最后一个像素的边缘进行反射来扩展。这种模式有时也被称为半取样对称模式。

‘grid-mirror’

这是 "反映 "的同义词。

‘constant’ (k k k k | a b c d | k k k k)

输入的扩展是通过用相同的常量值填充边缘以外的所有数值,由cval参数定义。在输入的边缘之外不进行插值。

‘grid-constant’ (k k k k | a b c d | k k k k)

输入的扩展是通过用相同的常量值填充边缘以外的所有数值,由cval参数定义。在输入范围之外的样本也会发生插值。

‘nearest’ (a a a a | a b c d | d d d d)

输入是通过复制最后一个像素来扩展的。

‘mirror’ (d c b | a b c d | c b a)

输入通过对最后一个像素的中心进行反射来扩展。这种模式有时也被称为全样本对称模式。

‘grid-wrap’ (a b c d | a b c d | a b c d)

输入通过环绕到相反的边缘来扩展。

‘wrap’ (d b c d | a b c d | b c a b)

输入通过环绕到对面的边缘来扩展,但其方式是使最后一个点和初始点完全重叠。在这种情况下,并不能很好地定义在重叠点上选择哪个样本。

cval :scalar, optional(标量,可选 ) 如果模式为 "constant",则对输入的边缘进行填充的数值。默认为 0.0 。

prefilter :bool, optional(布尔型,可选 ) 决定输入数组在插值前是否用 splitine_filter 进行预过滤。默认为 True,如果顺序 >1,将创建一个临时的 float64 数组的过滤值。如果设置为 False,如果顺序>1,输出将略微模糊,除非输入是预过滤的,即它是在原始输入上调用 splitine_filter 的结果。


shift -- 移位
scipy.ndimage.shift(input, shift, output=None, order=3, mode='constant', cval=0.0, prefilter=True)

input :array_like(数组)必要

shift :float or sequence(浮点型或序列)必要

output :array or dtype, optional(数组或者类型,可选 ) 用于放置输出的数组,或者返回数组的dtype。默认情况下,将创建一个与输入相同dtype的数组。

order :int, optional(整型,可选 ) ,插值,默认=3,在0-5之间

mode :{‘reflect’, ‘grid-mirror’, ‘constant’, ‘grid-constant’, ‘nearest’, ‘mirror’, ‘grid-wrap’, ‘wrap’}, optional 模式,可选 默认值 = ‘constant’

cval :scalar, optional(标量,可选 ) 如果模式为 "constant",则对输入的边缘进行填充的数值。默认为 0.0 。

prefilter :bool, optional(布尔型,可选 ) 决定输入数组在插值前是否用 splitine_filter 进行预过滤。默认为 True,如果顺序 >1,将创建一个临时的 float64 数组的过滤值。如果设置为 False,如果顺序>1,输出将略微模糊,除非输入是预过滤的,即它是在原始输入上调用 splitine_filter 的结果。


zoom -- 缩放
scipy.ndimage.zoom(input, zoom, output=None, order=3, mode='constant', cval=0.0, prefilter=True, *, grid_mode=False)

input :array_like(数组)必要

zoom :float or sequence(浮点型或序列)必要 沿着坐标轴的缩放系数。如果是一个浮点,那么缩放对每个轴都是一样的。如果是一个序列,缩放应该为每个轴包含一个值。

output :array or dtype, optional(数组或者类型,可选 ) 用于放置输出的数组,或者返回数组的dtype。默认情况下,将创建一个与输入相同dtype的数组。

order :int, optional(整型,可选 ) ,插值,默认=3,在0-5之间

mode :{‘reflect’, ‘grid-mirror’, ‘constant’, ‘grid-constant’, ‘nearest’, ‘mirror’, ‘grid-wrap’, ‘wrap’}, optional 模式,可选 默认值 = ‘constant’

cval :scalar, optional(标量,可选 ) 如果模式为 "constant",则对输入的边缘进行填充的数值。默认为 0.0 。

prefilter :bool, optional(布尔型,可选 ) 决定输入数组在插值前是否用 splitine_filter 进行预过滤。默认为 True,如果顺序 >1,将创建一个临时的 float64 数组的过滤值。如果设置为 False,如果顺序>1,输出将略微模糊,除非输入是预过滤的,即它是在原始输入上调用 splitine_filter 的结果。

grid_mode :bool, optional(布尔型,可选 ) 如果是 False ,那么从像素中心的距离就会被放大。否则,将使用包括整个像素范围在内的距离。例如,当 grid_mode 为 False 时,一个长度为 5 的 1d 信号被认为是长度为4,但当 grid_mode 为 True 时,长度为5。请看下面的视觉图示:

image-20230701172622011

上图中箭头的起点对应于每种模式下的坐标位置0。


Nifti1Image
class nibabel.nifti1.Nifti1Image(dataobj, affine, header=None, extra=None, file_map=None, dtype=None)

dataobj :object 包含图像数据的对象。它应该是一些从 np.asanyarray 返回数组的对象。它应该有一个形状属性或属性

affine :None or (4,4) array-like 赋予体素坐标和世界坐标之间关系的同质仿射。affine 也可以是None。在这种情况下,obj.affine 也会返回 None ,而写入磁盘的 affine 将取决于文件格式。

header :None or mapping or header instance, optional(无或映射或标题实例,可选 ) 该图像格式的元数据

extra :None or mapping, optional(无或映射,可选 ) 与图像相关的元数据,不能存储在该图像类型的元数据中。

file_map :mapping, optional(映射,可选 ) 提供该图像格式的文件信息的映射


import nibabel as nib
from scipy import ndimage

img = nib.load('路径')  # 载入数据,nii.gz 格式的图片
data = img.get_fdata()  # 可以转为 float 为 dtype 的 ndarray 类型的 object
affine = img.affine   # 图像进行仿射变换

# 将图像数据旋转
rotated_data = ndimage.rotate(data, angle=30, axes=(0, 1), reshape=False) # angle 是角度 °

# 将图像数据移位
shifted_data = ndimage.shift(data, (10, 10, 10)) # 三维数据,shift要保证与输入维度相同

# 将图像数据缩放
zoomed_data = ndimage.zoom(data, 0.5)  # 缩放倍数


# 创建旋转后的NIfTI图像对象
fin_img = nib.Nifti1Image(XXX_data, affine)

# 保存旋转后的图像
output_path = '路径/fin_img.nii.gz'  # 指定保存的文件路径和名称
os.makedirs(os.path.dirname(output_path), exist_ok=True)  # 创建保存路径的目录(如果不存在)
# 保存旋转后的图像到新的NIfTI文件
nib.save(fin_img, output_path)