如何在Python中以Python语法读取保存的Matlab三维矩阵(Dicom矩阵)?
我在Matlab中保存了一个坐标为(row=288,col=288,slice(z)=266)的3D矩阵。如何在Python中以Python语法读取保存的Matlab三维矩阵(Dicom矩阵)?,python,matlab,numpy,scipy,dicom,Python,Matlab,Numpy,Scipy,Dicom,我在Matlab中保存了一个坐标为(row=288,col=288,slice(z)=266)的3D矩阵。 现在我想用Python加载它。不幸的是,在加载之后,它在Python中是(row=288,col=266,slice(z)=288)。 考虑到这一点,Matlab语法表示大小:(第3维的行、列、切片)Python语法表示大小:(第3维的切片、行、列) 例如,在下面的代码中,当我想将变量A作为数组时,它是(行=288,列=266,切片(z)=288): 从数学导入sqrt 从浏览导入数据 将
现在我想用Python加载它。不幸的是,在加载之后,它在Python中是(row=288,col=266,slice(z)=288)。
考虑到这一点,Matlab语法表示大小:(第3维的行、列、切片)Python语法表示大小:(第3维的切片、行、列) 例如,在下面的代码中,当我想将变量A作为数组时,它是(行=288,列=266,切片(z)=288):
从数学导入sqrt
从浏览导入数据
将matplotlib.pyplot作为plt导入
进口cv2
导入pydicom
将scipy.io作为sio导入
导入操作系统
将numpy作为np导入
对于中的根目录、目录和文件
os.walk('G:\PCodes\Other_code'):
matfiles=[[uu表示文件中的uu,如果u.endswith('.mat')]
对于matfiles中的matfile:#matfile:'Final_Volume.mat'
Patient_All_Info=sio.loadmat(os.path.join(root,matfile))#Patient_All_Info:{dict}
患者所有信息项()
A=患者所有信息[“最终体积”]#A:{ndarray}:(288266288)-它不是(行=288,列=288,切片(z)=266)坐标。
形状(A)#S:(288288266)?
dcm_image=pydicom.read_文件('A'))
image=dcm\u image.pixel\u数组
plt.imshow(图像,cmap='gray')
plt.show()
如何在Python中加载Matlab保存的3D矩阵(Dicom矩阵)?在倍频程会话中:
>> x = reshape(1:24,4,3,2);
>> save -v7 'test.mat' x
对于Python,loadmat
保留形状和F
顺序:
In [200]: data = loadmat('test.mat')
In [208]: data['x'].shape
Out[208]: (4, 3, 2)
In [209]: data['x'].ravel(order='F')
Out[209]:
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.,
14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.])
转置将产生一个(2,3,4)数组
transpose
可以采用顺序参数,例如data['x']。transpose(2,0,1)
(我不熟悉
dicom
,但希望这能说明loadmat
如何处理来自MATLAB的3d数组。)MATLAB是F阶,最外层的最后一个维度。loadmat
返回的内容可能需要某种转置(轴交换)。我必须用八度音阶的小例子来演示。
In [200]: data = loadmat('test.mat')
In [208]: data['x'].shape
Out[208]: (4, 3, 2)
In [209]: data['x'].ravel(order='F')
Out[209]:
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.,
14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.])
In [210]: data['x'].T
Out[210]:
array([[[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.]],
[[13., 14., 15., 16.],
[17., 18., 19., 20.],
[21., 22., 23., 24.]]])