2017-10-12 1 views
0

Ich habe ein Bild (Matrix), das Werte auf 16 Bits hat, das ist zwischen 0 und 65535 und ich möchte es in einer Binärdatei schreiben, also verwende ich fwrite, wie es in der Dokumentation I heißt habe versucht, unterschiedliche Genauigkeit zu verwenden, um die Daten auf 2 Bytes zu schreiben ('integer*2', 'uint16', usw.), aber es scheint, dass die Daten auf 15 Bits gesättigt werden, das ist der Maximalwert ist 0x7ff, wenn ich mehr Bytes verwende, sagen wir 4 , die Daten kommen vollständig mit Werten größer als 0x7ff und weniger als 0xffff an. Ich habe in der Dokumentation gelesen, dass fwrite die Werte sättigen, so dass es kein Inf oder NaN geben wird, bedeutet das, dass ich auf x Bytes schreiben kann, nur (x * 8 - 1) Bits?!?Matlab fwrite Sättigung

Gibt es eine andere Möglichkeit, das Bild in eine bin-Datei mit den richtigen Werten auf 2 Bytes zu schreiben?

Antwort

1

Können Sie diesen Code ausführen und verifizieren, dass er auf Ihrem System funktioniert?

%generate and show data 
IM = uint16(((2^16)-1) .* rand(512)); 
imagesc(IM);axis image;colorbar 
%write data 
fid=fopen('image.dat','w'); 
fwrite(fid,IM(:),'uint16'); 
fclose(fid); 
%read data 
fid=fopen('image.dat','r'); 
IM2=fread(fid,inf,'*uint16'); 
fclose(fid); 
IM2=reshape(IM2,512,512); 
%check if they are equal 
all(IM(:)==IM2(:)) 

>> 1 

Wenn das funktioniert, können Sie überprüfen, wo es sich von Ihrem Code unterscheidet?

+0

komisch ... es scheint, es funktioniert ... es funktioniert auch mit 'ushort' ... aber es funktioniert nicht mit 'integer * 2', vielleicht ist es wirklich die signierte/unsignierte Ausgabe ... Danke – sop