Matlab将图像数据写入二进制文件

3
我不太擅长Matlab,需要帮助处理以下代码。
我有一组图像数据,想将其与文件签名一起保存到二进制文件中,以显示数据在文件中的保存方式。
例如,假设我有一张图像被分成4行4列,这样图像就由16个较小的图像组成。这些较小的图像的图像数据以以下结构保存:
data = struct('imageTitleFinal', {}, 'imageDataFinal', {});

for rows = 1:numberOfRows
        for columns = 1:numberOfColumns
            data(rows,columns).imageTitleFinal = currentTile;
            data(rows,columns).imageDataFinal = currentStructure(rows,columns).imageData;
        end
end

我希望能够将每个小图像的图像数据写入二进制文件,并能够区分文件中不同的图像数据集。非常感谢任何帮助。


我也想指出,我已经在循环内尝试了以下代码: fid = fopen('image.vfi', 'a'); fwrite(fid, data(rows,columns).imageDataFinal , 'integer*4'); fclose(fid);但我不确定以后从文件中读取时该如何区分图像数据集,或者该如何解释文件内容。 - kushaldsouza
你为什么想将它写成二进制文件呢?我能想到两个原因:1. 用于物理存储 - 这种情况下,你可以使用load/save。2. 用于与另一个工具一起使用 - 这种情况下,你需要找出这个工具期望的数据格式,然后相应地进行编写。 - Ashish Uthama
@Ashih 我将在安卓设备上使用这些数据。我会尝试你下面建议的方法。谢谢。 - kushaldsouza
1个回答

1
如果你不得不写入二进制文件,出于任何原因,你可以为这些数据创建自己的“头部”。对于每个“小图像”,写入固定数量的元数据,这些数据应该包含所有帮助你解析图像数据的信息。一个简单的方法是:
- 我假设你的“标题”是一个字符数组 - 我假设你的数据文件是一个双精度数组 - “|”只是一个分隔符。 |一个uint32,表示标题中字符的数量|将你的标题数据写成字符|一个uint32,表示数据中双精度数的数量|将所有数据写成双精度数|
代码示例:
fopen in append mode
fwrite(fid, numel(title), 'uint32');
fwrite(fid, title,'char'); %assuming ASCII char set
fwrite(fid, numel(data), 'uint32');
fwrite(fid, data, 'double);

如果你的“小图像”大小不统一,可以考虑添加更多的“元数据”,例如数据的大小。


@ Ashish 谢谢你的建议,我已经按照上述方式实现了它,并且它运行良好。 - kushaldsouza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接