cod*_*nza 4 matlab image image-processing python-3.x deep-learning
我目前正在尝试将图像从.mat文件转换为从该站点下载的.jpg文件 - BrainTumorDataset。目录中包含的所有文件都是.mat文件,现在我想通过python将所有文件转换为.jpg格式,以便通过CNN制作一个项目(使用深度神经网络的脑肿瘤分类)。我在谷歌搜索但后来我没有从那里得到任何东西,只有一些关于如何在 python 中加载 .mat 文件的主题,但这也没有帮助我。我在 StackOverflow 中找到了一个答案,但这不适用于这个数据集,而且答案是在 python 中加载 .mat 图像,但我想将.mat图像转换为.jpg 格式。
我设法转换了一个图像,使用循环来转换所有图像。
请阅读评论。
import matplotlib.pyplot as plt
import numpy as np
import h5py
from PIL import Image
#reading v 7.3 mat file in python
#/sf/ask/1212181631/
filepath = '1.mat';
f = h5py.File(filepath, 'r') #Open mat file for reading
#In MATLAB the data is arranged as follows:
#cjdata is a MATLAB struct
#cjdata.image is a matrix of type int16
#Before update: read only image data.
####################################################################
#Read cjdata struct, get image member and convert numpy ndarray of type float
#image = np.array(f['cjdata'].get('image')).astype(np.float64) #In MATLAB: image = cjdata.image
#f.close()
####################################################################
#Update: Read all elements of cjdata struct
####################################################################
#Read cjdata struct
cjdata = f['cjdata'] #<HDF5 group "/cjdata" (5 members)>
# In MATLAB cjdata =
# struct with fields:
# label: 1
# PID: '100360'
# image: [512×512 int16]
# tumorBorder: [38×1 double]
# tumorMask: [512×512 logical]
#get image member and convert numpy ndarray of type float
image = np.array(cjdata.get('image')).astype(np.float64) #In MATLAB: image = cjdata.image
label = cjdata.get('label')[0,0] #Use [0,0] indexing in order to convert lable to scalar
PID = cjdata.get('PID') # <HDF5 dataset "PID": shape (6, 1), type "<u2">
PID = ''.join(chr(c) for c in PID) #Convert to string /sf/ask/842541311/
tumorBorder = np.array(cjdata.get('tumorBorder'))[0] #Use [0] indexing - convert from 2D array to 1D array.
tumorMask = np.array(cjdata.get('tumorMask'))
f.close()
####################################################################
#Convert image to uint8 (before saving as jpeg - jpeg doesn't support int16 format).
#Use simple linear conversion: subtract minimum, and divide by range.
#Note: the conversion is not optimal - you should find a better way.
#Multiply by 255 to set values in uint8 range [0, 255], and covert to type uint8.
hi = np.max(image)
lo = np.min(image)
image = (((image - lo)/(hi-lo))*255).astype(np.uint8)
#Save as jpeg
#/sf/ask/63193301/
im = Image.fromarray(image)
im.save("1.jpg")
#Display image for testing
imgplot = plt.imshow(image)
plt.show()
Run Code Online (Sandbox Code Playgroud)
注意:
每个mat文件都包含一个名为cjdata.
cjdata 结构的字段:
cjdata =
struct with fields:
label: 1
PID: '100360'
image: [512×512 int16]
tumorBorder: [38×1 double]
tumorMask: [512×512 logical]
Run Code Online (Sandbox Code Playgroud)
将图像转换为 时jpeg,您会丢失信息...
| 归档时间: |
|
| 查看次数: |
3345 次 |
| 最近记录: |