我有一张SAR图像垫文件,图像大小为512x512x8。我需要将mat文件转换为8个单独的csv格式文件。每个csv格式文件的输出大小应为512x512。
我怎么能隐藏图像格式?
答案 0 :(得分:0)
我认为要写出的3D数组是复值的。这是一个简单的函数,它将3D复杂数组的每个切片写入两个CSV文件,用于实数和虚数组件,完全精确(即大量的小数位)。
function complex2csv(basename, arr)
%COMPLEX2CSV writes the slices of a 3D complex array to two CSV files each.
%
% COMPLEX2CSV(BASENAME, ARR) for a string BASENAME and 3D complex array ARR
% writes each 3D slice of ARR to two ASCII comma-separated value (CSV) files,
% one for the real and one for the imaginary component.
%
% The format for file names is: '<BASENAME>-<slice number>-<REAL or IMAG>.csv'.
%
% If ISREAL(ARR) is true, the second set of files (for imaginary
% components) will not be created, since it would be filled with zeros.
dlmwrapper = @(filename, data) dlmwrite(filename, ...
data, ...
'precision', '%0.30g');
for i = 1 : size(arr, 3)
dlmwrapper(sprintf('%s-%d-REAL.csv', basename, i), real(arr(:, :, i)));
% Only write imaginary if it is there.
if ~isreal(arr)
dlmwrapper(sprintf('%s-%d-IMAG.csv', basename, i), imag(arr(:, :, i)));
end
end
您可以按如下方式测试:
>> testData = randn(512, 512, 8) + 1j*randn(512, 512, 8);
>> complex2csv('test-image', testData)
这会发出16个CSV文件,每个 8.3 MB,共计132.8 MB。 (原始二进制数组只有32 MB - 数字ASCII对于磁盘空间来说是残酷的。)
由于打印了所有小数位,您应该能够dlmread
这样的文本文件并获得原始数据的精确副本(对于任何数据存档系统来说都是一个加号)。
如果你有一个MAT数据文件,这是我如何转换它。假设MAT包含一个名为IMAGE
的变量。
data = load('my-mat-file.mat'); % data is a struct
complex2csv('my-mat-file', data.IMAGE);