2016-07-22 37 views
1

我有一個SAR圖像mat文件,圖像大小爲512x512x8。我需要將mat文件轉換爲8個獨立的csv格式文件。每個csv格式文件的輸出大小應該是512x512。將SAR圖像mat轉換爲csv圖像

我怎樣才能隱藏圖像格式?

+0

最終結果應該是512x512 cvs圖片 – Alice

+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); 
+0

謝謝。這個答案非常接近理想的結果。但我的3D陣列不是一個複雜的值。我只是想分解第三個方向,即8 – Alice

+0

給出的函數'complex2csv'將不會爲虛數成分創建文件,如果輸入是真實的,那麼您可以完全按照演示使用它。 –

+0

兩個probelm。首先,運行中存在錯誤。未定義的函數'iscomplex'用於輸入'double'類型的參數。 – Alice