2013-01-17 6 views
5

Ho un Binario Sequenziale Binario (file BSQ a 1-banda), che è un numero intero senza segno a 16 bit (2 byte).MATLAB: lettura di entrambi i byte di un file binario a 16 bit senza segno

Attualmente sto leggendo l'intero (immagine) attraverso multibandread:

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

Quale processo in MATLAB mi avrebbe permesso di leggere entrambi i byte singolarmente? Ad esempio, vorrei leggere il file in 2 nuovi array in MATLAB, ad es. byte1 (400x400x1) e byte2 (400x400x1).

Può essere raggiunto tramite fread? Osservo che nella sezione "precisione" è possibile saltare i valori di origine (ad esempio 'N*source=>output'), ma non sono sicuro dell'esatto processo.

+0

Hai provato a specificare ''uint8'' anziché' 'uint16'', ottenendo il risultato e dividendolo in due immagini? Oppure, in alternativa, suddividere il risultato corrente in due immagini utilizzando operazioni bit a bit? –

+0

Ho bisogno di estrarre entrambi i byte dall'array 'uint16' - la lettura come' uint8' può essere ottenuta? (Sono più interessato ai dati contenuti nel secondo byte) – MBL

risposta

4

Un modo sarebbe dividere il tuo attuale img con operazioni bit a bit. L'LSB immagine sarebbe:

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

e l'immagine MSB sarebbe:

img2 = bitsra(img, 8); 

non è obbligatorio, ma forse si potrà anche convertirli in uint8 s:

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

'img2 = bitsra (img, 8);' sarebbe meglio. –

+2

Sembra averlo fatto. Mi interessa solo l'MSB, che sembra avere dei valori ragionevoli usando 'img1 = bitand (A, 255); % // 0x00FF'. Cheers – MBL

+0

@BenVoigt Grazie per la correzione! –