我们经常会把图像的一些像素值读取出来进行操作,保存在.npy文件或者h5文件中,这样,我们的数据就是一个二维的数据,例如是(512*512).那么我们想要给它增加一个维度变成(1,512,512),怎么操作呢?
如果保存的是像素值需要进行np.asarray()操作
import h5py
# 定义文件路径
file_path = '/kaggle/input/h5py-mr/train/BAI_SU_PING_40100000_0008_0008_7.h5'
# 打开HDF5文件
with h5py.File(file_path, 'r') as hf:
# 读取LOW_ENERGY数据集
low_energy_data = hf['LOW_ENERGY'][:] # 这里[:]将数据加载到numpy数组中
label=hf['label'][()]
# 现在low_energy_data中存储了LOW_ENERGY数据集的值,你可以对它进行操作或查看它的内容
print(low_energy_data.shape,label)
## 读取一张图片,并对其进行可视化
im = low_energy_data
imarray = np.asarray(im) / 255.0
plt.figure()
plt.imshow(imarray,cmap='gray')
plt.show()
这里举个例子生成一个(512,512)的数组:
import numpy as np
# 生成随机512x512的数组
imarray = np.random.rand(512, 512)#假如这是我们的数据
imarray.shape
#输出结果为(512,512)
这时候我们把它变成(1,512,512)或者(3,512,512)
# 将图像数组的形状变为 (1, 512, 512)
img_ = np.expand_dims(imarray, axis=0)
print(img_.shape)
# 将形状为 (1,512, 512) 的数组变为 (3, 512, 512),三个通道一样
img_3_channels = np.repeat(img_, 3, axis=0)
# 确认新形状
print(img_3_channels.shape)
#输出结果为(1, 512, 5120) (3, 512, 512)
这样就变成了(C,H,W)格式了,可以传入到深度学习的模型中了,
data_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize([0.485], [0.229]) # 假设你的数据只有一个通道,因此使用单个值进行归一化
])
# [C, H, W]
img_tensor = data_transform(img_3_channels )
然后就可以传入到深度学习pytorch中啦