很多深度学习网络的输入要求为.mat格式,当然也可以直接修改输入数据的代码,比如修改为使用OpenCV读取图片等,但有些网络修改起来比较麻烦,且.mat数据有很多优势,所以部分网络最好还是用默认的.mat格式数据
目录
- 一、.mat格式文件
- 1.1 .mat格式文件是什么
- 1.2 为什么有的深度学习网络要求是.mat个数数据
- 1.2.1 数据组织
- 1.2.2 数据预处理
- 1.2.3 兼容性
- 1.2.4 数据共享
- 二、常见的图片格式
- 2.1 .jpeg
- 2.2 .png
- 2.3 .gif
- 2.4 .psd
- 2.5 .tiff
- 2.6 .bmp
- 2.7 .pcx
- 2.8 .tga
- 2.8 .exif
- 2.10 .fpx
- 2.11 .svg
- 2.12 .CR3
- 三、 转.mat格式代码
- 3.1 修改参数
- 3.2 代码
- 3.3 转换结果
- 3.4 .mat文件中的数据
- 四、总结
一、.mat格式文件
1.1 .mat格式文件是什么
.mat
文件是 MATLAB 的数据存储的标准格式。这种文件是标准的二进制文件,也可以以 ASCII 码的形式保存和加载。.mat
文件的方便之处在于,它可以连同数据的变量名一同保存下来,并且不需要控制数据的存储格式,MATLAB 会自动保存并区分我们所存储的内容。
例如,想在MATLAB 中方便地保存和加载数据,你可以使用 save
命令来生成 .mat
文件。下面是一个具体的例子:
% 创建一个3行3列的矩阵A并保存为.mat文件
A = magic(3);
save("Test.mat","A")
如果你想打开 .mat
文件,可以使用 load
命令。例如:
% 直接导入数据:两种方法
load("Test.mat")
load Test.mat
1.2 为什么有的深度学习网络要求是.mat个数数据
.mat
文件提供了一种方便、高效的方式来存储和共享用于深度学习的数据。
深度学习网络可能会要求使用 .mat
文件格式的数据,主要有以下几个原因:
1.2.1 数据组织
.mat
文件是 MATLAB 的数据存储的标准格式,可以存储多种类型的数据,包括矩阵、图像、音频、文本等。这种格式的文件可以将多个相关的数据集组织在一起,方便进行批量处理和分析。
1.2.2 数据预处理
在深度学习中,数据预处理是一个重要的步骤。.mat
文件可以存储预处理后的数据,例如归一化、标准化、特征提取等处理后的数据。这样,深度学习网络可以直接使用预处理后的数据,无需再进行这些处理步骤。
1.2.3 兼容性
许多深度学习工具和库,如 TensorFlow、Keras、PyTorch 等,都可以读取 .mat
文件中的数据。这意味着,无论你使用哪种深度学习工具或库,都可以方便地使用 .mat
文件中的数据。
1.2.4 数据共享
.mat
文件是一种通用的数据格式,可以在不同的平台和工具之间进行共享。这意味着,如果你的深度学习网络需要使用别人的数据,或者你想分享你的数据给别人,.mat
文件是一个很好的选择。
二、常见的图片格式
2.1 .jpeg
- JPEG:也叫做 JPG 或 JPE 格式,是最常用的一种文件格式,特别适合应用于互联网,可以将图像压缩在很小的储存空间。
2.2 .png
- PNG:PNG 图片支持透明背景,适合制作透明背景的图片,如 logo 等。
2.3 .gif
- GIF:GIF 格式的最大特点是支持动态图片,并且支持透明背景。网络上绝大部分动图、表情包都是 GIF 格式的。
2.4 .psd
- PSD:PSD 格式是 Photoshop 默认的存储格式,适用于存储源文档和工作文件,修改起来比较方便。
2.5 .tiff
- TIFF:TIFF 格式,也叫做或 TIF 格式,可以支持不同颜色模式、路径、透明度、以及通道,是打印文档中最常用的格式。
2.6 .bmp
-
BMP:BMP 格式是 Windows 操作系统中的标准图像文件格式,能够被多种 Windows 应用程序所支持。
.bmp格式图像通常比其他格式图像更大,因为它不采用任何压缩。
由于.bmp格式图像不进行压缩,因此它能保持图像的原始质量。然而,.jpg等格式由于使用了有 损压缩,可能会导致图像质量下降。
.bmp格式图像是一种位图图像,它记录了图像中每一个像素的颜色信息。
2.7 .pcx
- PCX:PCX是一种光栅图像文件格式,用作PC画笔应用程序的本机文件格式。PCX文件的大小更小,因为它们是使用RLE编码压缩的。
2.8 .tga
- TGA:TGA是一种图像文件格式,由美国Truevision公司为其显示卡开发。TGA文件支持256色调色板或全24位的RGB,图像大小最多达64K*64K像素。
2.8 .exif
- EXIF:EXIF是一种图像文件格式,实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等。
2.10 .fpx
- FPX:FPX是一个拥有多重解像度的图像格式,即图像被储存成一系列高低不同的解像度,而这种格式的好处是当图像被放大时仍可保持图像的质量。
2.11 .svg
- SVG:SVG格式文件是可缩放矢量图形文件的缩写,是一种用于在互联网上渲染二维图像的标准图形文件类型。与其他流行的图像文件格式不同,SVG格式文件将图像存储为矢量,这是一种基于数学公式的图形,由点、线、曲线和形状组成。
2.12 .CR3
- CR3:.CR3 文件是佳能相机拍摄的原始图像的文件格式。这是佳能最新的原始格式,它在2018年后推出的大多数专业装备都支持这种格式。CR3格式对专业照片编辑最有用,使他们能够获得未经处理的图像。然后,他们可以使用这些原始信息,随心所欲地对照片进行造型或其他处理。目前只有佳能EOS M50、EOS R、EOS RP这三款相机的记录格式是CR3。
三、 转.mat格式代码
3.1 修改参数
代码具体使用,学者只需要对应修改下面三个地方即可,我给的例子中是将.png格式图片转为.mat格式,如果要转换其它格式的图片,只需要将input_type修改为jpg或者bmp等即可:
3.2 代码
# 转换单个文件夹中的所有图片为mat格式
import sys
import cv2
import os
import numpy as np
from scipy.io import savemat
import time
def findFiles(root_dir, filter_type, reverse=False):
print("Finding files ends with \'" + filter_type + "\' ...")
separator = os.path.sep
paths = []
names = []
files = []
for parent, dirname, filenames in os.walk(root_dir):
for filename in filenames:
if filename.endswith(filter_type):
paths.append(parent + separator)
names.append(filename)
for i in range(paths.__len__()):
files.append(paths[i] + names[i])
print(names.__len__().__str__() + " files have been found.")
paths.sort()
names.sort()
files.sort()
if reverse:
paths.reverse()
names.reverse()
files.reverse()
return paths, names, files
def cvtImgs2MatAndSave(img_dir, file_type, img_key_name, out_path):
paths, names, files = findFiles(img_dir, file_type)
imgs = []
for i in range(len(files)):
tmp_img = cv2.imread(files[i])
imgs.append(tmp_img)
img_width = imgs[0].shape[1]
img_height = imgs[0].shape[0]
num_channel = imgs[0].shape[2]
num_imgs = len(imgs)
print("Target shape:[", num_imgs, img_height, img_width, num_channel, "]")
img_mat = np.zeros([num_imgs, img_height, img_width, num_channel], np.uint8)
for i in range(len(imgs)):
img_mat[i, :, :, :] = imgs[i]
img_dict = {img_key_name: img_mat,
'__header__': 'Matlab MAT-file, Created by Xuhui Zhao on ' + time.ctime(),
'__version__': '1.0',
'__globals__': ''}
savemat(out_path, img_dict)
return img_dict
if __name__ == '__main__':
input_img_dir = "TestImages/SIDD/Visible_Images" # input影像块所在文件夹
input_type = "png" # input影像块文件类型
out_dir = "TestImages/SIDD/mat" # mat文件输出文件夹
# 文件默认名如下(与SIDD一致)
out_input_mat_name = out_dir + "/BenchmarkNoisyBlocksSrgb.mat"
# 如果设置的文件名没有后缀名,再加上
if not (out_input_mat_name.__contains__(".mat") or out_input_mat_name.__contains__(".MAT")):
out_input_mat_name = out_input_mat_name + ".mat"
# mat文件的key name(与SIDD一致)
input_key_name = "BenchmarkNoisyBlocksSrgb"
# 将多个影像文件转换成Mat文件 validation-input
cvtImgs2MatAndSave(input_img_dir, input_type, input_key_name, out_input_mat_name)
3.3 转换结果
3.4 .mat文件中的数据
.mat文件中的数据如下
四、总结
以上讲述了什么是.mat格式文件,以及为什么深度学习网络训练使用.mat格式数据的原因,还科普了一些常见的图片格式,并附上了将png,jpg,bmp,gif,tiff,psd等格式图片转为.mat格式的详细代码。
希望能帮到你,总结不易,多多支持,谢谢!