2013-01-17 10 views
5

Mam binarny zespół sekwencyjny (1-pasmowy, plik BSQ), który jest liczbą całkowitą niepodpisaną 16-bitową (2-bajtową).MATLAB: Odczytanie obu bajtów niepodpisanego 16-bitowego pliku binarnego

Obecnie czytam całość (zdjęcie) przez multibandread:

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

Jaki proces w MATLAB pozwoli mi czytać oba bajty indywidualnie? tj. chciałbym przeczytać plik na 2 nowe tablice w MATLAB, np. bajt1 (400x400x1) i bajt2 (400x400x1).

Czy można to osiągnąć przez fread? Zauważam, że w sekcji "precyzja" można pominąć wartości źródłowe (np. 'N*source=>output'), ale nie jestem pewien dokładnego procesu.

+0

Czy próbowałeś podać 'uint8'' zamiast' uint16'', uzyskując wynik, a następnie dzieląc go na dwa obrazy? Lub może podzielić bieżący wynik na dwa obrazy za pomocą operacji bitowych? –

+0

Potrzebuję wyodrębnić oba bajty z tablicy 'uint16' - czy odczytanie tego jako' uint8' osiągnęłoby to? (Bardziej interesują mnie dane zawarte w drugim bajcie). – MBL

Odpowiedz

4

Jednym ze sposobów byłoby podzielenie bieżących img bitowymi operacjami. LSB obraz byłby:

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

a obraz MSB będzie:

img2 = bitsra(img, 8); 

nie jest obowiązkowe, ale może będziesz także chcesz przekonwertować je do uint8 s:

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

'img2 = bitsra (img, 8);' byłoby lepiej. –

+2

Wydaje się, że to zrobiło. Naprawdę interesuje mnie MSB, który wygląda tak, jakby pochodził z rozsądnych wartości za pomocą 'img1 = bitand (A, 255); % // 0x00FF'. Pozdrawiam – MBL

+0

@BenVoigt Dzięki za poprawkę! –

Powiązane problemy