将SAR图像垫转换为csv图像

时间:2016-07-22 21:12:11

标签: image matlab image-processing

我有一张SAR图像垫文件,图像大小为512x512x8。我需要将mat文件转换为8个单独的csv格式文件。每个csv格式文件的输出大小应为512x512。

我怎么能隐藏图像格式?

1 个答案:

答案 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);