2013-01-17 23 views
5

Ich habe eine binäre Band Sequential (1-Band, BSQ-Datei), die eine vorzeichenlose 16-Bit (2-Byte) Integer ist.MATLAB: Beide Bytes einer vorzeichenlosen 16-Bit-Binärdatei lesen

Derzeit Lesen ich das ganze (Bild) durch multibandread:

img=multibandread('IMAGE.bsq',[400 400 1],'uint16',0,'bsq','n'); 

Welche Verfahren in MATLAB würde mir erlauben, sowohl zu lesen Bytes einzeln? d.h. ich möchte die Datei in 2 neue Arrays in MATLAB lesen, z. Byte1 (400x400x1) und Byte2 (400x400x1).

Kann dies durch fread erreicht werden? Ich beachte, dass es im Abschnitt "Genauigkeit" möglich ist, Quellwerte (z. B. 'N*source=>output') zu überspringen, aber ich bin mir nicht sicher über den genauen Prozess.

+0

Haben Sie versucht, "uint8" anstelle von "uint16" anzugeben, das Ergebnis zu erhalten und es dann in zwei Bilder zu teilen? Oder alternativ das aktuelle Ergebnis durch bitweise Operationen in zwei Bilder aufteilen? –

+0

Ich muss beide Bytes aus dem 'uint16' Array extrahieren - würde das Lesen als' uint8' dies erreichen? (Ich interessiere mich mehr für die Daten im zweiten Byte) – MBL

Antwort

4

Eine Möglichkeit wäre, Ihre aktuelle img mit bitweisen Operationen aufzuteilen. Die LSB-Bild wäre:

img1 = bitand(img, 255); %// 0x00FF 

und das MSB Bild wäre:

img2 = bitsra(img, 8); 

nicht obligatorisch, aber vielleicht werden Sie auch diese in uint8 s umwandeln möchten:

img1 = uint8(img1); 
img2 = uint8(img2); 
+2

'img2 = bitsra (img, 8);' wäre besser. –

+2

Das scheint es getan zu haben. Ich bin nur wirklich an der MSB interessiert, die aussieht, als käme sie mit vernünftigen Werten mit 'img1 = bitand (A, 255); % // 0x00FF'. Prost – MBL

+0

@BenVoigt Danke für die Korrektur! –