本文介绍: `.mat` 文件是 MATLAB 的数据存储标准格式。这种文件标准二进制文件,也可以以 ASCII 码的形式保存加载。`.mat` 文件的方便之处在于,它可以连同数据变量名一同保存下来,并且不需要控制数据存储格式,MATLAB 会自动保存并区分我们存储内容

很多深度学习网络输入要求为.mat格式,当然也可以直接修改输入数据代码比如修改使用OpenCV读取图片等,但有些网络修改起来比较麻烦,且.mat数据有很多优势,所以部分网络最好还是用默认的.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

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

  • FPX:FPX是一个拥有多重解像度的图像格式,即图像被储存成一系列高低不同的解像度,而这种格式的好处是当图像被放大时仍可保持图像的质量

2.11 .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格式数据的原因,还科普了一些常见图片格式,并附上了将pngjpg,bmp,gif,tiff,psd等格式图片转为.mat格式的详细代码。

希望能帮到你,总结不易,多多支持,谢谢!

原文地址:https://blog.csdn.net/qq_40280673/article/details/134673874

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_21708.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注