2016-07-22 14 views
1

私はSAR画像マットファイルを持っています。画像のサイズは512x512x8です。私は8つの別々のCSVフォーマットファイルにマットファイルを変換する必要があります。各csv形式ファイルの出力サイズは512x512である必要があります。SAR画像マットをcsv画像に変換する

どのようにイメージフォーマットを変換できますか?

+0

最終結果は512x512でなければなりません。 – Alice

+0

生データは複素数値ですか、実数ですか? –

答えて

0

書き出す3D配列が複素数値であると仮定します。ここでは、実数成分と虚数成分の2つのCSVファイルに3D複素数配列の各スライスを完全精度(小数点以下1桁)で書き込むシンプルな関数を示します。次のように

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) 

これは132.8メガバイトの合計、16個のCSVファイル、 8.3メガバイトを出してくれる。

小数点以下の桁数はすべて印刷されるため、このようなテキストファイルをdlmreadにすることができます(元のバイナリ配列は32 MBです)任意のデータアーカイブシステムにとって常にプラスです)。


MATデータファイルをお持ちの場合は、ここで変換します。 MATにIMAGEという名前の変数が含まれているとします。

data = load('my-mat-file.mat'); % data is a struct 
complex2csv('my-mat-file', data.IMAGE); 
+0

ありがとうございます。この答えは、理想的な結果に非常に近いです。しかし、私の3D配列は複雑な値ではありません。私はちょうど3番目の方向を分解したいです。8 – Alice

+0

与えられた関数 'complex2csv'は、入力が実数の場合は虚数成分のファイルを作成しないので、実例と同じように使用することができます。 –

+0

2つの問題。まず、実行中にエラーがあります。未定義関数 'iscomplex'は、 'double'型の入力引数です。 – Alice

関連する問題